请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]0 A6 }$ H+ u7 R. x
// tag --> Object7 L* w, X" c' q' X
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
8 }- i9 m6 H% u. b$ u5 N+ FTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
- Y0 a9 s, _. r: l7 \// Object --> Tag9 I/ U, x$ H5 y9 i7 e, y5 k7 p
//直接通过对象的Tag()方法获取
! s" O3 P) b1 a* o l. Y( Gtag_t getObjectTag = getObject ->Tag();/ [* M& o9 _3 u% C, k
//tag-->handle- n. d% s1 N5 c; L$ S0 M
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
! m4 |5 p% w" m// handle --> tag
4 U T3 ?8 ]2 D' [ ], O% O// ... 往后看....
6 ^/ q8 J; R" e# E, I[/mw_shl_code]
`5 U+ h8 ~& cGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
5 m: F9 ]5 G' q, D' O/ K这个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 {% Q1 H& x! |+ x0 g
- _& r( n1 [* _3 H( r3 p6 r4 D' B( Fstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)8 J! B& ]7 J! `3 j
{
" r4 u2 s+ G% x# l; T4 q( L stringstream ss;
' I5 o! [: N; h+ T7 ]9 L ss.clear();
! b. Q+ |, b1 w2 l5 z3 A unsigned int
1 v: R+ G- w8 m( \& s M9 N ID," p; T- J5 {3 r2 b# ?: \
version;
' N7 L4 d: [$ \0 |1 k( P' G9 { char
3 r3 H$ d, N* Z0 M' u. E ] * file_data,- m% l, Z# _, @: t1 q) L: x0 Q
* handle,
. p, s# Z. n1 q7 T5 A msg[30];
7 p( v' A9 D( [ if (objectTag)- R! e! i, F* K0 L. c( ? ]
{
1 D* B2 o* A1 B. J handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
4 U( ?3 L* A3 R, I5 h) L Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());9 h7 m# A9 d6 l" u! u+ H
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
+ _: H" p+ v& N% [: M7 i3 g Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);8 ]; ^, f, P! a
ss << file_data << "_"<< ID <<"_" << version;, T# b* i% V: C8 Z
UF_free(handle);7 d( K; Y( m: H
UF_free(file_data);
3 h0 }- k/ a+ j1 @ }
2 b7 u4 o% r; F2 B, }/ l$ {0 J
( C1 i" X1 P! M- Z' L- r/ F return ss.str();* u1 n5 d* @8 k2 }, w J6 T9 i: @
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 ! H8 K1 R/ R [8 n, f
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)8 L& ?0 b, `- t0 X2 Y, H
{# }9 Z. X: k" v3 X1 w
vector<TaggedObject*> getObjects;
- q( V" k$ L) @4 R3 m' S getObjects.clear();. A1 T8 }* E) `5 ?6 B
& A8 Q% }6 I5 m0 d7 k: L" G, G
string attributeName("");+ a( b1 A, R5 e+ n; e/ u
string attributeValue("");
: |9 l* S- ?7 U5 h% { vector<string> stringArray;
- v- c) F' ~$ y# Z) N3 `& \ stringArray.clear();2 X, P2 A1 \7 }* e; Q8 a3 {
//get the attribute value 9 X% d& |4 e+ u* w, |
// get the attribute name 7 A E6 q, B# k# S4 b
3 m5 E! M5 B3 e& O; ~# b" \+ W
attributeName = GetAttributeName_FromType(typeT);% v: u0 h) B6 \# d
if (isStringEmpty(attributeName))
5 F6 { }5 z' A( v2 R {
$ E, \! K5 Q4 e return getObjects; J4 b. a% g+ c. M7 o. b
}
w! Q8 T: n; b( M+ h) r //get the attribute value
$ K# K! x& }" w+ h8 Y2 t bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
9 C) B9 S5 v/ k# `3 O7 {1 _ if (!hasAtt)
& c- D5 j4 e" P, P {0 b8 f; M8 s" g
return getObjects;
! X, O; N" O0 q3 `, _. ?' H0 ? }
& _2 F: P, z! ? C% t3 T: m) C
7 b# h7 S/ H1 J* o$ G5 c attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
, Y& @% Q i; W
( N! ]: g* K4 D$ z- Y9 J% J if (isStringEmpty(attributeValue))( ]# N8 z6 [* [4 c1 a4 E
{3 i$ v, L7 N# ~+ G; f( D$ s
return getObjects;; n( ?! R8 ~( D' o& B! e
}
4 ]) K7 I' o) w& K" f, N( L* j, r3 i' w( X& _+ ~* }
4 a" l1 u" y% R! Y0 s. P
//get the key based on the split value
, A; T0 G' s, w% K1 Z7 Y$ q9 G# U String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);, d' j: [0 O9 l% `$ J
for (string item : stringArray)
- A5 n& G' j4 \% x {
5 a ^" \8 D$ o //read the string to get the object
& w- O' H# C3 u* B% Y; v; \ TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
; z" Q( @+ c, D. O. G: e
% a- t2 ^1 l0 @6 H" h8 N; r4 W. C if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
' s5 V4 }# E- e( q {
# u f0 M9 [7 I/ J; Q getObjects.push_back(tempObject);# J% U0 E) g9 U; p8 h* i
}
. x* ? R1 q# x6 \( r* N }
& X; x$ G: Q! s& i) N* @& D. {3 i4 A; q8 P! j: }- j
return getObjects;
x+ |: X9 b; K8 L4 }}[/mw_shl_code]
, t0 d9 }" I9 o3 l! w8 _/ }* T
" o( ~! w6 G+ P5 U5 L' x
; G4 c. t3 M+ D" d3 T) P8 I; P' E
更多实例视频和专辑课程陆续分享!9 H7 e" ~: x6 b
; g5 s o! W4 [7 _ 欢迎转载学习!
) N% S8 g+ k* @* i* g6 uhttp://www.plmhome.com 8 h" i1 p$ u5 G
0 `9 v% w% k' X/ ]/ F4 e. d! ?6 |0 N5 e# I
( g* @, p$ [$ k/ }+ C) h) A' s% V2 q! iEND PLM之家plmhome
4 l# y4 F6 {2 k" u3 O0 t& C▲长按二维码“识别”关注
+ O$ r4 v$ a7 L+ X/ V
' J5 |* N H. Y. ^% ^- V9 v~~~~往期经典文章链接~~~~
2 L8 H1 b4 D; K6 E3 SNX表达式视频 ) Q: K- t/ Z. Q1 H3 {
2 w L: n, o) ]: v" |- {NX冲压分析可成形一步式视频
+ F1 x; ]% I/ R9 B9 E+ I S
' w0 d1 i+ @/ R" Z) S7 X! `NX产品模板工作室PTS视频 NX高精可视化HD3D视频
4 d& v: }4 P( ^* u" J" x Y5 g) q+ y8 `3 F; g
NX模型检查一致性check-mate视频 " {! |! o) _/ \0 }( X
& {! y; p8 }2 L$ [5 `NX入门视频实例教程(8 小时)
; M; S) ?/ X' h8 ?NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | ( M# d. f1 ^5 ^" b# z
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
: W* J. c9 {5 x其他重点咨询 1 a$ B3 G1 c1 k, \( o: f
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: , y+ p" O- P1 g% s& X
|