请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
2 m7 G* D. P$ Y3 x& w1 |// tag --> Object
. p2 }- L- [$ w- K$ F//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
" O5 m& j) q" z2 B2 ?4 nTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
. Y0 w* ], t2 v* d, J// Object --> Tag5 `0 P, m7 c: M1 N. |
//直接通过对象的Tag()方法获取5 A( D0 j0 a: H/ a* n: `
tag_t getObjectTag = getObject ->Tag();4 Q8 \4 c" ^7 J2 t: x, Q: f6 a+ r& i
//tag-->handle$ \6 ?( \2 ^( D& `
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
- k; d- D3 h) H, M* }# W V) R// handle --> tag ! O) j( |1 i* F" ?# M
// ... 往后看....( q7 L1 U6 x8 d0 X; `9 C* U
[/mw_shl_code]+ ?( E6 t* U& }4 @7 K6 t# t6 j) A
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
3 h2 q5 i& C! h# x! _; z% T4 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 w7 B o4 W2 f5 m# W. J5 g- R
4 \3 ]; Q9 j. }0 _2 [1 Cstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
1 p/ ?$ { @) L" A{6 w" \9 N! P( l1 a |
stringstream ss;3 y. @7 D9 a: O1 X
ss.clear();5 V+ X) x$ ?9 J% k
unsigned int
1 a. T! I( b* @ ID,0 f* X/ G+ t5 k- r3 S
version;
1 r+ r, b5 D1 D5 c5 F: l- R7 @ char6 b1 x( h! k) W7 _6 o5 b$ `
* file_data,$ Y$ {& B6 c9 o* ~
* handle, f" N, Q( r m+ x& z# O$ b
msg[30];
9 k! s5 O$ `' x& x' i5 O if (objectTag)
1 i$ i5 B7 N/ M {
' P7 {0 D8 k0 \) }8 b8 y9 w D handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
- G) B* d7 v) u- Y; X Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());' m$ g% D8 ^; |7 F6 k* B
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);2 z6 N6 k! p6 [ P$ i9 H# a0 i' P
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
& I2 w O+ t' y8 g ss << file_data << "_"<< ID <<"_" << version;
1 p& w# e2 U: n) Z% l UF_free(handle);& r& J# _" T; Z0 ~
UF_free(file_data);/ g( R: c: p; s7 ^
}
' P' y$ u: E d4 S' g/ y7 s1 J1 S/ a6 J; S7 u' C, @3 e/ P7 X
return ss.str();( r" Z$ c5 @6 H6 a& ?4 _7 V& z4 ]
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
, H# l3 u/ ]0 ? |& {////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT). h$ t6 |& W( ?8 A( C6 |6 }' I
{( t) m! G4 M8 r( f! F
vector<TaggedObject*> getObjects;8 o) p! z( D* \: [, w- n$ f7 r
getObjects.clear();7 o4 [# K# [ z- U8 j
' S. ]; Y% {4 v% B string attributeName("");
2 Z6 v4 _3 m* L6 `# b, \, a" Q! F string attributeValue("");; D4 F$ S# N1 p& ^9 u
vector<string> stringArray;
% b% j" u( ^) A( w( L stringArray.clear();* s, Z/ i% K+ H' R9 h: p
//get the attribute value % P: r# a+ i/ H9 z6 d
// get the attribute name ( k) r- W: G) l+ O9 [
$ l, z( x2 p6 Y2 U0 @, P+ n$ K" O1 | attributeName = GetAttributeName_FromType(typeT);/ `* `; ^ [+ h; ^# v- L( N
if (isStringEmpty(attributeName))6 H9 B' V$ l) W; u
{
- m! p( W3 ^) f3 I return getObjects;% v6 j# \" P) C, F3 ]3 l3 d* n3 f
}7 ^' I2 i C8 L4 L
//get the attribute value ) u. u- o4 m' a
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);6 c0 g8 P4 j* x
if (!hasAtt)7 b/ S4 `& ]' n, U K0 v0 x5 f
{. ] N# D( V8 C4 N* [
return getObjects;; l' j$ v* ~5 m* T: U/ N: K
}
; a! ^1 B* {( r! ~1 l m; h0 u1 Y5 w/ p% `# Y
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();# s+ ?# Z; D* @% u) ~$ }
1 I& D4 @/ }+ Q4 H7 t
if (isStringEmpty(attributeValue))
6 r7 `$ C6 d6 E7 y: S; r {
[ y- g# W( O, I7 W% U return getObjects;
* w# E8 a9 m/ }$ r1 j' r }
0 v6 p7 D Y: N- z' v( ^0 o) K( L) j
$ ]5 S8 z3 l) i& w
//get the key based on the split value
7 z7 X' \6 d" f2 k- t' {1 t String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);8 T# H* z! Y. X* {$ S
for (string item : stringArray)
' R8 e: O; n9 q* c8 M( \+ O {
. v3 m/ c% N0 O9 | //read the string to get the object ) h9 U' r2 @; a2 k$ k0 C, ~
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));+ }% b$ D- R$ ]1 u1 t) v# }0 z
) `- x, f4 `9 \ if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
" z$ B& w; m, T; d/ T) Q9 ` {
9 D& B4 ?+ O0 T3 J getObjects.push_back(tempObject);4 f, W: y4 f6 d. i8 H% l; \
}9 i( J* l7 s, E7 L* B7 r r
}, ]0 m& U6 W" f. ^! C
; n" g# \& ]8 g# o. N
return getObjects;6 c9 M; B; \& b) H8 l s
}[/mw_shl_code]
/ Y0 @2 z0 }/ _. S- C+ r3 Z. W, S0 H, J9 y
" u z! \ y {! N
" E' g5 f7 c2 A2 g" K* N. O4 ]更多实例视频和专辑课程陆续分享!0 R7 ]6 _; }/ x8 L/ Z. @) |
6 T5 r1 O) _/ e7 x$ _
欢迎转载学习! 9 g+ X0 h; R1 h }( L4 S8 Q [: U* Y
http://www.plmhome.com
% x* Y# ?- f. }) I/ C
& N$ T9 `2 \, l6 b8 r& m% q2 o" ]4 Y S6 X5 J2 O7 ?
) \5 D) g. c/ {! l# v, _6 t
END PLM之家plmhome
& T3 _4 ~- W! [5 q1 d▲长按二维码“识别”关注
, g0 F) J8 {! M7 {# @4 n& _- o' _3 d4 B. T0 {
~~~~往期经典文章链接~~~~
- m1 I0 H5 s- B# B( M: K5 k b, O7 ^NX表达式视频
( y$ b5 q, ?. R1 I& Q( i( Q% p7 J8 W8 x+ G7 k4 D: I6 v
NX冲压分析可成形一步式视频
* n( \+ v' e1 ^! G1 L" ? T4 Z) M- t6 P7 h
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
' @7 a3 D1 j2 b% A% m. R9 K. }. f) Z" k% j# z, Z' V) Z; U; r# B
NX模型检查一致性check-mate视频
+ q# r% T: `8 P+ [4 \. h7 Y+ x. b
2 F& S. O8 i" _7 ?( L VNX入门视频实例教程(8 小时) ( V* H& V- c; n1 g/ ]6 N0 x
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
/ N5 M0 ^8 m; B2 i/ W | | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
8 q+ w+ _/ y9 y3 E$ p其他重点咨询
0 _! ~, [4 |, {$ M! Y5 s工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: ' X# t5 _6 H" k0 Y& H: c
|