请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]5 k- M) r# V! P) Y: n
// tag --> Object
* N, O* x1 Q4 S( z//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法, o0 m/ r, @2 C: i) D
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
, t" }! r) ^' B) M) [' y, C. e; ?// Object --> Tag
- C- V1 Z2 ?& G//直接通过对象的Tag()方法获取
6 q7 `, ~/ I2 ]4 p) \6 jtag_t getObjectTag = getObject ->Tag();
* b$ j9 y8 U6 l6 {' a1 u' F//tag-->handle
8 ]8 M+ [/ j2 h- }char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
. P3 G( L. n/ B2 X- ^/ B" B: m// handle --> tag
6 J+ [% }% O' x( n" b9 v// ... 往后看....
6 r, ^; R- K$ C7 a" H$ }[/mw_shl_code]
' p9 d7 h6 p5 x9 m- D: wGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 ' m. {+ n( z+ K5 }$ @0 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]
! Q0 g; W' w% p: ~7 l: b7 @- x5 O8 V5 T$ c
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
* B: o! P. J+ b/ p{: ]$ w5 Q6 _4 C
stringstream ss;7 t: ~# {7 P% u
ss.clear();8 q" i+ r6 }8 h4 Z% ?
unsigned int9 {; M. X1 U! d2 a( S8 @/ R/ U$ {/ c
ID,
: t2 _9 Y( b. {, t. r* M, M# v version;
, f G" m m7 h5 K; D0 g Z char( J1 Q/ W) M4 N0 a1 r, q
* file_data,
8 I( z' a/ C2 S% E! A5 J9 T7 \ * handle,) ^% m, i/ i c0 G3 M6 Z& E
msg[30];
& M, l0 x) E! V" P6 W if (objectTag)4 E# h* `5 |6 Y2 j
{
& \% R/ X; ]+ l* Z/ X1 T( N8 F handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());! k& ]& \9 f2 D: \
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
" d; [! C9 v( o2 @, s* G! g3 s UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
+ }7 C$ g" Y& h2 L, F6 Y' ^& ] Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
; H4 G" I0 p% b9 p: |' b ss << file_data << "_"<< ID <<"_" << version;
' K/ S5 o" A$ X: K UF_free(handle);) {9 B! x8 F# t L
UF_free(file_data);& S" [& M; r6 U4 v* D* N7 S& K' o
}% N0 W, q* q! |9 W% r
1 G5 I1 w6 ]8 t2 E
return ss.str();
4 l7 u0 d. p8 \: N3 X' `}[/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 d" v7 t" ~3 ?" r. G////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)& n! a# D" G9 O* l4 y) ^. f( C8 s+ s
{
l( W& L* F2 |# l vector<TaggedObject*> getObjects;, X# A1 \, [: d# P/ _
getObjects.clear();
' [. D; ~( N) c$ Z1 I8 H2 r. x' T$ r" `: _
string attributeName("");
2 p1 q1 O' |# z6 i0 [( A string attributeValue("");
8 S) i9 h* ^, H+ g; U! y vector<string> stringArray;: w: q* `! {8 u U, W+ Z
stringArray.clear();; p# U7 o$ B5 A4 e* y+ v- ~: `
//get the attribute value
1 K$ _/ Z- [9 O' o, ?. B# Z // get the attribute name 4 a' V+ N- r' j* O
1 k1 Z' O# N3 g [' F- R
attributeName = GetAttributeName_FromType(typeT);8 W8 m @! M2 n" n3 T. K
if (isStringEmpty(attributeName))$ C/ }! \8 |) H
{
' m9 b b/ t' s1 i; n% F9 Y0 y return getObjects;. u/ a1 f5 L5 @) ^
}
9 y& Q0 I. r3 a! V6 x- l! D //get the attribute value * K2 S/ j% k' W: T3 w
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
4 e, W0 }) g2 P. _ if (!hasAtt)1 Y; k$ W. C) L" n
{
4 z2 Q) h7 J- p5 R- [: g+ J return getObjects;* B, n0 {( M2 S& ~* V" \
}! b' c3 a4 ?1 M* Q1 k
9 ^: F3 H* T# D attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
3 f+ H/ d5 N o- ?' ? * ~0 j0 y v% m9 o, ~3 m$ H
if (isStringEmpty(attributeValue))
* s* p8 E r. L {
" i4 M- V5 H6 _+ M% C- E return getObjects;
( z0 J5 ]+ _$ }& I: D }9 B& Y8 E9 D9 b! @' X
9 o, L( v# p" Z& @8 X2 T
9 O7 Q3 p9 } b //get the key based on the split value
o, t) s% D G# ^( Y String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);9 F* K; I" l( @0 h/ i. ~' w1 L
for (string item : stringArray)
! r" v% K6 c/ X1 G {$ p; @. H2 B0 [# s# j6 q
//read the string to get the object % ^" Q: U# y8 k/ ?* N# @
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));" _* J+ X' i* ]" S2 Q
! c t) \$ | [ if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE). C' X+ [$ |: L
{
& _% {* T% e- B: z4 j' h2 r0 M. Z8 A getObjects.push_back(tempObject);- w8 G( r2 o: D# l) y- H! F
}
8 K) X0 G3 ~( s' Y9 X% Q }$ }6 b7 [0 r* U. b7 }2 H5 ~ ~' a. A
) f5 `+ r, A4 ?5 ^7 t+ ]
return getObjects; U, M6 u" V% x) V6 y
}[/mw_shl_code]
+ H2 R0 Y0 \2 H- I3 ~9 [4 E! n5 r$ ^) R, @# l
$ Z7 a" z9 b+ ~) I4 f) `# \, V
/ k4 |8 \) m1 n
更多实例视频和专辑课程陆续分享!
3 F: x; d3 d8 K7 N1 T/ ?+ N2 d: D3 X. E9 ^. S0 `2 ^; ]
欢迎转载学习! : G2 W* q* o6 ^, P# s
http://www.plmhome.com
8 H2 O* C' U. e- e% Q; o* r- k9 }
. T! R2 Q$ V; X& g& v! C, T' C2 V V# w0 v/ M$ Y/ x5 T
! I8 D) f, ?3 Y: [) |) M
END PLM之家plmhome w, W* a% j( C, i4 z
▲长按二维码“识别”关注 * @7 C8 E! i' d1 [1 v$ }
! D9 g) o- t0 V. r3 o~~~~往期经典文章链接~~~~ 7 B8 ~9 k9 R- H9 p: q3 `1 y3 @
NX表达式视频 9 B' f Q: y) L7 y5 X! u
. T1 w# k1 I0 C( R+ i) Q4 c' INX冲压分析可成形一步式视频 z: K7 X A+ b4 u( N8 Q
) @( B$ } W5 q Y' R" d
NX产品模板工作室PTS视频 NX高精可视化HD3D视频 1 J' M/ F; d2 u: W- T% T* p1 I
/ }* _7 ~5 @6 r% m
NX模型检查一致性check-mate视频
! G) O/ Y o& Q% v: Y$ j, @1 R% r* n9 X
NX入门视频实例教程(8 小时) / t6 G: q9 M: C- S$ E6 t' I' _' l
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | 7 l Q, W }& G: c. H
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
3 s( v9 C) H4 `7 E1 P" P) m其他重点咨询
. _, s7 a* r9 Y4 y- }工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
; Z* ^; y$ M/ [. K/ P |