请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
9 \; n! B9 x. ^1 {// tag --> Object
; b6 B1 D, S9 A, V) \- o//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
$ T3 L/ I& Z7 G5 R L3 J: ?% s" G, E" wTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
2 |' o, W+ }& y# P; g5 m% x. U// Object --> Tag
0 l1 E) ~8 }/ c6 s5 f: G+ m//直接通过对象的Tag()方法获取
5 Z0 m6 s3 q3 ~* \/ N9 s* Rtag_t getObjectTag = getObject ->Tag();4 ~% W n7 ?* {* k- _9 e
//tag-->handle
H% h2 l5 S; }( V5 Rchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());, @/ q/ o; g3 b2 T3 n5 m, ]
// handle --> tag 9 B6 t6 v {* w+ ^; e! @% E
// ... 往后看....
0 F& g3 s, Q, m1 n: f3 ^5 b. F( W[/mw_shl_code]& Q) |+ c* H0 s$ {& @
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 6 q8 s7 ^8 N9 I2 d* O, U
这个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]
3 N0 H2 F2 J* t( m2 [! p/ R* |1 \; w( y6 J! `: Q: I* [
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)- K M& }4 `( K% A$ R$ t
{
% I& [ p' A$ K, }" y stringstream ss;
) Z5 a: G& |* x4 q0 v9 c! X, R% A; ` ss.clear();
" j8 v# x9 M, b9 p5 Y unsigned int
% {* Y* b0 G' r, C' j6 [- i ID,
7 s& U+ M# q& I# b version;
7 H$ N Z; J: o; t$ T( l% D7 t( S char9 z. B' r3 c% u3 H' }" L
* file_data,& ]1 |. S$ h! [0 A* P& `! i F
* handle,5 o, \6 Q+ s* C8 ]
msg[30];
' _3 A) G1 f& E* z2 B8 i' I8 F if (objectTag); Z0 P/ @3 `) ~
{6 {" t; L: i" L7 j* P5 A3 {3 y
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
( Q+ B6 ?/ l2 J0 i Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());9 _ J' U/ Y. V3 b6 q' ~, B
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);" D) I- Q- S8 }% o; W; G9 P5 ^
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
2 L! E: z4 W9 ? ss << file_data << "_"<< ID <<"_" << version;' d3 k" j' F3 A; }
UF_free(handle);
3 e2 V1 b0 Z, \8 a6 b% w( @ UF_free(file_data);
& W8 `/ ?: C* G! \ }
. P) h9 `1 H/ r7 [4 _" d8 z5 ~" Y4 G; r- I5 W0 [) J
return ss.str();% C0 v \+ r6 m+ |
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
# P1 x# L( `( z& _5 z////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
5 A @2 O& m( |& t: R{
7 ?! p9 x; H, p+ \- c' E0 w$ d vector<TaggedObject*> getObjects;
; {( h a1 e2 u! J getObjects.clear();
) t1 J3 V% C' Q$ b/ u. x) ]/ }& u6 b3 W! |( x6 f4 ?3 Y$ ^
string attributeName("");
* A* O* [; H9 N6 i string attributeValue("");
8 Z7 `" f4 [; e) l vector<string> stringArray;. I/ [- c% `9 h' Z% |7 s
stringArray.clear();& r d* B, a+ H4 v' a9 I" O) `" }
//get the attribute value 4 L6 ~- a% d# x# H
// get the attribute name 4 B b1 o& V/ B% n, F# @1 t) l* [
3 G0 J5 t- b* R7 I+ F
attributeName = GetAttributeName_FromType(typeT);
! c; u( ]# K) [, b% ]- l, t* I: ^ if (isStringEmpty(attributeName))
$ \9 s! X1 h J; s3 f) A j {
) R6 ^2 ~* D+ r) ~8 g return getObjects;$ W' ], R0 c+ {, H, Z
}
; m& W+ h% V& [* n //get the attribute value ( I$ N. p7 L* I [" l- L9 Z
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
: z g; ]! X$ |, K5 B if (!hasAtt)3 [0 x S; G/ a1 G
{
& x3 X; {0 {( n- f+ @ return getObjects;
! U2 _; B2 O% T+ A1 O9 {: W9 W }& h2 f2 Q3 |5 v( B; }8 Y! N+ Q3 l
$ ~% S/ v, J, P! g- u attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
: t+ F' y' ^2 t' C% y
% v1 D, F3 Z, N1 k7 f, b8 e if (isStringEmpty(attributeValue))
* h2 a) L0 Y1 \ {+ g* A" B, `4 G. @* w5 ?3 f) {) f
return getObjects;
- i. \8 C. j* P9 i5 V$ y }4 q! I# \7 |6 `0 k* U( a+ \4 ?
- \: k) U* e; R# s; h) p) b3 X
) s* S& p8 ~& l6 \6 d- v; b //get the key based on the split value
& K) \ s2 B& }/ g: `9 S String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
; |9 ^# C+ G! A for (string item : stringArray)
5 q9 f7 N* [9 J) x& y {" q( Q. I, O( D1 b! Q
//read the string to get the object ! D, ?- s3 `, `6 Y6 N2 {' E! z
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));$ B B( R: t0 Z) U5 J% Z" t
- a+ \9 }. P% F/ K; q; x if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)) X. M H; C* u
{% z% g- s" c* g1 y! R; o% |
getObjects.push_back(tempObject);
/ y: Y! T4 l, A! |. n }
# C9 Y% f# C! h& t& ]! H- { }# O4 |6 m: O9 Y9 R, q, _* M3 G
, P: N7 T" I9 g3 J return getObjects;& {8 y7 j2 f7 z
}[/mw_shl_code]
" T; m; I# U1 d9 C- d8 L. T0 z
" ~9 a. |& U; U8 R, {, i0 v2 j! c1 Q5 c" l9 L
4 t2 c& U* ?- t$ j- a; ] a5 L更多实例视频和专辑课程陆续分享!
8 J) `% B$ w9 I3 \* h; @5 `# { B/ d3 a9 x5 v& P) l: a
欢迎转载学习! 1 b D: D4 G- t
http://www.plmhome.com
, r3 @" h0 W. e- F1 Q3 Q7 z
7 f1 Q u) j) r: r9 i' Y) @+ G& B) g0 m
# V! S% L- ^2 N+ | AEND PLM之家plmhome , h/ ` O& c' x; A0 P
▲长按二维码“识别”关注 # v7 ?- o3 H1 _
! h& D# P* Y: c* X; F~~~~往期经典文章链接~~~~
! d( c- B+ I" s+ O9 KNX表达式视频 ! Z+ }4 w+ w+ C) o9 f
k; ?2 S" N& o6 P2 ~NX冲压分析可成形一步式视频
) w) B I& L3 @2 v' I
' ^5 ^4 n/ u) _" {/ e. UNX产品模板工作室PTS视频 NX高精可视化HD3D视频 1 _ F$ }) {" t6 m' r1 Q
# _% j x5 M' B- ?& ?8 zNX模型检查一致性check-mate视频
( g! V) {: ^+ A
9 ?( C+ A( R J4 j2 C: `NX入门视频实例教程(8 小时)
' s: r0 J/ H" C5 W* M% `NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | / S% p5 ]1 ~( ^$ e2 N
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
. o8 `* \) m: _, s p其他重点咨询
6 O+ Z5 Z+ x- r4 k u3 a. [工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: ( s' M$ v7 J8 _" h ?8 A* @
|