请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]9 @! W" X5 Q! c, \1 Z, L3 L. z
// tag --> Object
7 Y) S$ x0 u4 v2 W1 a" m: r//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
& }/ [8 M% G% F X F$ yTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag)): A) ^: W/ N5 r1 f( x" O0 w
// Object --> Tag
# D' i) O+ N! M4 m( @# E4 I//直接通过对象的Tag()方法获取( d. x' p) _" t7 S f
tag_t getObjectTag = getObject ->Tag();7 Z0 C# r& y9 u6 }5 W$ B! M* Q5 [% j
//tag-->handle
* d( I- R; i& M- Hchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
% K9 ~4 m- R5 T6 Q! s D// handle --> tag
8 v- `5 W$ E& }1 g( C" h" V. d// ... 往后看....! ?, f0 {) Q* s8 E! ~
[/mw_shl_code]
T1 w6 m; C8 ?" S# bGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
+ G7 D* O1 `2 Z) }) ]6 w这个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 C: j/ Y6 u' ^8 Z, L1 F! h/ P& P- H
* w* k4 Y, y& |& O4 H
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
7 m/ L# }, z- c& p( x{5 |6 ^- x- W. B) Y. V; B
stringstream ss;) G: \" m( {+ N0 x5 R
ss.clear();
+ T: I1 Z" u$ j. O+ j" U1 |- @9 _ unsigned int
" g/ [% Q( _' Z9 X ID,* d. p! [9 _: p1 G
version;# d* o9 \) r# n8 A; \
char$ D/ R! Z. d5 n: k, c
* file_data,
$ I5 K4 ^8 }1 e- I# j& M9 v * handle,
* ?: Z- R" Y/ V& F+ M, z% `& \+ ~ msg[30];( j, ]( x" S$ S
if (objectTag)3 [5 z) y) h; r x3 |2 s/ b/ K) \
{* h. f) T0 X6 n$ H+ o% i: j" k
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
# e2 p0 d7 T) r# ^+ K/ C" |: n A6 M Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
' k5 x9 b8 T9 ` Q( o# W UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
& u" E) c: E$ ?$ F. n/ e Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
, p6 \3 G! _3 D- Z: B ss << file_data << "_"<< ID <<"_" << version;
1 k/ c/ O! h( W4 j: _ UF_free(handle);
* e' o* }% d5 _ UF_free(file_data);
* A) o _0 i0 k: x }
( A* x6 ]8 w2 d! O7 q& _) j! @' ?
+ b5 W& I' D' a+ P5 @! ^ return ss.str();# b* Y- z3 L; e6 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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
0 w' c7 o8 @. e. ?, h1 T////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
0 J8 S2 \/ Y3 U4 @, D{) M3 k6 j4 M+ f& q7 p
vector<TaggedObject*> getObjects;" ]/ K2 q, e' ?: B* l+ k
getObjects.clear();
( w. ?0 i" e/ }8 [
) {, C# h6 a% b' g2 @ string attributeName("");
8 l3 M2 m3 W6 Z string attributeValue("");# `- I X+ k+ G+ A C3 I, h$ X8 Y; D
vector<string> stringArray;
) _. Y/ y) p9 H+ q' { stringArray.clear();
1 M3 v2 @$ S* N" I //get the attribute value
* |* @: @( R- W4 Y1 J2 p // get the attribute name
6 D) _) f4 }* ~" L; p$ E# u& X) s3 s% ?, h
attributeName = GetAttributeName_FromType(typeT);% ?( Z/ B0 Q0 j& Z" P2 S$ A. Z
if (isStringEmpty(attributeName))+ H% s8 }9 i4 ^) m
{8 z) i3 q! r0 S3 C( E' U: F
return getObjects;7 W- a$ f$ V/ Z. j5 J" Z: R
}
1 M8 V$ d; m2 l //get the attribute value
; W \1 K6 o+ u2 U/ i# s bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);, O4 i5 j( W, C; Z+ `+ W: \) b/ I
if (!hasAtt)! G T# V' l3 e; h- |' J
{
; p, h1 S) p& z8 b }! F b7 g return getObjects;
2 f. e. y. ^( v r }' O; A9 [# o; e+ b1 {+ X0 y w+ Z( i
4 T) |" g6 q" G0 W- o
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();- K/ `# B; m0 A4 E( P# O; ?& r! r. J/ x( p
3 m' A7 t* F D9 E8 x2 ?) _# V
if (isStringEmpty(attributeValue)). T0 F; c2 e( V3 d$ Q' i4 X
{
" K- l1 T0 s- Y$ A' g$ l0 W9 J' T return getObjects;
e: [, P7 n0 A. ` }
+ O( `5 J, R, L& I) q8 m
: c* [/ q: g9 V) p
5 W2 ^3 e( @5 T& r$ } //get the key based on the split value
& h* R& _* P; D; x String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
) h0 T/ l( ~: Y+ L) ~) Q% i) w+ E7 p for (string item : stringArray)
8 [1 s, z w+ R0 W* L A/ d {
! N+ Q. \- j: y4 O: P9 c( V //read the string to get the object
- {& L* ` o& Y* p3 _ TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));# c( ~2 b+ i; `" j: i; H" f
( \1 y8 G& O* g6 V
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
8 f+ ]0 p' v4 m {) ?- N# h B a7 Z$ z; p
getObjects.push_back(tempObject);' t0 K5 A' R% A" i) z& H
}$ T- v& p" r. r0 U0 M
}
: o. x+ z' d- U5 v/ L* ]
6 x8 m3 v8 Q. }7 u1 z% K return getObjects;
+ j2 N- \1 v" o% { V! W- Z}[/mw_shl_code]1 |- f8 g5 |* I$ q# J( P2 y1 ]7 F
7 ^$ {! a0 ]6 e) x4 c0 ^7 K' g4 C
- r6 S: t' p( ]! r/ s7 `2 A0 v8 e$ Z
更多实例视频和专辑课程陆续分享!
c9 \. `, K5 [% ~$ M5 j+ F- D4 r$ K+ T. t8 k1 A ?
欢迎转载学习!
. X+ @7 M3 R9 g2 [1 L" ]8 W \ ~2 phttp://www.plmhome.com 6 d5 I6 T. J. N" {+ F8 r
! K& g. \- \$ k
6 D* r& L; C* J
! w. V: [* F3 S" V4 R5 C2 LEND PLM之家plmhome ' a4 W! o0 E M5 ]6 M
▲长按二维码“识别”关注
6 e+ z8 B1 X/ H" e
1 ]5 G) q& i1 J6 l( S4 F4 {~~~~往期经典文章链接~~~~
3 S. Z/ ?7 _+ f$ l+ J* _' f+ gNX表达式视频 $ y" ~1 v( q5 f& S3 C, f
* z& f6 s8 t7 N* E8 |3 [3 J! p. X. {NX冲压分析可成形一步式视频
8 ^% b2 j4 ^+ r4 o0 B5 ]* f
% D7 S% X& D* x( D, F2 o7 O7 ANX产品模板工作室PTS视频 6 添加装配模版
/ I& [( Z. a: {2 p' Z4 U. R9 s7 L NX高精可视化HD3D视频 6 _* ?; B/ B0 f) |/ J% o
- r4 G& h$ z1 e5 y+ }
NX模型检查一致性check-mate视频
6 \5 Z. a3 ~* B/ [0 S1 \8 Q( x
1 A6 N1 F1 n( r( {NX入门视频实例教程(8 小时) 5 @) {( l9 E9 I) i7 J" G( V
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
9 j+ n4 _1 e/ K( K | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | 8 U+ [! O' x& u7 }! E/ t, u% O
其他重点咨询 ) C+ o& a' u2 G
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
' h% W1 N" X7 l( `1 Z |