请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
6 D) S% k' x- t2 ^% a// tag --> Object, V9 U7 ]9 F/ G/ V5 a) K3 _
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
/ @# Y( r7 Z% d9 CTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))& K B6 C% B( d4 R* f- A
// Object --> Tag6 R; S1 m+ X4 f& L2 \- n
//直接通过对象的Tag()方法获取
. I/ Q6 S8 Y% v! F# Ztag_t getObjectTag = getObject ->Tag(); _/ i, y4 v% {5 q# U
//tag-->handle
" ~4 \* F. J" G) k3 kchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());# E1 e$ K/ U0 k% T
// handle --> tag
$ E' v2 b; }5 w) ?1 W// ... 往后看....
! @! i+ R) r& D[/mw_shl_code]
3 h W2 M! {2 L, a2 _5 hGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 9 I. f7 m- C8 ~8 F% i1 V% E/ C. _" r6 I7 |
这个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]
6 ?& @: v S% _" }; S/ T& w( r) A/ o# ?. g Q! B* T, Y
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)7 R3 f" c$ s- m$ o( l V
{4 B1 R0 j% G/ g8 N
stringstream ss;
/ `: ^% }8 \8 C ss.clear();+ z% _$ _+ F4 M" C: W/ x
unsigned int
) P0 B1 {. }. g7 I" t: m ID,
, z4 r5 G5 C E z6 T8 U version;
9 N0 h& L8 ?" D3 G char
3 O4 h' w+ W% C, }1 w3 y1 o" T * file_data,+ S( d1 a1 _: S* J- b( w9 ]. d; l
* handle,$ e2 y o( a0 b7 |: R
msg[30];4 ~& D2 c9 t9 M; I ~
if (objectTag)4 w( v2 p, G- v: E/ z
{- _# T2 x$ a% t$ _0 g: \, O; [# t
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());; X2 d. J/ q! y0 D
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());/ e/ U9 c* p/ K
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
5 Z* I# Z3 s0 u- _ Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);1 i$ |7 E/ q1 i, z3 ?7 K4 G4 B
ss << file_data << "_"<< ID <<"_" << version;
7 a/ q4 B# [" g2 E% J, _ UF_free(handle);' t1 G- z) k1 q1 [$ m
UF_free(file_data);
5 d3 H6 s+ N. T# M }
" L8 l; A; }5 h ? v# U& g0 c) v9 Y- L& [9 ^; L' s
return ss.str();
, K7 Z, m% I) s$ |" _% X: g/ 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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 7 p8 W, n4 }- w' `" }
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
% j2 y- t( X% D: M' Q- U3 v{
# o: S/ l. r8 t9 Y$ k vector<TaggedObject*> getObjects;
+ R4 N* w$ A% b f! g4 [8 A% c( e getObjects.clear();) W# g' G% j; }( F
% W, l8 }; w4 j; g string attributeName("");
# E) I- f8 q% y string attributeValue("");; M8 ?2 ?4 v% o
vector<string> stringArray;
& Q: `6 O* U, _/ M2 L, P0 a stringArray.clear();
: n" V7 D, \0 r9 K8 X$ O8 J; f //get the attribute value
8 E) u$ V: y# c' } // get the attribute name
" u) |" T" I: n0 I( ~' u3 \$ {4 K1 Q
attributeName = GetAttributeName_FromType(typeT);
2 E" I) ], k6 a q! O: c/ ` if (isStringEmpty(attributeName))
( }+ t! Z4 M4 ` S; i8 B. D {* ~; G/ F2 z# \8 Y! F
return getObjects;
1 R% @: D6 b' H }
% Y/ \% M9 p: I+ h( Y; W0 O$ p //get the attribute value ; p k8 z) p( H7 ]3 r; B
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);2 W8 A1 E; G; p8 F' R5 `
if (!hasAtt)7 J9 n, u, Y) ~. p: }6 b
{; V# t/ R& v+ f5 @
return getObjects;* t: D7 y, Z7 c# X
}
0 ^7 g3 |) \3 g/ b# b4 X: A
2 \: G3 R. j$ O' c" T attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();4 U3 W4 D# R6 ~2 i0 E9 ]) J+ d; q- J A
0 G( q `; R# h$ M4 K6 P
if (isStringEmpty(attributeValue))
8 C* F+ ~8 \7 J ] {. A8 W$ @0 l3 o* z7 L
return getObjects;
# E+ b: @. J* { }
2 v0 u$ \* K- W4 F
! K# ?* ]8 ]7 k! a. j
& o; A5 V9 d3 U8 s% \; ^- d! F8 j //get the key based on the split value
- I& r/ x) D6 G String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);5 ~$ P$ [" q* u4 y/ r
for (string item : stringArray)
* u, H' m F, l. I& e- [ {( V, K$ @9 k0 x
//read the string to get the object 9 b Z) d# b N" l5 X; Q {
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));- _( L* |: p1 C" J" O! J' m* u
' |: ~0 m. J+ l. ]. K" M if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)- p8 y$ V/ b) Y3 E' `: M
{
- L: B5 K6 D# X% _ p9 l3 _ u5 r getObjects.push_back(tempObject);+ Z3 j/ V8 r3 r9 F* R( E* E
}
# K# _1 ^% F; r0 w4 z: R- ? }) o8 Z3 Q7 \# w& x" f; O2 @# f7 y$ N" M
4 w0 g3 I& T- M5 g' o
return getObjects;( {1 y2 q S/ r
}[/mw_shl_code] O) U+ u. b0 m: A# F) M
2 N' j9 E, b$ t* j9 F( a
% \9 J4 l+ |/ `( C$ a6 g6 ~7 k% P; x! X& ]
更多实例视频和专辑课程陆续分享!
+ U0 s% ~/ }& F$ ^: K4 W" E+ n) I6 }
欢迎转载学习!
/ t; w1 T8 i' B" v. u1 e6 jhttp://www.plmhome.com
$ ~& p; h3 Z0 ]! P W' ?3 w; ?: r
( W, V4 _9 ~: @
+ u! k2 \! n1 x' n( I" @- S, b( d) B5 a* B; G& P9 l! L
END PLM之家plmhome 4 B4 t1 c) q3 p) a" l
▲长按二维码“识别”关注
l, j! j" o. d% F( y+ J$ y: K/ ]! ?. D
~~~~往期经典文章链接~~~~
/ H) h9 ~ k4 `, s( z) b, ?NX表达式视频
/ x% h2 L/ S7 A
5 t) J6 u' A5 V/ K8 WNX冲压分析可成形一步式视频
" ]: j; ]; Z$ R: V- U' l( [ j* r# W+ i6 x( J! G) H4 u# z
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
* V( j g% Y3 T4 W6 X; G& J* X# L! W% ?$ r5 n
NX模型检查一致性check-mate视频
7 e3 i9 d& j8 K( }1 k
- x2 ~" K! [" O6 |1 y7 [NX入门视频实例教程(8 小时) ! ^7 a# B: ^/ O* y( X
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | , m! J: z" e+ @2 {
| | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
% l, `1 A7 {) L/ `: v) e其他重点咨询
6 s# t' a; Z" o3 W' z6 @工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
O% l9 ]2 ?: V& s6 q8 \( V, w, Y |