请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
9 H0 m# q2 _; r$ |8 @+ ^, c// tag --> Object- D: |, c8 s) N7 U( i$ k8 z3 G
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法) Q( k; c6 Y! h/ ^
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
# z. r& x/ H7 s; b9 ~// Object --> Tag
4 u8 I, K$ e' z/ [& J//直接通过对象的Tag()方法获取
5 G; W x3 }: g, Utag_t getObjectTag = getObject ->Tag();" M4 L0 v4 B4 e) g
//tag-->handle: n3 Q, h. K ?
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());' ]/ X0 {; {/ j2 a6 c# D
// handle --> tag
/ Z/ z/ }5 {# |// ... 往后看....
7 y# i3 E+ K5 i[/mw_shl_code]
- Y( E% F! i9 n3 \" _6 \GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 $ |) R/ j- m7 V0 l; k
这个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]
* M4 Y% Z4 e8 e: _- q6 {6 U5 b) P+ J7 Q! h; B9 k3 H
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
- S. C$ W1 c* J) d! \) ^1 L{) k" H; H# i) s
stringstream ss;; a2 c4 B# a$ m# x {, L4 ~
ss.clear();
) r5 c( z! r3 [3 }3 u1 r/ q unsigned int. p. Q6 K& t9 |: o4 U J* D
ID,. a6 H6 H3 U! q
version;( |+ k# F6 n& F- e0 _. b: O* ?+ ?
char
' {8 Z6 D) E# }3 g3 c * file_data,! R2 P4 o ^7 z2 n
* handle,9 I7 K. y0 N0 Q9 k1 D) X
msg[30];
v- ]0 m- H! b+ `7 s- O) I1 K/ ? if (objectTag)4 u# |2 o" b c# [( d. z
{
" i& B* a n6 c0 _; }% l$ {( m handle = UF_TAG_ask_handle_of_tag(objectTag->Tag()); X( ]& Z. t+ T5 ?
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());; H7 q3 x E3 }. |! j3 W, i
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
# U, ?1 R6 C# ~3 J Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);: }0 R* j7 K# R: A# V% H6 m
ss << file_data << "_"<< ID <<"_" << version;
6 w( n+ P3 Z2 P2 ]: h" O UF_free(handle);2 }$ p" Q0 P. V" p* o5 E4 t
UF_free(file_data);7 o g- }, j/ O4 c% a( k7 G
}
# u2 [# `- u v/ z5 L
& Y& L9 S# t5 T: v return ss.str();0 u% I! g4 K' t) I* m' T
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 P1 G' i& Q' j9 j# V
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)" P1 K4 N# c8 v" J; `
{
2 u" O# u& R% u) C$ ~. u: E) p4 W9 X vector<TaggedObject*> getObjects;
- V; V+ A) d6 X4 c getObjects.clear();
- r3 P* i) g4 n) q) F) K& c* i& C$ E6 @) [1 X4 J
string attributeName("");
$ t& T9 Z8 u* F3 W& e string attributeValue("");! v# c: n9 S7 x7 R; K( L
vector<string> stringArray;. o& G. B4 M- f+ U6 B
stringArray.clear();
+ q. n2 k" k# s+ n //get the attribute value
$ _" S* D. o7 O& o // get the attribute name ! u1 h* M$ j) X% c4 ^
" z0 \8 v; ~, W' E8 k+ A( L attributeName = GetAttributeName_FromType(typeT);& { e* e* E& R0 M$ Z
if (isStringEmpty(attributeName))4 g/ _' X- C' b6 a) l
{; ]4 q9 l# W7 r2 O* U8 q: J8 J. y
return getObjects;+ ]. V9 }3 v6 q$ k- S, q
}
5 D* Z, o( {; o; [2 _3 k( j7 K //get the attribute value
( t. h1 Q+ E# X" h9 v" { bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);7 X# ~% Q9 C( a3 b; ^7 _
if (!hasAtt)
4 d3 X- B. ~" ?, |) R9 r {; d+ B& r4 x" h: b
return getObjects;: l. `: ?1 q1 d! q3 f
}% q+ g' ^3 ^8 s* t7 l) [
8 q5 G. u p; l) V8 v- N attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText(); f. E% P2 C- [% {1 |
0 U7 E8 k8 v: J: c
if (isStringEmpty(attributeValue))
2 \9 t& \9 Z ?& R: I {: X$ O( N( I9 u! `* ^7 i9 |) {# R
return getObjects;
5 P: @" X7 G% o1 O$ m4 ]; S } }
' f. n6 q* |/ {9 x/ R$ E# c1 {2 v- m: h8 l2 C
6 G) P; Y5 i4 d4 u4 A
//get the key based on the split value . h; G" Q/ q1 L# t# {, g
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
& C' F% Q q' e for (string item : stringArray), i: `& ?& W' U3 m0 v: C+ g' ]
{
6 y% @' I6 f& C M+ S4 V //read the string to get the object
% Y! B; t: O) v( K TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));0 u! `. b0 v6 ~. |% ^0 a
; N) \) W9 R# J) ?* y5 T if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE) C1 M! b$ t E) n
{# ~2 ?* G y) t2 p& M9 ~' `$ j$ u
getObjects.push_back(tempObject);! G. _ L6 O3 ?/ B1 r6 |% U& \9 b
}$ s, k) _1 n9 b) f0 m
}
! l" o: q) ~: ` E$ ], }7 r& S$ e$ ~* D% ?, s% r, J8 D* _* d) l! G
return getObjects;# [9 K& Q- a8 t7 ]- T" k4 ?
}[/mw_shl_code]
; H2 i2 X2 j3 K% q6 V' g9 ^$ _; K! ]' M) c {" h
0 }; d! v7 I7 R
" H, r/ O8 C' I0 ?! _6 a; p+ ]更多实例视频和专辑课程陆续分享!4 z- Y1 p5 j5 x
% I2 A& m& z6 @9 O, m2 Y- P
欢迎转载学习!
$ d+ a' w* ]- T0 E- u9 Mhttp://www.plmhome.com
! K7 N. m5 G; |3 v& k: ?6 m4 M j; h
- ~* J+ ~4 }$ I3 T2 L0 q$ ^% c7 X7 N6 U4 g
: C$ [* b& v# b* S8 ]8 WEND PLM之家plmhome
0 w% ^( v5 }& K▲长按二维码“识别”关注 $ [ U: |7 q1 E2 I
4 C Y$ b& ?/ l9 R7 _~~~~往期经典文章链接~~~~ ! f% [' O& t+ G/ b6 I0 W1 U/ ^$ M
NX表达式视频 , S) R: x7 k% ~) C
0 }0 Q0 g- W* a5 zNX冲压分析可成形一步式视频 . y9 y* Q/ F0 U( c& z# l( y8 G8 ]
) g9 j/ @4 o( X/ g7 j! n# R8 pNX产品模板工作室PTS视频 NX高精可视化HD3D视频 ! i. ?( z/ d" x r
7 X( u( h$ h! |2 U/ c
NX模型检查一致性check-mate视频
5 t/ t' I9 U' P+ `" a0 F8 G4 `9 I3 i: T( I
NX入门视频实例教程(8 小时) # {" C1 Z8 L% W+ i7 i
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | : K1 X7 K5 f) [& v; F- L* V2 i/ J
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
% s' t* n# i9 `1 m8 T8 q$ G其他重点咨询 / M. ^9 e5 _+ H; F A2 a
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: , _: {+ k4 \- x: e/ A5 ~
|