请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
5 s) w* B% Z' ]: x9 N3 I8 t// tag --> Object! q0 A2 q3 Y3 H0 J+ ^/ C
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法6 ]# e$ ?! v& _1 _
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))8 T1 ]* Y. u6 l: K8 C" h
// Object --> Tag$ b% L* G2 v- A# B! R. ` P
//直接通过对象的Tag()方法获取
( b& h4 P/ b# | T' K, ]) I, ]0 d* t8 ^tag_t getObjectTag = getObject ->Tag();
$ k8 C% @# ]$ T" Z# h& A//tag-->handle
) n s( d2 q! ~8 `& y1 r$ W) tchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());; O% p$ `2 t4 K4 W" g, z) e& Q
// handle --> tag 6 ?( k z# j, H$ h( Z6 h" S2 p' I9 @
// ... 往后看....
; p0 f0 F9 X- X* E: V[/mw_shl_code]
: X, t3 v3 S# b: W, _; f* GGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
3 b$ `1 j4 N# ^这个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]9 t: o+ r, j$ n4 z. p
7 X8 U0 k0 |, u2 N4 x2 A2 D0 Gstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
& J9 t% [$ L5 f{$ m& U3 [. u; T
stringstream ss;
1 m, l. }( Q' Q1 A' m% U2 G) H# Q0 j ss.clear();- y8 Q8 k4 ~# v( x1 U9 ]
unsigned int/ E9 S: c- H4 ^/ d
ID,
0 P/ x3 V$ {- R3 Q2 f, [+ g version;
# `4 `" r% F; C5 M8 t5 _ char9 g2 _ d/ h, [4 A4 N- j+ F" t% ~0 Z1 r4 E
* file_data,8 W* j3 r$ G+ h; \+ \$ _
* handle,
: X2 i$ _" ~- ^ msg[30];
# s3 h. T' W' Q! }4 A# ~ if (objectTag)) d$ ]1 R/ Q# `3 w9 o
{
( ?6 ^/ ~0 k+ H handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
, V$ i& x" ^' q- p* Y Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());: F) t8 t& q4 f) ~ m9 c
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);5 G J& |$ Z" Q2 m& n: {
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
+ V# z+ _. d( | ss << file_data << "_"<< ID <<"_" << version;/ ~, ?2 R7 [- y3 l( m
UF_free(handle);' A& O0 S7 }4 ~: Q* N3 J
UF_free(file_data);& Y( L. q5 O: N, ^! e
}) b! K% ]- _: }, g- k( ?
$ e+ z5 f m9 t9 b Q9 }# H
return ss.str();; [) `1 p M( }& }7 a0 U
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
) W9 Q6 |4 m* T7 o7 S////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)0 I& N+ h6 K( l+ m4 S( M4 D
{- x' [ M7 `, Z8 M* l
vector<TaggedObject*> getObjects;
' t3 D& y# U+ p p8 w* m4 u getObjects.clear();* c$ u, g6 y/ Q: M
8 K+ O5 o! Q* }2 D
string attributeName("");
( a" o& [, ~, w% C7 a string attributeValue("");
+ W0 U' F; _) j! `! j" C+ Z6 p/ b vector<string> stringArray;
' x1 x1 t+ x% ~2 Q+ v4 J stringArray.clear();8 O* a" L1 Y# w7 H, Y$ d
//get the attribute value
. e9 K g8 u" y" ?5 D // get the attribute name 2 Y" L* H5 j7 x" B5 w! `
: W; d5 ^% N, Z! Q! s1 U% ?' p3 v: c attributeName = GetAttributeName_FromType(typeT);
! e W- b% V7 g! c+ P. x if (isStringEmpty(attributeName))
: _$ R f0 a& _/ b9 D- X6 ] {
5 L3 L) B8 H4 p, ] { return getObjects;
9 Y5 c% S N: k" a3 _+ g" A* B }
3 T* Y9 X8 }7 G8 e+ O3 u //get the attribute value
: R( V) L8 V8 o- s& M bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
7 m T$ x9 u% t! Z) J if (!hasAtt)
4 F P/ C! I" O0 r0 \; Q5 M {/ K4 d/ P* k- o) E4 r# M( j
return getObjects;7 @2 e1 V. T* {: J( E5 @
}
- Z: o4 l0 E1 o( ?5 S) M& H7 d% D/ Q# V- K1 @
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();' h/ F5 n1 I+ y! D
3 k& G+ e+ \" e% z O if (isStringEmpty(attributeValue))- K/ n, N/ e# j5 D" R$ c# j+ j
{! A: E' f# g4 u2 i( G
return getObjects;
n! E8 r& b9 v* K6 J- L7 I7 J" r }
" G# w8 ^- B( X& U0 f$ Y' T8 H
* Q" Q% j8 n# e, `6 E* ^: q! G/ }; ] T% n2 B$ ~
//get the key based on the split value 7 c! t3 [+ Z* m. F2 r; t
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);2 T |1 |7 U. C7 |
for (string item : stringArray)
# }3 t8 h1 H# M0 j/ ^9 f {
4 w; \6 g9 b% ~! s1 R //read the string to get the object
2 h! @+ c4 A0 T2 W6 E7 F1 e TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));* D6 d( j+ j( m8 ]
/ X {; g! o! r: H" ]/ R" b" r1 e
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)9 v; |2 y0 C" x3 a# E3 q0 j2 i9 o
{) i$ l1 v' [5 K8 k
getObjects.push_back(tempObject);
: E$ J2 E" F- V" r& [ }
8 e4 i+ P6 b2 V2 ` }
' w _4 a7 ?7 ]7 T
1 d5 N% B9 [; X8 P' N1 i return getObjects;: E/ W6 @$ _% L8 \/ W
}[/mw_shl_code]* G+ `+ G) J9 V1 E. b. y
9 n7 _# A4 B$ ?$ c6 h
/ _* h5 L! e9 ~! q/ `5 g- k/ c& k! k7 Z
更多实例视频和专辑课程陆续分享!
) d, `" d5 E/ S+ z0 G( @2 v& |. {* e6 Q/ M/ V
欢迎转载学习!
7 Z1 U$ c* x9 @2 u. g* q" G! e @ |http://www.plmhome.com
# D! q+ X ~ q- d& d: | 3 ?+ h7 s- [4 O: M% r
4 ~' R) P% E( k8 {/ i. {& J
. Q }* @! e1 QEND PLM之家plmhome 0 l( O% {- n5 a8 L! I7 p8 w
▲长按二维码“识别”关注 1 B( X& s0 I- s
- C8 @' {. w7 {! N+ d( U~~~~往期经典文章链接~~~~ ' P: ~; Q& ]2 {
NX表达式视频
4 W* ]& h" Q0 m
( K ~: A5 _, p6 l5 _) ~NX冲压分析可成形一步式视频 " U4 Q/ V. ?1 `+ H3 n: f! D# Q. W- A
r- O# x0 B4 ZNX产品模板工作室PTS视频 NX高精可视化HD3D视频 % s' D( d K. S0 ~5 b# x2 q) X
7 N. v# I; N( j/ o) D0 RNX模型检查一致性check-mate视频 & r( `3 I3 s% U
$ q0 M3 |% a! A& y/ e0 y) F) r& T
NX入门视频实例教程(8 小时) $ [" k N7 z0 n2 R ^2 W
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | , ?+ Y' T; ~3 ?9 t7 `7 d
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | 9 S. g! U$ r- {1 M+ T' ^1 ~
其他重点咨询 3 B! A, f( M) L I8 i& q! X
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
, c) t, F! Z; _ |