请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
1 N) |$ b* z& j7 y( b3 v2 n& r0 y0 S// tag --> Object$ G+ B/ V) z' n
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
6 {* e- ~2 L) Y" TTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
5 e) A: F% _& [ T1 o d// Object --> Tag9 d3 ]- ~. |( m$ _/ i- y# B6 W
//直接通过对象的Tag()方法获取" e8 [' t9 E1 |& D, R- H' Y
tag_t getObjectTag = getObject ->Tag();) o8 o! l+ c) j6 h6 w. `, c5 L
//tag-->handle) d6 g8 R, G5 R) ~
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
8 j( x. F) W% D2 Q! X$ j// handle --> tag 9 ^( y$ A: X4 z/ F/ v9 D% D( Z
// ... 往后看....( y+ _: v% k( z+ Q, ?8 R1 n+ d: I
[/mw_shl_code]" W# c v8 ?+ {; U5 P6 G+ M6 A% U
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
$ }9 J1 V6 _4 r! ~) v- H4 F1 ^: j; V这个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]' y6 n. x3 y2 D1 I; b% M0 [$ U2 `
( w9 R7 A% O) g* K$ d. |9 Pstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)* f3 z# f* I1 k% P# `% D. ^
{
1 e7 u, Y( K. G; V stringstream ss;
, F4 M' f% [- D& @. a ss.clear();
7 G, a0 z. P% e, I# V2 V unsigned int+ C% c; W! y* | |7 c
ID,. a9 F" @! Z0 O q1 [
version;* x, E6 g6 U) Y; h! V8 g0 `6 P
char
4 k6 u" l( a& m1 X: O7 j * file_data,+ J! h2 x/ v1 m7 A) y3 S" z
* handle,3 [0 O+ V! b/ ]/ Y0 _2 K {8 }
msg[30];9 i) ~# W3 Q2 v7 k
if (objectTag)
9 }, c8 `' u6 _4 | {5 X9 y' c$ }) ?1 y) ~* c
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());4 \- g: p3 l* b9 G9 S
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());3 ^# N3 g+ i! J$ r4 F* B; R
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
7 \8 M9 N) o# M: Y" i Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);0 q5 A& P u- ]7 Y" e D4 H8 _" P
ss << file_data << "_"<< ID <<"_" << version;6 [9 P$ |4 G2 u; Z; \
UF_free(handle);' f0 a q7 z8 L+ i
UF_free(file_data);9 b' v! w9 N7 H. ~
}
5 X# V3 `) q3 P- G6 D7 h3 H/ J' d
return ss.str();% C3 y+ m1 t, `! i% Q
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
. f$ E9 J4 z3 `3 A0 X+ @////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)4 `# L% z6 @+ |% @* [7 _
{
5 n8 m4 m* f v$ H vector<TaggedObject*> getObjects;
- S0 x+ v& G2 A7 V! M getObjects.clear();
1 ~( w# ^ f/ b* l8 Z8 |
5 ]7 D4 U1 z4 p& w4 O6 b0 @ string attributeName("");
! P* U0 v3 W7 ]( ~& b- N string attributeValue(""); [) `. Z+ \6 E9 h
vector<string> stringArray;
4 q3 N& E. a- d stringArray.clear();
; z) B K4 I! k( p. b //get the attribute value
8 _, Y- O0 q# J" N0 `, Z9 r4 u( y // get the attribute name 8 ]5 t: I5 x+ q- I- V" n
6 m, f- l3 |# x* S/ K
attributeName = GetAttributeName_FromType(typeT);2 k8 m5 n/ g4 b5 f( k- r
if (isStringEmpty(attributeName))
# z2 Y# j- Y; W. d {1 o4 [2 |* ^3 c
return getObjects;
" [" h7 U" r+ h# C }
$ ?. j9 _. ]! D2 l5 X //get the attribute value ( i- A8 u6 l) U A' q/ b" I- f
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
. o, q( q" k+ J, c" Y- G if (!hasAtt)
# S. z- P g5 I {! o+ f: V8 w2 [2 M& T* n' p; v. q
return getObjects;5 p) N! }7 f, Q( r. l+ p6 ]; V
}
: p% Y. ]3 @; n. x
9 J3 I" c9 \. u- C# k attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();2 F+ u# n9 `- L& v; R
- T- ^$ o+ d$ m5 p e3 v1 [ if (isStringEmpty(attributeValue))7 a' ]" ]5 i" d2 h
{& D8 c$ n1 F0 n# `$ B2 V5 k
return getObjects;" ~9 A! y9 X5 g4 d) f0 Y1 V
}
! g: A0 o- Z/ i! a1 B: {1 p
9 r6 U! z+ Y* H# M' i* W) W; I- w, J# y$ \' l( I
//get the key based on the split value
8 u+ W, ~8 Z1 }( \ String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);9 N: a5 h) V1 f
for (string item : stringArray)
# I4 S; K3 d. x' [1 c% s# R {
8 v. H4 x) S4 F( P5 L //read the string to get the object
7 U8 l' H* z( j# }9 t' r8 ? TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
' q' A$ ~ N4 d* M) W9 a6 { ' `$ Z9 N8 J' p- V
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
1 [, q$ S3 d5 ~; @; B0 p% ^) X {7 Y0 `/ p' t2 ~2 h
getObjects.push_back(tempObject);/ v. ]% |* d9 D
}" o3 Z! j$ M4 t9 P
}8 w- p0 d, H% S3 B
. b2 g. q0 i2 u3 ?& W return getObjects;
# b1 ~* V7 w- u2 k! |}[/mw_shl_code]
/ w' M1 Y+ b' s" B# n
- d' w& y" h$ i4 ~7 f7 `+ E. o" A- ^ B& h# J9 x0 v
8 b9 y2 P ]1 F1 H; u) U4 p% d9 \& r
更多实例视频和专辑课程陆续分享!1 c. y @% F {0 e# P+ _# u' P
/ t% D& u) a6 X' f& ]0 {
欢迎转载学习!
4 \+ }1 F/ {' _2 dhttp://www.plmhome.com
9 i& \* @: @" E9 Q% ?+ m 5 {# {. y( t0 T! |6 U
+ H& L: T. \1 T5 O* h, i
2 ~. a4 x" Y2 z% p3 G, _% ~, [END PLM之家plmhome * v' e, E3 \6 \$ }( ?* `
▲长按二维码“识别”关注 $ ]4 N; S b4 W4 V- h8 [
# r& z k: J4 ]. h4 |+ x: H, f
~~~~往期经典文章链接~~~~ 5 g" D8 `( X8 R' b: l
NX表达式视频 ) }! n" Z8 l' b! K7 C
U& l. G, L3 ?1 u$ g
NX冲压分析可成形一步式视频 " T h; U2 ]! u) o$ z+ j% R
- ~% j& ?. \$ z! L
NX产品模板工作室PTS视频 NX高精可视化HD3D视频 5 G d$ a0 H- E/ r: @3 l- V
: v- \0 R2 }6 X7 UNX模型检查一致性check-mate视频
! O, {1 } X( R. F. D: a+ ?- v5 D- M% @: S) L/ J
NX入门视频实例教程(8 小时)
1 b* N% T" [& ^NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | 3 s$ ~6 h9 L* b. c
| | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
6 @+ I' q$ C+ c% ~' M2 y% @& f3 d其他重点咨询 4 ^4 i- P; L/ U- b+ N1 k
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
( H8 Q! W- ], J, z* P5 w; p |