请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]/ w1 G% `- k$ X0 d' q
// tag --> Object
6 e+ E5 J4 y6 ~4 n//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法 ]) a$ V ~% @* }" R: J0 C
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))- ?& E: F( x% K2 l0 `5 E
// Object --> Tag+ n# ~/ z5 S* K7 \1 K" f% {
//直接通过对象的Tag()方法获取2 i) X) T" q; u8 T4 ]
tag_t getObjectTag = getObject ->Tag();" `6 t9 }/ o, p. T
//tag-->handle! ^( B+ {+ x: T! }) T% R) T
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());, Y7 {" A# E. ?0 T
// handle --> tag / f, B* \' w9 ^' Q0 O; Y. ~
// ... 往后看....7 f6 v6 p1 o9 @3 ?& l. p* j2 y
[/mw_shl_code]
. g( P, Z% r; O' I, \/ {; @GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
& p7 @) A7 b* v这个handle就是唯一标识,永久(相对来说)保持不变,那么假想存储这个值后,关闭软件,重新读取就不用重复选择了。通常情况下,保持一些特殊的对象能够存储下来,需要通过这样的方式进行。那么是否一定需要存储这个字符串,如何通过字符串再去找到tag,进行操作呢。那么接下来介绍三种方法供参考。 (1) 通过UF_TAG_decompose_handle方法可以获取到fileID,ID,version,然后通过 UF_TAG_compose_handle(file_data, ID, version, &handle); 就可以获取handle,有了handle就可以获取UF_TAG_ask_tag_of_handle ;这种方法,存储完整的handle字符串,字符串太长,没有必要。 [mw_shl_code=cpp,true]
7 _$ T5 N2 V0 W: ]+ H# ]5 l5 M/ B \0 K1 u# Y
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
" Y" j6 C3 j# \{
1 b% P" b, c# a: R: N) `4 Y stringstream ss;
9 p+ Y' w) i8 J8 y9 ]! z ss.clear();
8 y# o3 _2 I# J% A unsigned int( O5 K' p, C2 o% W5 Z, B8 l! @6 t
ID,7 F' Z) e7 S$ O! ?/ N' y$ N/ R! _
version;
2 B# d- k0 w+ y( K. F- t char
% `( I/ Y! h* @, i5 o * file_data,* ^6 T( L9 L/ P7 [$ V/ J
* handle,
v4 s4 _- I* o: _2 k* H msg[30];* o k$ C5 h! `% ^% P7 A g* a7 c
if (objectTag)
* z' G7 b; S% v {; g! \+ N) V' H, x/ q4 s; q# A
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());8 i* A c! r1 |
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());9 p/ D$ w- s" V" ~/ U1 l
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);0 _. Z7 ^& \4 j2 U' R/ u6 F9 D
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
4 A, I: S) y' l+ n+ o$ ~! j ss << file_data << "_"<< ID <<"_" << version;$ [" H$ v8 `* X$ A
UF_free(handle);. B) ~. v) G0 V- o
UF_free(file_data);$ O5 P# n8 ?6 \) s$ }
}
2 [ ^5 x6 ?+ n9 v( m, W; c8 v j
: s( d4 \) J5 B c& @% K/ ]% _ return ss.str();
/ h: c( t4 L/ D# M1 D& J}[/mw_shl_code] (2)通过存储file_data, ID, version的组合,这三个值结果是这样的,如果能够存储这三个值,那么通过Compose的方法就可以组合handle,这样就饿可以查找了。 handle:RMHPressureSymbol.prt R0000068a00000028 file_data:RMHPressureSymbol.prt R ID:1674 version:40 (3)非常简单的方式,通过FindObject去进行查找,只需要存储ID就可以,(当然这个ID是不是一定唯一还需考量),通过 "HANDLE R-ID “ 的组合,使用 NXOpen::Session::GetSession()->Parts()->Work()->FindObject(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 + j6 q/ ^2 c+ L+ V1 a
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)( F4 ]# _1 _" ^
{" ]: ]3 X* O& C T% D% W
vector<TaggedObject*> getObjects;
Q& D6 {) d- t- `, k( a7 v# v getObjects.clear();
, L) K0 H5 ], _7 U \3 M( `. `* d: S6 | ?% j' M
string attributeName("");
$ B8 x" N) w2 ^2 a: S6 I8 ` string attributeValue("");
; @; [' a! k. r: T) j vector<string> stringArray;
* S1 V. n- e6 V$ f stringArray.clear();, z/ @$ ~( n6 f! f7 y1 T
//get the attribute value / B1 p5 ~5 k: `" j
// get the attribute name ( h t, ]3 `, A: d, l
1 A9 P: U2 ]4 A$ S attributeName = GetAttributeName_FromType(typeT);
# h" ]" w7 ~; i' K# i/ [/ j7 F if (isStringEmpty(attributeName))
7 J/ E; q+ U' c' A) }& D1 { { B* H7 [4 x6 H0 X" G
return getObjects;* L& A m/ Q% I r k6 N3 }
}
: o! Y0 J4 ]. ] [) z //get the attribute value
2 T+ d6 ^+ O4 V4 `' V- U bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);; K5 R5 F" J- U# P. @1 l* \
if (!hasAtt)6 q9 f/ l: C$ ? z. Z9 g! e% Y- J
{! N( K& a$ p' X7 R
return getObjects;) t) w4 j& G6 n2 {
}
0 z. m: p1 D5 C) w+ g0 t7 h- i* k$ m% n- w1 s! J7 J# c$ J w
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();: @1 b' u. W* I2 i4 e
9 F' K2 `. Y7 E5 [: o9 c/ W5 V
if (isStringEmpty(attributeValue))
1 W# b) E( B! g. y {
/ H" B2 z- m& F0 a. D# G: k) h M return getObjects;, ?. J9 R& z% Z; @
}. K) n1 Z8 ^+ v; w( C
0 @2 h1 t/ F4 i6 }* I
, p+ ^9 C0 p: r: `; n+ S //get the key based on the split value * C; y: u1 F% P! b) k
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
c. V( T, j K for (string item : stringArray)5 A6 h( ^3 @ r8 ~" f
{
, ?% m5 N" `& B //read the string to get the object 6 ^' Q Y7 Z0 j( Q# g& n1 @$ {
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));7 I* ]+ [1 L6 [1 n9 l
& }. \! l, Y( l/ m if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)" o1 P% [5 F4 q) m$ v0 h3 s" q
{
- t4 w( m1 \+ n& r4 f( h( I getObjects.push_back(tempObject);
3 n3 i3 ]. z, @$ u1 i }# U" M2 r/ ?; `, V+ P2 t
}
$ q" ` |6 P1 u, o
3 D4 P7 F K& D" b% L2 B4 ] return getObjects;$ g4 ^7 E7 Q$ g2 z
}[/mw_shl_code]3 v: d8 Z. v9 K& ^0 W
; B/ X9 M" i- o0 v, ^
0 O9 C+ Z2 f$ ]
+ o3 J$ }, N6 B+ p更多实例视频和专辑课程陆续分享!
, E2 K1 H) w3 A2 w4 k* K; r
2 m1 i" d1 y: Y2 V- H 欢迎转载学习! ( X: o! m( b2 @4 S, T O* [- Z; H
http://www.plmhome.com 8 ]/ h6 R2 V# L4 J2 b
: s6 ]! y+ i( w' J% }' s; S
7 e, o; e2 p |, ?$ M
* Y4 t# U" ], G. B0 v( ]* O4 pEND PLM之家plmhome
* v- i9 o7 G# [▲长按二维码“识别”关注
/ j8 C0 T4 m7 `, I5 t- |3 o( C
6 O+ w4 R* o9 w~~~~往期经典文章链接~~~~ ( V' b- @ Y2 L* j$ u
NX表达式视频 * ^+ s1 O0 X, K: a# D% R2 U
/ X5 k4 W* p- o+ a
NX冲压分析可成形一步式视频
# W" a* t7 Q+ E( q2 M3 q2 z. g1 W' r$ Y! y2 G" v
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
3 w4 Z0 `) I0 j4 k6 X& ^- V3 S. G4 w" ^
NX模型检查一致性check-mate视频 ' c. Y U$ K$ |" o8 v
8 e( v: J% y- o. t/ |- ~NX入门视频实例教程(8 小时)
$ h g9 Y' J3 T$ P D' gNX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | % y4 {' B5 X) e
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | ( T( K$ r; v! I* w
其他重点咨询
8 }! q& L# f* {$ C+ S工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: 5 t/ \3 h9 u3 k2 s! I
|