请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]; i- G9 r7 q+ {" i
// tag --> Object1 N. q! S1 p Q2 m% `0 {
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
* p. q5 s4 u2 E$ ~( hTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))3 I3 R+ O* ^# f# B' M
// Object --> Tag
+ Y: n5 l+ e% f1 I3 s+ b/ I4 C" L//直接通过对象的Tag()方法获取
4 D' o2 f3 F1 J5 j- g0 htag_t getObjectTag = getObject ->Tag();: A' x7 z9 ?/ q. Q- e2 N8 P: x
//tag-->handle
# o1 Q0 F4 \: _2 bchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());$ E' w* }, ?: I& T7 R& v; }# ?3 J5 _; L
// handle --> tag * f5 ]+ `. j2 ~' a/ j1 A2 b' `
// ... 往后看....
9 v/ C/ H* n- v* i[/mw_shl_code]
% l& T# ]8 T, A" r7 T7 m" oGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 ) \. u0 X9 [" Z5 e. P5 L2 y: b
这个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]$ b- [2 `. ~7 j, W5 j3 H0 I
1 s( i& N+ p5 [, wstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
_7 B! n% I$ B3 a. O' ~: z{
& J5 ^0 x+ Y$ a( V3 i4 l stringstream ss;
- h) R, ]( y4 p- | ss.clear();
8 ?; ]: l5 S4 X" ~ unsigned int
: t8 H" ]7 Z) ]1 F$ ]" M; s* N ID," R4 O6 u, R. k
version;6 e( n$ n5 m% e" w* V
char
% g& R3 U- x( C" B * file_data,0 b6 ~: g2 t& L" Y! h
* handle,
$ a) G* p$ \- q# n msg[30];5 D$ a5 |6 y$ n& e+ z
if (objectTag)
. m8 w5 a8 \- {/ U, F( T. N {2 W! c- b# B* j
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
7 D: [3 w6 `" O; B- C0 [8 t, V Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
6 P$ U' c9 g) {( R UF_TAG_decompose_handle(handle, &file_data, &ID, &version);" I) n" |7 q8 C3 ^6 H
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
, Q# L6 \1 N) p8 i0 C) @ ss << file_data << "_"<< ID <<"_" << version;
1 [4 H9 e0 O9 l( y* N7 o UF_free(handle);& D1 \$ H2 h. w6 \" d0 @
UF_free(file_data);0 {) S* x" _+ [( @3 A% x
}
) s3 r* J5 `. L+ E5 j' `* ^* O
, Y# n# y' Z Y5 ~ D# \: n$ C% } return ss.str();4 C- p0 c' U( o5 _
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 & u8 O- z, }5 ^& J/ P+ Q
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
8 `+ g) B/ T" [5 I* `" R{
/ c: c: Q, G! p vector<TaggedObject*> getObjects;
4 L9 l7 S2 A& t2 Z& I0 ?5 ? getObjects.clear();3 j \/ z/ w, E4 q) o
5 G% I4 F2 z( t, }" V; }
string attributeName("");
, M- {; A* C8 `6 t% q0 S string attributeValue("");7 G$ ~9 a" |" P; ~; ?# y
vector<string> stringArray;7 e( s8 {, g, ?7 p) C* G! r
stringArray.clear();% w. U: q" o( L J0 W7 L
//get the attribute value
2 A& O8 F: ?9 o4 F. a // get the attribute name ; a/ E3 e: F' o e* O
4 I1 f V4 e- p9 ? B6 e attributeName = GetAttributeName_FromType(typeT);
" _6 H2 p; W& x% @ if (isStringEmpty(attributeName))
# o2 S0 \( x. \9 V/ }; m {
$ f; A" }! s! V( } Z. J0 S return getObjects;
9 u0 q( D& d% m$ C8 y }
q; A0 J w% y. e //get the attribute value
6 M) I, V1 z, j2 i6 q/ W$ ` bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);: i0 k- a! W" x2 \, F. |4 s! I0 n4 \
if (!hasAtt)
- z) m) i0 o/ L c) ]2 b0 f1 D. J# i {* a; ^' \; x( W+ X* a5 J" s
return getObjects;$ z* q! z' [' o/ e/ r o9 |
}
7 |$ a' g; m. d, r8 K
: U7 [ t9 C. L1 V; U attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();/ o$ d. m! z; b2 Z% z
( O7 F* h4 `5 c! W ~$ @. i if (isStringEmpty(attributeValue)): z) y; ~* D1 a
{
( z2 J5 b' w6 [! U+ \ return getObjects;2 A! \& R( G2 D3 a$ P4 O; d, R
}
7 I+ e) J C5 i6 Q1 @/ N0 w/ L* r
" M* e* j1 c5 |6 ]9 C' r1 B5 e4 t; e _0 W( P7 O& V& N7 h
//get the key based on the split value
, k" p8 w4 b) O6 `. u7 s2 s String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);( j+ P6 T. O2 D8 K
for (string item : stringArray)1 K \# c3 z4 c& y- S) q3 f; r
{
f( I) q9 R9 i' U7 v //read the string to get the object . x) Y. x8 k1 w+ }9 c
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));+ C% T7 ^: r$ t4 e; i
5 O0 ^0 Y& c+ y% g if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)! E" N& Q: J+ F* u
{
$ \8 O' W/ {5 ^ getObjects.push_back(tempObject);7 ?3 |# T% `: w2 F/ y9 u' v/ s0 G
}
2 r8 P8 ]5 U" } M, M! ] }
2 h0 C1 Z4 a/ I) X3 m+ H5 H+ V) _7 p3 r; L& B
return getObjects;4 _7 q, j- ?6 z/ O0 M/ P! r
}[/mw_shl_code]
9 z4 U+ B* G3 J+ H# s2 e: ~. R5 @4 y L5 r
- \6 j" c) p2 z0 G* O0 U! @" f. t. I
更多实例视频和专辑课程陆续分享!8 C+ h5 E3 T4 K2 \: a1 b
g# P1 e# v' y8 Q% W8 C- l( K/ q
欢迎转载学习! 6 c! _7 F. p; m1 j- X. N
http://www.plmhome.com 7 z; Z' D- u `5 I: f& Y" j( b, ?
/ P' g: ~ |' p" K6 t1 ~; w1 @1 R2 a' f
- q4 s) f% k# D& O$ b3 ~
END PLM之家plmhome ! C9 X3 M- Z$ t& J
▲长按二维码“识别”关注 4 R; a: h' K& ?- ^3 E. _. i! B% \7 x
$ {9 f0 _( m! q0 y6 N~~~~往期经典文章链接~~~~ + | n T9 ^5 k8 x" ?
NX表达式视频 5 p) I/ G+ L! k4 \7 K' p$ `/ j
- X1 h3 ^" b' w0 k4 W* E; }- I' f
NX冲压分析可成形一步式视频
$ s2 O) v$ H# E& |- ?3 Y7 S8 d* ]; ^( z" J: [- T
NX产品模板工作室PTS视频 NX高精可视化HD3D视频 $ s/ u# P9 W3 m U `( u
3 H) N' P8 {* V" z
NX模型检查一致性check-mate视频 + Q3 b. B. d9 a/ }- e6 N) }
& L# w$ Q' j9 b$ d( p, @
NX入门视频实例教程(8 小时) 0 ?7 C2 E3 T9 T E3 ^& M4 k: Z9 N
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | 3 M# o3 x8 I: h I& [
| | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | $ i |5 @. I) V
其他重点咨询 & k; X- `# t6 z8 d' V9 I2 p
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: ( [1 @) h: f0 b
|