请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
& c1 ~/ s. E7 A; m// tag --> Object b3 O5 K9 h4 m4 ^, D
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法! R: X a6 @1 p' l& R* i+ I: g
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
1 t* X# Y Q1 a5 x K// Object --> Tag
; v4 K1 C# S4 ~* o. v; ~//直接通过对象的Tag()方法获取
4 r. B* X8 E$ xtag_t getObjectTag = getObject ->Tag();3 G9 Q7 a/ V; _& A) |/ j. a# ^
//tag-->handle
! F" l7 P& \9 s( s8 z! Qchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());( \9 [2 `* B. _! M
// handle --> tag
1 M9 J7 ~1 \4 g3 M- o% Y// ... 往后看....
4 x6 D7 s$ h6 T* s. F[/mw_shl_code]
8 f& E" G& D ]; R" P dGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 : o" w2 _ F4 ^, d+ H
这个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]; l" V- j' r0 k; n% Q2 Q" d0 `: k: ~ q4 U
3 J: X" S; R) T) T" jstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)5 p# o, v( B6 u7 C& S' J* e
{' e. Y# I8 r1 y; ^# w
stringstream ss;+ ]+ s0 i. F3 U8 i$ H8 ^: C5 r. A
ss.clear();
2 n5 X5 p& D; p) Y# h unsigned int# v, B0 w" t/ | f4 Q! q$ I9 t! m
ID,
' Z& G+ b2 m4 ~9 k version;
- B7 r2 l2 N) Q8 U3 X char9 \8 [& u- O2 z: I+ P: y; H0 k
* file_data, i$ o# n, a/ d* s0 q- L5 s
* handle,! D& r) @# `9 g
msg[30];" X6 t1 r8 G# y A- ]
if (objectTag). x7 t! c7 P# v0 Z) r0 D( e9 Y t: [
{1 ~1 N5 a% R0 @1 c/ m) ]
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());! R3 S7 _9 i7 W+ I6 W6 k
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());* A) T7 w8 b+ t6 ~! O& p$ M0 A
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
6 e, o+ e: |2 z6 E2 e6 m5 } Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);/ _$ L8 E! \# P: |# ^3 }" L% h
ss << file_data << "_"<< ID <<"_" << version;# d' k4 `0 Q4 s5 {7 l( d
UF_free(handle);1 N6 q0 b$ q1 d$ {4 A& N3 e7 }
UF_free(file_data);
( ]4 I7 A0 i+ Y! G) L( z, o }
4 B0 S! q& @1 ^; ?/ ]
/ p$ [& c: e" I, ?) V8 X4 U. A return ss.str();
( l; v9 \/ U5 ]+ v' G7 n}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 4 j4 A; W: S. _# k; d" {% g
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)5 ?+ j4 F' s1 o& K6 w
{
: L5 i, R( h: g- J vector<TaggedObject*> getObjects;2 L# ?" V x; k* [$ S) O! g
getObjects.clear();
) t9 I. B6 j' s- v; G! j' l2 a' Y* z; T- t& n9 o4 n
string attributeName("");$ l# D1 s+ z0 L3 H, Y/ V
string attributeValue("");
3 c; [% @, _4 Y4 W vector<string> stringArray;
8 o8 G- P0 \ E/ \# [ M" L stringArray.clear();8 G* N7 W5 X7 E: z
//get the attribute value
7 }- R7 M" q" `% p5 E6 [ // get the attribute name ! r K( S8 e: c1 H
8 c4 S! V6 y( Y* a6 i2 ~ attributeName = GetAttributeName_FromType(typeT);5 R: ~& E! i1 h7 |4 w
if (isStringEmpty(attributeName))
( g5 W- |1 m P5 T% z7 X {, j8 ^3 O7 ?- l8 { a7 I! A
return getObjects;. q2 R5 F: x, N( Z4 q. W
}
6 f( W1 Y, L7 y4 N( s0 z& N( o5 R //get the attribute value $ d% o! s7 N2 {6 |4 l; G
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
3 F# R) X3 |, ]- l) { if (!hasAtt)0 E/ v$ @4 L) E: n4 Z2 F
{
2 n. d. Z# a; C8 ?8 U2 k+ j1 K, p return getObjects;
+ F5 O' l) R2 P( E }7 E" x3 m9 T; g
' q3 Q2 j: @0 Q( A attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
! a8 Z: f( X. e& R/ C g
0 Q3 q" R8 c2 u% h if (isStringEmpty(attributeValue))) T6 f/ Z0 h0 c7 @
{" \' Z% M' C# H7 n
return getObjects;' c" W4 c+ r& C! t* p6 s& Y2 W
}
5 ?$ Z$ m* D4 i7 L2 }. ]* O8 R& {( y: Z# v. z: y' m* M
+ R' S; e$ f) \4 J0 } //get the key based on the split value 9 g0 v) D! r7 D1 W8 j/ k# c8 K6 C
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);( ?+ A. y( u8 X! U4 \0 B6 ?
for (string item : stringArray)
- n( g) p S% p! K' T+ _ {
: O3 I# M; V: H: k- J% l# ?' n* B- A //read the string to get the object
4 R; E9 a0 i7 |* ~& ?1 a, Q TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
6 u' o- E- u$ ?
9 h p* o. t+ R3 B if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
) r$ h' J$ c& Y" w2 V {/ p1 E1 x) J1 s! a/ r( c- }+ j& d
getObjects.push_back(tempObject);
3 N. B* |! b' F" B% v }
) G; v4 z I7 a" G6 g }, A$ `# ?5 m1 F
( E5 q, H& O& X% P5 h return getObjects;" \$ s, M: q3 Q5 ]5 O U% O9 f
}[/mw_shl_code]
7 F5 ?+ s2 W* ?% C7 R, b% G
' U; w& `7 X" n, ] X( G+ p& l1 }. s0 m& L
7 W$ b6 V. e6 k+ l: \更多实例视频和专辑课程陆续分享!/ c7 a/ b l; d, V1 S( m
/ j' t! Z, B) V0 o' G* E4 _ 欢迎转载学习! 3 e! L+ i' B- R, M
http://www.plmhome.com ' b" w- k% U. q" U1 G2 d6 e: v) R, ^
; `2 T/ G3 f; ]# @% B: I0 t( d$ _8 l0 N. C L7 c
% m; V$ h! L ~* ^' r+ a* X5 v
END PLM之家plmhome
' k. ?& o' ^0 `: j; W▲长按二维码“识别”关注 ) Z+ N! m7 h- x5 r* u6 X) C0 i
; L# R# }, c4 A* U
~~~~往期经典文章链接~~~~ . C, F& w& r! m1 j
NX表达式视频
D R+ `& D; z% z& p9 f& n" U' b# O8 C* E' L2 S$ O9 l
NX冲压分析可成形一步式视频 2 u2 V V0 G' v+ Q0 y+ y! d
# i/ }/ C. g0 K$ K v+ t
NX产品模板工作室PTS视频 6 添加装配模版& [1 i/ d1 A- `4 \% y% q% V6 j% O3 x
NX高精可视化HD3D视频
1 k. | j. N: }" R0 g
8 L) y! R1 `( ANX模型检查一致性check-mate视频
" ?3 |1 r4 c0 b2 R& `9 G# s: h$ N8 v# Y q1 R, n( R2 d
NX入门视频实例教程(8 小时)
( r% \# \8 L6 s; V) F8 BNX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | 6 ~0 K# L8 C0 P+ |
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
) G: B4 o) m$ i4 d: X6 V9 g4 R; ]其他重点咨询 ; D& y6 J5 S& h9 w7 n) V5 } y, a+ q
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: ' X/ i, Q1 y( O+ H3 f# E( I
|