请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
; ~3 Q& {# L$ m. H! ]# S( P* y// tag --> Object
$ J0 c* h/ M0 e) A0 s$ `& y5 E//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法" r* s3 F& }" M5 w* K
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag)). X! J% {8 y1 C$ C; x J c4 O6 p
// Object --> Tag
8 x+ d# S! T. c- ~. ^//直接通过对象的Tag()方法获取
( N& G4 J' d4 Y6 v1 Gtag_t getObjectTag = getObject ->Tag();1 _6 O" W' g: X2 w7 Q( u8 C! {
//tag-->handle* g. @* |* f0 w! r. U2 @' T5 v
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());2 O# U% L! ?* q5 d. Z- Q- R. \, B& |
// handle --> tag " Q' ~" u. @! r
// ... 往后看....
' _$ {6 e- B& l[/mw_shl_code]/ C% y. w. v9 f% Z7 G* |
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 / T' p* k1 H% T( V5 G \
这个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]0 `" W5 w& ?9 `
! d. K9 r7 |5 _5 r* n$ p5 z
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag), {# `7 {5 A) z, Q, ~- |" V
{7 H& e& i8 e. a$ y4 R2 i, z @
stringstream ss;6 v$ ^" ^) a) [6 L6 G
ss.clear();
) Y0 z( y- Y8 P$ r0 k% F& r7 @) { unsigned int
0 R$ a$ v+ @. E; w5 P/ d ID,
2 a. e r, U; x7 q version;
" Q5 {; j! s c, J1 C: ], \9 D char
8 @+ h0 }2 K# U9 @2 V N * file_data,
/ T& d3 t7 i# | * handle,
4 i+ i6 K5 j3 y/ t' z msg[30];
& V) X2 y* T- v5 g0 k5 Z if (objectTag)
a4 K4 B8 `& N; q {" Z7 l# `" }# y) a# D/ k; x/ c
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());4 T/ v( ~) F7 `4 z" _
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());) R- J, N7 U) ~7 ]' P# f+ C
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
6 H$ z/ b4 p k0 J; }% t Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);* O- P6 }; ^% C1 ^
ss << file_data << "_"<< ID <<"_" << version;
" \1 i# p# X7 v4 J% `/ ? B& u UF_free(handle);
; W* X* n' m; n" q UF_free(file_data);
% c- {, I& M6 f4 j* r }/ z( m+ {& Z/ m% C" ?( R% _, @0 u
/ k) S; }+ |. R/ X! V5 A8 W
return ss.str();
) r% _ z$ w0 G1 a}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
/ S) P- L4 C" Y////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)7 j6 r" z0 K8 I0 d' X' h1 N
{
9 O3 o% J( K" x+ A) c, T vector<TaggedObject*> getObjects;
/ n; L+ |* P+ H getObjects.clear();
/ K6 H3 z' Y3 H$ W
! I) n8 Q# J4 S% |: \; t7 j string attributeName("");
. X" \& D( Y! L+ e1 f- ^# B string attributeValue("");
" M9 j2 y1 _/ `+ E' A& H. i: D% A vector<string> stringArray;
; e. [5 {; b% t: p stringArray.clear();
$ w8 r$ M- s* u3 f; ? //get the attribute value * m; l8 f/ W3 d7 u' }/ n3 M* p
// get the attribute name 7 `6 K" u6 d* X9 k) z- a
, \7 T" w& u7 N% f
attributeName = GetAttributeName_FromType(typeT);6 ^& L% }1 ?! |5 P' L: R/ X, G! \
if (isStringEmpty(attributeName))4 R z% N' ^2 d+ Y/ Q
{
7 x' r. c; ?( F return getObjects;
9 t7 ^* ]0 P6 v' _ }
. P9 C5 s7 S" ^ //get the attribute value
/ Q6 G% p7 _+ O3 ^' e bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
2 l4 d l7 g: R* Z1 v2 u if (!hasAtt)
+ O; s( ^9 s( {( p% ] {
5 F. C l+ v8 p/ r6 x1 V& p+ e return getObjects;4 |0 |1 w- B2 y$ ?
}
. O" r9 Y9 \! w. ~( A- s
$ M- z$ W. h$ M/ w( x; E attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();; i# h4 h \6 u- Q
1 n. y b8 i O8 w$ Z3 Z
if (isStringEmpty(attributeValue))
4 q5 o* e3 c2 y { a% Q2 ~$ K2 ~3 F7 H( ?# _$ F
return getObjects;- Y7 T- C& m r! F0 w; a: p
}
; R1 W7 a- M5 P! h, k+ O: K
8 C9 v b2 J, P: P$ D0 ]$ p' n# S2 \" ]9 Q
//get the key based on the split value 8 F: `/ t( Y$ e( y! j
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);6 \; \6 M. n1 ?" R+ F
for (string item : stringArray)
2 J; y5 B% T1 z. h, H7 i {1 K) b" ]# ?' ]% p$ r
//read the string to get the object }$ e% ^( A, s d5 C. Q/ z
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
* p- t2 M& z, Q
: p( U; C9 `+ s/ O8 L( g if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
: V# Z$ f& v) v2 p9 A {
W/ s, _; ?7 S6 w0 I3 u getObjects.push_back(tempObject);% ? b% \& u% {1 Q8 _
}0 g# U" @0 e8 i
}2 k. }; J S1 t# F
1 K. I: v# m: x1 b return getObjects;
, |7 [: m$ S" u7 _7 V6 b0 l& O9 g}[/mw_shl_code]
( S$ _7 | v9 b$ D& O4 \3 L. @
9 \8 L* e, w* e, y
2 l) q# Q# c' z" A6 ^* I
4 p$ X2 V$ P* {( R, T9 b) A更多实例视频和专辑课程陆续分享!. a* X- E. i( U4 U! ^9 I2 |6 p
9 o3 `! U, v$ o1 H* h' A. |9 p& X 欢迎转载学习!
# p7 c+ d$ y8 i# s. Z! nhttp://www.plmhome.com : m; {% L) S. ^) L4 L
% b2 J' F# v- ^+ G
- I: x3 b' z% C3 W) {/ @# U* x( J: Q- D4 i0 Q& h7 O" \+ K+ g
END PLM之家plmhome + t6 R) I' K- ?, H4 f
▲长按二维码“识别”关注
$ Q! p" H1 y; Z
4 |* N+ V) K" d$ l/ J2 ^~~~~往期经典文章链接~~~~
* \+ O2 L/ V: ?, I* k% z: N$ f& vNX表达式视频
" a$ a5 t; L4 G$ U1 [' g
% F+ ?: R( c! `" xNX冲压分析可成形一步式视频
+ P/ T/ p3 z* k( V H0 e% O8 S% M1 ?# Z5 k
NX产品模板工作室PTS视频 6 添加装配模版% W! N8 w) N- S2 \4 @5 @0 c8 N2 L8 v% g
NX高精可视化HD3D视频 0 ]. t! b7 { a9 m) z
+ u; }2 ^3 \2 A5 a2 b1 f+ I
NX模型检查一致性check-mate视频
. K4 M& O* }# f7 A) L8 L) q
4 f* G6 U- u' I5 w3 Q/ b- k I* ZNX入门视频实例教程(8 小时)
9 P* u3 g# w7 V2 a2 rNX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
+ B& } F% z: A. G | | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | 5 x. B% S4 g2 [4 Y" v5 {4 A3 s) X
其他重点咨询
& |3 J' t/ G; y) @工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
& m* Y8 R9 Z8 G |