请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]* z+ j! [. r# V9 C2 z0 r
// tag --> Object$ V- l5 D+ L) j- ? y) A0 F
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法, n0 C4 J z( R. A3 p* z U! |
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
3 k: `1 \3 a8 x: x2 ~# h7 J( H// Object --> Tag
0 O, L% F9 V1 g//直接通过对象的Tag()方法获取
) g" B* N7 S- e6 Ztag_t getObjectTag = getObject ->Tag();
7 r6 a& w' n' {! [% C. R& j//tag-->handle) M4 D, j% |# g2 b" w
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());; i. T- `6 `: D( A% a- Z' Y
// handle --> tag
- f' _7 J; W* B5 s" {% @& d// ... 往后看....' X) ~3 A9 A" o' F; `0 S! D3 p& l
[/mw_shl_code]1 O" [* }; b+ d2 @
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
0 o' L% l, D& ]这个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]) t7 B% G, I% y
/ H5 ~7 }8 x8 S
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
$ s* ], \1 H; t/ v{
! @; [! V8 V# h' K# U7 D* D stringstream ss;/ t/ R! N$ R5 Z, a9 [. a1 B% _& ~
ss.clear();
0 S; G* K* ?* M7 f/ w unsigned int. w! X: a: b% t+ @! o, {' F) {0 z
ID,/ Z7 k8 G* x( |( W v! H4 P
version;
0 s( p0 N9 s a char
3 \* I! S8 D4 Y1 _) v# ` * file_data,8 G6 ]0 I4 k8 u0 X
* handle,+ T9 h+ H; i& D9 ~/ x7 v
msg[30];6 |% p# p& J. P$ M
if (objectTag)6 }5 q! b5 W( B' m% r5 k$ p
{" l4 Y2 H+ D9 e. @& j$ [! J
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
5 R; m K0 [) _ Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());" [: \' U2 W$ |; I' ]
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
) z, [7 K# }! D' P; c4 o Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
1 q, n: A1 D- }& S4 I. L ss << file_data << "_"<< ID <<"_" << version;
1 K, F# A& r3 z, P9 i UF_free(handle);
6 I5 I6 H1 l' [3 S UF_free(file_data);
, h( e2 H3 K! ^' w4 \" h }# A& H$ x4 R, q* u
; t, j7 }; [- U3 p) @$ G return ss.str();
/ J2 a" y! P6 {0 K! g8 F}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 $ ]% i, x# n1 s& ?: j, G: p& P
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)# H& }! v2 b( N s$ _
{( T0 a/ u% n3 m0 y
vector<TaggedObject*> getObjects;; [& w6 d0 X J* z
getObjects.clear();
' [* K+ z% X5 ~
2 f. O! T' D u2 _# T3 p string attributeName("");3 {: C+ [. x- |8 R" _- V% d
string attributeValue("");
6 N0 W" D: t+ f4 v) S9 F" X vector<string> stringArray;
5 g% u A5 B/ B! o! I9 C stringArray.clear();
6 P$ x8 [, k1 D" Y, \4 t4 c* v //get the attribute value 9 j; `2 I4 j3 G* N1 C+ k. q* |
// get the attribute name 9 H0 \3 P/ ^' ]
5 O- o C6 M( k3 O9 g attributeName = GetAttributeName_FromType(typeT);
4 a1 u" e h" P7 } if (isStringEmpty(attributeName))
( g6 R2 h& a: y& y; ^ d {9 a5 U+ k4 z/ l5 j
return getObjects;, E1 l. E7 O8 z" @" S6 `
}
" g4 K( [# u% s3 m& q6 S7 U$ B //get the attribute value & I0 _& `# Z2 P7 L
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
9 C2 D1 E: C( X k" Z if (!hasAtt). y' V2 _% r% T) d1 Y# B3 T
{
6 D2 ~! H. D7 f$ W- X" w return getObjects;
3 K2 M! V9 ?2 n2 }* `/ R4 X } g2 m4 J) N" K" G) Q- O
/ t# f) {- Z) z6 J) O attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
5 d) N, |# ]+ C: [ 0 B2 u. V4 u5 r4 T& \
if (isStringEmpty(attributeValue))7 B! I9 L- j, W
{# A" H. `2 L/ ^, n4 d
return getObjects;
% Z. a( H; J, p- V/ z) @% V( ^ }/ K/ |$ [7 N* S8 x+ p
5 p2 x% K+ F" T1 W$ m" E$ E
6 V( t$ N# W4 B% d1 k! P //get the key based on the split value
X* v) i. U( Q- S* R8 p String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
" y# |+ k8 {: \' u- ]/ {% u5 r3 e for (string item : stringArray)# m) S' o. m' T) s+ `; f( p
{
* r! K, n8 v' _* j5 T, a //read the string to get the object ( T- _ n& O2 D& O, a+ \
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
0 e+ K# m; r9 U
3 ~7 b. [1 ]9 M- J- x6 l" f, ^ if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE): P( W( P3 t8 E; o# K
{( z# o; P) T) O! v; T; a/ t* M
getObjects.push_back(tempObject);
$ ]4 Z; ?* d3 i8 W; }" I }2 a/ N& W/ d `, m
}+ ^$ G2 B( d [) d6 n. k& ]5 m
7 R7 R6 ^* J* b) s% a( h return getObjects;
7 j9 ]! |+ u2 ~7 O7 `}[/mw_shl_code]- b$ O; k0 K5 c
* W- ~: ?, t( X# {
1 u ?* c, Q% |, V+ d7 {- x4 ]# W$ e* I
更多实例视频和专辑课程陆续分享!% X( v# V2 ]/ Q
& E! q) f; Q3 f) b- s0 v 欢迎转载学习! ( e9 N* l4 H' q8 j/ L7 \
http://www.plmhome.com 6 K$ z( T+ q5 s W; E h) w
, c5 b: l' S6 G& }2 f
' p5 i: z% t% b; Z% |
: |' r$ f$ h$ R8 r/ YEND PLM之家plmhome
" z4 W/ }0 `* n' z1 u▲长按二维码“识别”关注
9 Y. U& O% h8 P3 T$ u( d
T% L$ G( u D& `4 h4 n~~~~往期经典文章链接~~~~ . H2 ~" V- p9 ^. R/ [ c" c) m4 `
NX表达式视频 * b* B z' }4 B
# w$ j' d; `( [% dNX冲压分析可成形一步式视频 0 `! }: S, b* S6 G1 O
0 A1 _$ j, t& B0 [
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
! G- X3 R" \+ e6 |8 ?; K3 ~ K% A D$ R0 S; y$ ]2 V& M
NX模型检查一致性check-mate视频
2 i, N# v" [! J8 H; Z1 E' I+ x6 U; q% S8 e& D/ H7 Y7 r
NX入门视频实例教程(8 小时)
: A% z' t, E: o0 U; `NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
' J9 H4 o# N& h4 Z- q: r V' u | | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | ' _ r1 Y& A, j4 Z, r; A9 P. k. c0 c
其他重点咨询 " L6 _ `- c8 D
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
: u1 R1 m& Z; k. n6 \ |