请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]3 Q% E6 R) z4 d0 s |
// tag --> Object
6 L' Q( I. h! N' O+ @" S r//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
2 W# b" s/ L# B: e4 R( U i* `; k. MTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))5 v! n! e- X9 @, `$ c8 s
// Object --> Tag
1 Z. i: n* V, V( T+ q5 ]//直接通过对象的Tag()方法获取# a7 f6 B9 a; ~
tag_t getObjectTag = getObject ->Tag();
w) P \2 _# w6 G! n6 {: `//tag-->handle( G$ o# g& i. h7 p4 e
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());4 t) a o2 D5 p; W* L
// handle --> tag - I. K5 J. q4 R4 F0 a/ U
// ... 往后看....3 J1 r" |' K3 g
[/mw_shl_code]3 U8 f: U) s& e- g- J9 x
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 7 @2 d; n4 E* p1 M" u, 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]
; ?2 \7 M: O% y: [1 B7 x! e% G
! l1 T4 g* C. J+ k+ Pstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
% d" k L* t3 N. s( w{
8 V! R% E) j* i5 a stringstream ss;1 v( P$ }2 C& k- i1 J9 Y/ E) G- E
ss.clear();
& W! m/ f& g+ U( t+ P unsigned int
- K. r- Z, G$ s) C9 [ ID,
3 l- A6 b8 }5 ?8 m# D" J: x e version;
6 _+ }9 P& U* W2 T/ K7 m char! Y( ], t. k& e, t! z
* file_data,
. Z' c4 h, b5 N. c- |, \6 s * handle,: U% D% Y& I4 Q( F
msg[30];
0 R6 N* J: O0 p d" k1 R, B3 {9 J if (objectTag)
7 ?1 s2 F/ R/ @3 M# E) @5 |) W {# V9 n/ g/ Z5 M' H/ T3 U; o- x
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());, d1 k! H, Q5 V U7 Y
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
v- b0 w e7 i UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
# y) ^7 _' P# |/ V+ O5 n p Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);$ u [& B2 W) u$ F# j$ |
ss << file_data << "_"<< ID <<"_" << version;! C: ?# J3 c) C# u7 n* M1 y' M
UF_free(handle);' h1 H4 i* K2 j& {) G
UF_free(file_data);
: S" A& j1 o Y5 d3 Y }
, D/ E- |5 w4 h9 y6 V- \
: f* b! q" ]! u return ss.str();
8 g5 @# A( |+ m/ g6 P}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 ! ]7 q1 b* U4 \! D1 j$ ?2 D3 {+ `- ^
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT) ?" V5 S8 o, \( d
{. d1 ~$ y1 @( d
vector<TaggedObject*> getObjects;4 F* h) b/ }4 \+ q1 t
getObjects.clear();8 h) }. {0 U) A' X, v
6 p' l9 L9 |2 w, X! R1 u6 ^! l5 w
string attributeName("");4 u9 V; s, f9 X4 P) _9 A% o
string attributeValue("");
. b4 a3 o9 V7 W4 B$ U) z vector<string> stringArray;
5 w6 j! y; H: G& }! J stringArray.clear();3 }* |- O6 r% f" N$ _
//get the attribute value ' m4 y6 t7 i$ u$ K P; W
// get the attribute name ; p1 w) d7 J% r1 M
) _" R" x* T/ _: Q* H' w
attributeName = GetAttributeName_FromType(typeT);: b! ^. ^7 G( R; P
if (isStringEmpty(attributeName)): z' {- C/ n5 j8 L: k
{; }4 P& a+ H" B4 r1 M( A) v0 ~8 A
return getObjects;
2 f+ i7 |9 K3 }( p( @$ N }
* R- _8 j& C: E9 ^* w1 v //get the attribute value
$ R( ^; v9 u6 ]2 _% r$ C+ A bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);) ~/ N i; E0 g
if (!hasAtt)- K8 F% ~5 V- k" d- ^$ \ t( t
{
& @3 z* r" C) I7 N, z return getObjects;
: t! N* [* Z. a3 R/ }" ] }2 C& @# ]" G. |/ z9 C3 V
" K! u; o1 v; S F, x2 V attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();, A6 V+ x# V) }) H ]
{$ _) E4 y9 t0 q5 D$ D. ~ if (isStringEmpty(attributeValue))( e0 B8 d0 x9 y1 [1 F
{
# u8 l! W1 p$ \ return getObjects;3 a3 ?: x- W. ]# N7 R& o' o
}- [/ B! Z6 r2 C6 Q* K$ s6 e+ Y
2 {# [; E# P8 r1 x3 J
5 L; j2 v) j4 A0 v9 F* _6 w& i; H2 m- t //get the key based on the split value 2 ~, i& V, d( W
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);( O. P; G' C: M2 e% c% A1 {% R
for (string item : stringArray)3 t) z9 D% a* X( p
{
7 D/ y/ I, w2 J- V/ Z# U6 h //read the string to get the object 0 Q4 Q) @) \$ A; k0 r
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));3 h$ D: ?. [7 f$ v, V
" z# H( I4 s3 r6 z. ^ if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)' o" [- W2 O# e$ c9 Y
{
/ s$ n3 d5 k/ u, M, v V getObjects.push_back(tempObject);7 ?+ w/ I0 \% z, b, x$ r
}/ U: V# ~/ n6 {, o
}
) N# C, M5 }( U, t3 \6 {: M& q: o9 L6 N4 ]/ D" i j
return getObjects;. q+ x' \1 c5 n4 T5 t
}[/mw_shl_code]
X1 f: }, W2 b, ]" ^1 w3 d
8 _# Y: Q: H" p
8 I) d+ _9 h/ c0 F
6 Q+ R9 E4 a. V9 m( T3 }更多实例视频和专辑课程陆续分享!
4 ?) r9 v m* C
4 K4 o: x: }- f3 \; g; p9 f4 ] 欢迎转载学习! 2 I/ D9 G% }- d8 `6 h
http://www.plmhome.com 2 g! x9 m* [7 k) P h* x
" m V( _' V( ~) n8 g) j- Q
* r' [) a# C' [3 K+ [
4 c- k, W" L" @* d7 gEND PLM之家plmhome
3 y, e# s7 j' |( D( k▲长按二维码“识别”关注
' b6 \- h7 m- i/ v3 ]& g. j6 n. R# p- j6 ^. {
~~~~往期经典文章链接~~~~
( S; ]' v0 U7 u& S0 G& z. W6 H. _NX表达式视频 & E: X( g' |! K$ A
! \8 w" x6 a& u# f5 T/ r- ]
NX冲压分析可成形一步式视频 Y5 ?, J( H" T; H
8 N9 N$ n$ {+ ?; ]% a, S
NX产品模板工作室PTS视频 6 添加装配模版
8 p3 n! v! n# w) D6 h2 t; X: E; h NX高精可视化HD3D视频
0 d* I3 e k) ~& m, R5 @9 A* y+ s- v: C7 f! Z
NX模型检查一致性check-mate视频 & m7 S" g9 v3 b5 o+ `. h" L3 i
0 d/ \. H; d) i4 xNX入门视频实例教程(8 小时) 7 ^7 m" h4 a, \/ k% A
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | $ P6 q( r9 D4 T3 T0 M
| | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | . x1 B1 R: Z+ G$ q' F
其他重点咨询 ' L: k+ I* i* a4 g
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
5 B7 w. o1 L4 }3 a7 D! [ |