请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
0 k3 M- M# ~ ~# [// tag --> Object, r' @! W# O. I# }, T
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法4 o# J& B4 B" P
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))0 w0 f- V( H, u1 W0 ~* q
// Object --> Tag- S) K: r2 j3 K. N! v+ X, g5 V7 N7 D
//直接通过对象的Tag()方法获取
8 ^' }# Z8 r# F# q2 atag_t getObjectTag = getObject ->Tag();
* v6 e& y |/ f2 |- E" x: T# `* K//tag-->handle6 |8 u. c- M- T4 N! W" H
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
+ |3 Y$ s5 Z8 m% ]1 S// handle --> tag ; y+ p0 R6 d( H$ z3 y) {( ?$ U
// ... 往后看....
- x1 Y0 }" n6 o[/mw_shl_code]
% ~1 ^$ ~' Q! w% cGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 - m& `% Y( O }7 ?
这个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]
+ ? u$ t3 u0 P
0 z s3 R6 ^6 U3 K) K1 {std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)5 d) n$ h+ D9 b
{( i5 p6 P8 ^: u+ V
stringstream ss;
' \9 {2 h2 J! N. t+ c2 w ss.clear();
; v7 C1 k [3 ?7 @ unsigned int
$ |0 s' c, v3 O ID,9 y2 P( V* s. l7 y; X* d# B
version;
( I6 X) Z0 p1 M! S7 [# y0 u char
9 T, N2 B$ g0 O! W * file_data,
1 Q0 H2 q' e8 A; {/ f* n * handle,
" R8 y6 ?0 x* ?; a9 L, b msg[30];
- e; {9 U* Y# f if (objectTag)" _; v" E* n3 c5 C7 B& t
{
- h4 j1 W9 u( L' a: a; M* T handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
% w) g+ B' E2 m! y) i3 a0 d% o Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
) o/ d' P5 v+ D! U UF_TAG_decompose_handle(handle, &file_data, &ID, &version);4 W* S6 t; z, X( J
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);+ i0 v, \) l6 J9 A3 j6 v; n. M* Y
ss << file_data << "_"<< ID <<"_" << version;9 m5 H) t" | p) h& E& \ A
UF_free(handle);
6 E2 s$ y$ }, N1 \+ e* T UF_free(file_data);1 I) {; v7 ?! ?8 b' Q8 X
}! G6 h8 M; u; ?! X; r9 u
; `7 }# G2 s* V, t
return ss.str();3 Z4 J, A2 L, Q- b! a( W! 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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
4 ^, i% Z+ o# ?////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
! A$ R2 I1 g( x- z& h& z7 e{
; ]) \* w7 c$ b, z e. t vector<TaggedObject*> getObjects;8 D5 [9 u' l! I7 z1 u6 i" _" i
getObjects.clear();
5 T9 }; E) U- S. L9 [5 ~+ f1 O
4 ~+ ?% i) E5 a6 _( _ string attributeName("");
( R' R3 {/ {. G+ K [2 c string attributeValue("");. T. e% r! ?6 S1 c, J/ V# P
vector<string> stringArray;
* g3 i% N# z5 {' J" u6 J stringArray.clear();
- h) W. S- r) S# l6 ^/ t //get the attribute value
2 A I m$ C" s // get the attribute name
. n w" h9 W7 j/ L9 L0 Y: J Z7 J/ ^/ d
attributeName = GetAttributeName_FromType(typeT);+ a2 h7 p: P; X( z
if (isStringEmpty(attributeName))
- L3 W: `: `% g$ m {& K+ Z2 r5 V9 S" B( }+ i
return getObjects;
( [1 t! K1 X4 t; R1 |) J6 j }
( N; s# |8 T" s: T; G7 x- e //get the attribute value $ s: A# w6 ]& P! [' i8 A
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
& W* l0 ^- Z& Z4 }3 j0 [ if (!hasAtt)4 w+ E5 _" `- W0 F/ h
{" s# T$ G; U; u
return getObjects;) u& C5 j6 w) K/ m% d
}
' T0 l1 s) o' g
4 p: C( F6 F; Z/ N1 O9 T attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();+ }1 v6 S5 O# q" V" J6 I5 \& T& J y
' v8 T7 C6 i! K: b if (isStringEmpty(attributeValue))
& c! l8 ?% `5 |' z0 T' Z! J' ]1 ? {
" N5 D/ |- J! s- n* {. p# X return getObjects;3 l w# V' p R1 Y2 b/ z3 n
}
/ s5 q! U. l3 W) N! I/ M* F7 @/ _) m7 j4 Y
0 Q& q; b$ u, S& z7 k //get the key based on the split value
: H6 a( W5 u, A9 U% a String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);. y/ b5 Q/ Q2 }0 X- `
for (string item : stringArray)* ^; V' ^2 S \4 @" i+ X5 L
{% E) d% ?* k+ D- ^( `7 k' Q4 \) o
//read the string to get the object
6 j& ~: p: ~2 U% W TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));4 I' \- z& _) m& V5 p5 u# z5 K
: J# V" v3 ~9 u+ x, r+ J% Q6 p
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)( Z0 A+ T/ K3 v+ }
{
/ ?# h7 @* }' { getObjects.push_back(tempObject);' o l' g' n' e6 w2 k
}
) X& P$ L1 p. V, _0 m! F }& f8 i! F/ K {" P" o
1 U' F0 A) @& `5 Z2 A
return getObjects;
& A, c' C! H/ e/ O" f& J6 b}[/mw_shl_code]
# u& C! U5 b# B* d1 ~* w8 h# _# P7 O1 t/ ]5 E, z
& d$ p: D" [8 |, i& O' H
+ C& O' L: N3 S2 ~9 H u; z6 t4 z更多实例视频和专辑课程陆续分享!& Q, F/ p( `4 p- v( j
5 V! j, B3 z8 ^& T& Q 欢迎转载学习! : C% b& u) @' j# q# Z ~
http://www.plmhome.com ! T" Z: ?* m$ C
( D2 x2 x3 G; u( O5 x* \4 ~) l* D; j- N9 ^$ \& c: z2 f8 k
8 n1 o# P6 b! P* {
END PLM之家plmhome
' B' i" d. Q$ c/ ?▲长按二维码“识别”关注 ' U( C: X& q7 t2 E3 e8 K
" U% g+ T0 l6 Z" D! F. }4 ~% h~~~~往期经典文章链接~~~~ * f$ ?6 a1 w9 W
NX表达式视频
) C4 j3 H; e" i. m' Z
. K3 Z! f1 d$ @, QNX冲压分析可成形一步式视频
2 Z# v* [! Y: J# ^) D* I6 Q6 H: _# M* Q Q: y
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
" |9 E1 Z; B ~5 P9 I* l3 h+ X1 ^3 V; V1 V) M0 Z8 y% Z
NX模型检查一致性check-mate视频 4 `# j& P- O% y* M1 ~" O
. K+ v3 U! b! U4 v' LNX入门视频实例教程(8 小时)
V; y' s E% O7 Z9 ]NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | ( |9 i, y( l( ~1 r
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
$ `: z: J; L" @. P其他重点咨询 . F! |8 A. m4 V* E8 o% g. z! r, p3 ~. e
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: 1 k9 X& {( O& N4 t+ b, \
|