请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
3 k% i5 n- \8 N# h _// tag --> Object
; V) |" U4 P# c( B+ _1 o9 l+ C6 U//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法5 u" h/ B0 X/ r. x3 a J
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))* S* _6 l' A9 r# E- J
// Object --> Tag
3 B ^9 q. z6 ~, U5 L3 a( R//直接通过对象的Tag()方法获取8 O. Y6 M$ {2 j( e \9 D
tag_t getObjectTag = getObject ->Tag();
7 A. z/ V& U9 x! F//tag-->handle
4 E# n' f: \8 }: Achar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());! c" B% ?2 [% e- G; ~
// handle --> tag 1 N! v+ s. k. R7 }) K
// ... 往后看....
* k) Y9 J! o! l. P8 v( C5 t3 F[/mw_shl_code]
) ]3 ?# }* u% Z4 V! v! X- ?( \GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 & _9 ^: Z5 |* ?
这个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]) K& H! L- L5 }
: t% t) G d. N Q; M! `- V, y$ o, Jstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
" X# b8 j8 ~- l0 ]* A9 `5 \{0 [- s& F( U q% t% k
stringstream ss;6 I" F% T3 }1 |4 n
ss.clear();$ G3 j* I& m# }. B2 |7 e
unsigned int6 z, X, ^% C* ?: \ B/ H2 e0 S
ID,
* m7 F' x0 g! V! k2 p) Y4 r4 l version;
) A# y, e) \% J. d, A# |% B+ [& A char7 e/ j6 A1 W3 P9 R& |
* file_data,/ n" B) b* Y1 |6 f' U
* handle,
: {* m/ e( @' s0 K msg[30];
; {" b7 `( |+ X if (objectTag)5 S( a u1 u4 x7 Z# G* V- Z5 k
{$ z, d4 r" b+ X9 \: k3 r
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
* ?. H7 ~: ]2 T4 s0 m Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());2 y% A& o! M3 f0 {- [! K# d
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);1 `/ O" H) b& B8 ]# K9 f9 g' U
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
3 P% c* _/ u4 \# L- ~/ h ss << file_data << "_"<< ID <<"_" << version;" K1 j) a6 w6 `2 Q7 v
UF_free(handle);9 m9 E) r7 y/ P0 J; ~
UF_free(file_data);: p0 t9 s9 b" S
} X( s5 w5 |5 o3 j9 y8 {0 A
' G a( u: E% Y2 |% } return ss.str();" V, v. M# {) |" F6 j' ^
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
1 v6 i( h5 I+ I1 }" \ L4 a) y$ Z////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
1 a. B+ u6 U7 r( j{
e8 K, [: [: A! t vector<TaggedObject*> getObjects;) m$ a; o5 ^% I+ L
getObjects.clear();% y. q8 p1 k! q& }3 W! P& t" c
5 q3 e6 u: f! U string attributeName("");
. w" J$ Y) w/ U: o% e P9 I string attributeValue("");
4 {4 v7 o" A" h vector<string> stringArray;* m- O1 j0 a7 S4 A
stringArray.clear();3 k; W4 _' k3 } O
//get the attribute value 1 P L v; D% w' c( k3 ^; K3 `' O
// get the attribute name
, v# S+ }) b) S7 a! q) T4 ~) o+ f- i; E1 r' d+ a3 O8 c
attributeName = GetAttributeName_FromType(typeT);
% r, Z: W6 y. ] if (isStringEmpty(attributeName))
1 A: L1 w2 j* k$ F" A' I; ^7 { {
/ a) @6 w6 z4 `" w' F& f4 {. o, j8 K return getObjects;
& L6 o& O' a! L3 i) R9 H }& U& s J" t" V8 t, l
//get the attribute value - ], N2 i* h3 ]# _# j
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
, V; Z4 I3 l9 {. O3 ^ if (!hasAtt)
$ a3 w1 g6 W0 l* v% `2 L$ L' L {6 s( Y* ^8 w3 t1 ]
return getObjects;1 p; u, V) S* D
}
: y! Q, F# `# K5 Z( h* `) E. z) E% ?' D
2 {" C% d% h- R c attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
8 H( O& r9 x4 V6 `/ G; s5 F1 I
( k% S* l# o' z$ _+ f; h if (isStringEmpty(attributeValue))/ J) v0 b: n2 q* N. r- J
{
4 J# B- [. }9 k2 J1 t! [ return getObjects;. v. j( x5 p# B! P7 {
}
* N" W+ F6 V$ p5 a0 y. ~* f
) p; n, w5 Q* D* C6 A9 T' C. V1 F$ w/ J& x
//get the key based on the split value
' h# h/ f2 P* O# q5 W/ X( C String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);$ C) s, Y* v. F
for (string item : stringArray)5 d7 A: D% M* V# j! a: r( c4 A0 z
{
8 a, ?1 ~3 _8 w, j& P9 k" z //read the string to get the object , ^0 I. b$ a) V7 i2 P( i
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));. J- h- O9 B( ~7 P. x
6 e0 V* ~( T2 J& v# P if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
1 d7 @, Z$ t6 I$ R) r {
& L4 Y5 w8 o; ~- N$ |. R7 f9 d getObjects.push_back(tempObject);
Q# Y4 R& u2 I }/ o: b% v: U) p+ c- h) C- \5 q4 K
}
. g: s1 |! |$ x! \% y
1 ~; q( h! R/ G7 Z x$ i! J return getObjects;
: h9 k' @5 I. `# G}[/mw_shl_code]
: z" t- q; C3 z5 S2 h, i
7 [$ B. ?6 ^3 [$ |
1 Y6 t' h$ g: a: q# H7 y: X$ r5 \2 X. K6 f+ p5 w }+ m0 y
更多实例视频和专辑课程陆续分享!( b6 l6 M1 M4 t/ H6 r6 p
4 j V- e3 ^3 W8 a
欢迎转载学习!
) d$ E# N e* a% n) v8 R. X! Y' mhttp://www.plmhome.com 1 X% K: q+ T1 D2 w; B
& F% w6 D. g0 k- L" r, U- `
s9 m4 n$ {1 ?. F6 U( e
: y$ x, l) L7 f9 Q! N: EEND PLM之家plmhome
& Z0 p. g: u4 T/ j' e2 {1 l8 y▲长按二维码“识别”关注 6 {: t9 S1 w1 ~* `
+ `0 V T+ i2 a1 B, H2 X7 D~~~~往期经典文章链接~~~~
3 V. E# v# G% ~# T G/ l/ d0 pNX表达式视频
* H6 N; [! E/ t+ M3 U! Y; n
; j7 r/ S3 a' Y% |, a" ONX冲压分析可成形一步式视频
/ R) \4 k+ ?. t0 [: k* f9 V- d' f9 b9 {4 B- p* k; Q. I, N& W
NX产品模板工作室PTS视频 NX高精可视化HD3D视频 : J3 |3 j$ _+ T% n3 {6 o% u$ N* v& A
( d& \/ _# ^7 HNX模型检查一致性check-mate视频
* c: X; \0 |# k; C! t% ?
- C0 D# l- V& @9 }/ U+ I6 F" zNX入门视频实例教程(8 小时)
; G4 G- K, L+ V# \NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | ) W! g6 \: q5 h5 M
| | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | # J9 F+ y% T+ @4 }/ s
其他重点咨询
- D/ S6 S3 k6 H; L& v" u工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
) |/ i+ c6 G$ x+ L/ x7 o |