请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
- ?( O6 T+ }% P, l, L3 \// tag --> Object/ Z% h# V% d7 r, N
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
2 Y9 ?9 I* ]+ W: P) p; K6 _TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))7 }( c" k7 j# X0 y; G4 s0 x% J; S! q
// Object --> Tag
1 W9 \- _6 s) t0 V) |//直接通过对象的Tag()方法获取; M! d/ @% U. Z0 C8 U
tag_t getObjectTag = getObject ->Tag();
) N" S) r) X8 \//tag-->handle
1 G! \; E2 K9 c6 d$ Gchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
& v6 e K( e2 s% L% Q/ n// handle --> tag $ g; s$ k4 J0 r6 v4 `" {$ s
// ... 往后看....: }8 R" q7 F3 j/ B5 L/ _4 A+ z
[/mw_shl_code]. x2 \6 G y" ^" _8 u1 I
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 8 Z/ D3 `0 P `: E+ }; g
这个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]
" D8 @. l: [. t2 T3 m
7 f" x/ q8 v3 w6 O6 S5 {) I1 j& _std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
- D! b8 t3 z, V8 o{
2 v" w" Z; ?$ i( S stringstream ss;5 ~6 Z7 ?& Q% Z% Z$ g
ss.clear();
) s3 z. S* K' u* [% i r unsigned int, m P/ U2 a) i7 q( |% S
ID,
& A" D f0 N; L3 t3 r2 n version;
. o& k9 L! y* `3 I char) d& K1 I" ?* Y& _3 g4 e& k
* file_data,
$ p8 @3 T, ^3 ~9 r t * handle,8 b. [% W r* N5 f! t0 }
msg[30];& e) `* Z. g8 q- _" ?* m
if (objectTag)
0 y/ Y6 ^' q) x7 f9 K {
M0 `" m# f. _5 k% E- \: ^; i handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
; ?% K( N# Q9 K) t Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
' Q/ C& ^1 B+ V UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
# _* j) g- R0 a/ q" A& |1 d" ^$ | Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
9 M8 A+ Z( L& L4 ]( N ss << file_data << "_"<< ID <<"_" << version;# f) `* G3 V7 u4 P! I- ?
UF_free(handle); n! t4 o% F7 g* t% ?( x: f
UF_free(file_data);
: f/ D' ^) v8 X8 L! T: a4 @ }
+ v5 j! z' {; M
$ O* c: B* X N return ss.str();7 H# t9 i& ^; _+ w& H
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
9 O* O( z' f( f( N: u N////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
3 d1 R+ N- [0 A2 O/ b2 W, e% \7 w{
, ]9 W. o, `# P- A5 P vector<TaggedObject*> getObjects;6 F. s% Y Y; ?0 M9 f9 x' b x6 E( T2 T
getObjects.clear();
/ @2 R$ z& V" o: e6 K
9 a4 j* Z2 z9 F+ x& ^ string attributeName("");+ U$ X- x5 P4 }, g
string attributeValue("");
% }! k1 @! O$ f- K vector<string> stringArray;
. v& B2 a l/ ?/ r3 E stringArray.clear();7 a( e$ Q& c5 f; ~5 c* E
//get the attribute value ) o Q1 `- y' |% U: S0 z* x* P
// get the attribute name
+ F$ x7 |* z* K- |
% S( q( m- k& O W3 c5 K- ^ attributeName = GetAttributeName_FromType(typeT);4 f) z+ M& B" V+ N& S
if (isStringEmpty(attributeName)) c& t5 g! k7 _
{
* s- N# T8 W* K2 c5 u/ G. t* [0 s return getObjects;
0 I ^! f: p8 ~3 F. h } n, Q! e- z2 b( h8 X% i1 d" m' W
//get the attribute value
( o# ]! X8 R* ^+ ^& n) M% ] bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);5 C) m0 x6 D0 ~5 u: O4 l" i
if (!hasAtt)7 h- C3 x/ h- `5 W- G) s( f! F8 N
{2 G$ X0 b% @3 A+ ?# h1 @+ y) E2 h
return getObjects;
9 u/ s0 [( J: U* f- V9 b }
$ G& g3 s- H( |2 W8 [* ?
7 ?3 w( R, G( v: S+ p5 i2 M attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();& W% v) t3 _$ H- ~! }, b7 K
8 j6 f* }4 {8 S1 J( I: ] if (isStringEmpty(attributeValue))
# q/ S: n, z4 q {- U5 r3 V+ H, T& `
return getObjects;! i; r( L9 ~# u! F1 l" @
}; `; d0 Q' v: x* X$ G# G
! l" k" ~: [/ v7 A/ s
: Z8 P+ N4 r7 K% ~/ ] //get the key based on the split value . F- E) m, I$ \
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
! _; {% N- i! E3 S" ? for (string item : stringArray)
, a- @. h1 ~, R {5 i( K( Z$ x% c( d2 d2 B
//read the string to get the object . N& W/ l, U& }+ ?$ L/ c( v
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));/ T3 f$ S5 t0 i! j$ m$ g
1 u' O0 b( O' @& g; h8 @
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
# O; p) H' A9 ?5 H }. F4 a/ ` {. g1 V4 C% I" M+ d1 @" u3 c$ s
getObjects.push_back(tempObject);
% T d1 H% ?8 R- a" ]) h }5 v8 S$ t# |# a
}
q, n8 G, k; L2 U7 S9 A* f
* @# w% Q8 l" z O3 x1 _ return getObjects;
5 l& Q$ C3 |8 [- M) P}[/mw_shl_code]) q* b. h) b# E2 Z
. {9 q* x) z$ L, q4 {
6 V. R3 n7 G9 K$ A2 J1 G9 m3 c
- R+ _/ e ]; M/ i# ]+ q0 j8 C: C e5 N更多实例视频和专辑课程陆续分享!
2 \# Q' [6 y ]: a+ S; U4 i
- X' D# z' |6 x3 b! s 欢迎转载学习! ; I @$ g7 ^2 V# \+ a3 q1 d
http://www.plmhome.com 8 F; Y0 j0 P! i3 F% _# L
{6 d- Z" |- j
- l& u5 x t' H' W* o6 G8 }: m- l$ z. [& B" J) z1 l
END PLM之家plmhome
' @3 o- b* ^ g, m! P/ O▲长按二维码“识别”关注 z( f i( Y" J6 E( |9 R5 F/ b$ {
+ J' u6 z- c6 F# c! V8 @$ |6 w
~~~~往期经典文章链接~~~~
" |8 ?; U6 Z" x LNX表达式视频
$ i, b) C8 f: `
. G( j$ C/ {3 b' Y( g0 R7 ~NX冲压分析可成形一步式视频
8 U7 ~, F; [9 D, q4 Y) W: m. X
# j6 j8 d& v$ a. G4 Y @% XNX产品模板工作室PTS视频 NX高精可视化HD3D视频 8 R7 d) A' x! s% Q/ n e$ |
+ |* c/ i( Y, ?NX模型检查一致性check-mate视频
' u1 K; i4 s0 p! e8 h; ^; u' _* V+ P+ X& I- B/ Q# n' O
NX入门视频实例教程(8 小时) . M; e( }3 l: |& m) F
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
" {1 W8 c( e# h( _) [/ d6 p6 b6 F | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
0 r! b1 w8 e4 w( a/ L% k( ?; w9 s其他重点咨询
) i, X+ U9 S- H" ]$ J0 j工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: ' ]; {& l) n3 S- O2 X: ]
|