请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
& T' n5 ]1 D h8 s// tag --> Object
' k. \# P! ?! b6 ~//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
5 ^6 G: s' n$ I, _/ N5 u4 {' [" CTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
* H. P: k2 w$ `/ D// Object --> Tag
* A Q1 G/ `% C. I//直接通过对象的Tag()方法获取$ j/ q- m9 [ m) T! l
tag_t getObjectTag = getObject ->Tag();0 r: ^$ H. ~& d* z! k6 V
//tag-->handle; F* E: o/ V6 C+ W9 J- X
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());( r- e( n7 }, g5 W" [
// handle --> tag
( f1 b, v9 h, j8 M8 R5 ]4 x/ |// ... 往后看....
2 R2 O5 X: _" n- V# h. x" }[/mw_shl_code]. A0 F/ ]" |8 r9 U% V
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 5 K# H" |2 N, R5 a
这个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]
) `3 L* c6 A% {8 R& x1 c2 W+ S/ f% ^, X
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
6 d. U5 ]/ m+ }9 @{
7 f: p$ P% V! U stringstream ss;
. T' M8 L" w& v ss.clear();
: f/ m" F& V& I8 M. f unsigned int$ K2 r) F3 j" i+ ]
ID,+ A) j6 z" k& w/ o' q
version;
, ] u d! Q2 G" [$ d7 Q char* A3 F( Q9 Z2 \. t& L+ R9 ?0 H
* file_data,6 p: A; A. T9 n2 s# D, A
* handle,; r& F( c/ }8 [& D+ `2 N& T. m
msg[30];2 `6 y' Q G# k8 s& S* Y2 P3 Z
if (objectTag)
0 q6 j/ u& x4 ` {
: d# i8 Y6 ~0 ~9 _6 }: Z handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
9 U( y0 P& [7 n* D: q# V. g- F( F Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
$ ]0 y- R8 y0 q% o# ? UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
; p0 o" V' [6 i+ e. O) d Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);% Y6 v9 o; H( W' Y$ h' N4 `
ss << file_data << "_"<< ID <<"_" << version;
2 ]$ w2 ?2 j: |, J* P; U8 ? UF_free(handle);; p. l7 Y+ P/ R/ O
UF_free(file_data);; b8 X3 L0 E9 s6 X8 Q( I& U0 I
}
# h( N7 k2 |# P: t2 s- ]$ }/ l# P$ z" j! m9 M& n/ q" ~
return ss.str();5 M3 E" ^1 z1 A4 Z4 s0 `& \
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
& S0 s' Z2 L" H. a9 h0 f////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT); B! y4 c+ U% h- v, R; P
{
. S* m) n; f* [( S+ ^8 A+ t+ \ vector<TaggedObject*> getObjects; n3 R, j5 U+ m
getObjects.clear(); E P4 b' u6 Z) |9 [
& \* p7 b8 P% Y4 j
string attributeName("");
L* u2 W! X/ [2 R: n6 r2 [. ` string attributeValue("");! K s' g7 |' n1 d4 n
vector<string> stringArray;1 [( B; T) W/ |$ v! T, t
stringArray.clear();( _) o3 J/ F. g& W# R
//get the attribute value / c; `2 ?/ A( U2 j
// get the attribute name
! M7 r+ x- {+ \: K# z* r! u( f7 ^, ?0 V4 C. G' R
attributeName = GetAttributeName_FromType(typeT);
S; `% k3 F4 R: X2 N) P if (isStringEmpty(attributeName))
4 Q; {! P$ Y- J( d {$ G* e$ e/ k+ G8 v1 C
return getObjects;
- _ c& V$ r( {. }* j }' s5 v6 B Q6 ]! O' ]! F
//get the attribute value
N2 K4 m) b, I9 w' r bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);+ ~, J1 U' U7 u! }
if (!hasAtt)
( m3 K B' N* W {' Y! J" F3 N4 Z& e3 J; D- c
return getObjects;
" k+ ^2 l, Y1 f7 ]: E# f' ]6 d }0 Y$ f ]% U5 j4 F1 _
/ I Y0 k ?8 t* @" s1 J attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();6 _3 C8 {' ]; f1 k# d \
- E% l3 O. L6 E c! C) u- }
if (isStringEmpty(attributeValue))# O: [' g) S1 M; m
{* J# |" ]. w' c/ Z- w# y- u: Q! H
return getObjects;
* y8 T; ]9 J' T; Q6 N, T }3 x, j& f3 h+ [2 D
, B$ `: f4 j& w1 R$ F
# z+ a$ Y$ o& z" p9 v8 p //get the key based on the split value 9 C1 M! W$ z& i0 C5 Z
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);3 W* l# x" g( C9 u+ a& _
for (string item : stringArray) r# C4 I4 Z% n, d' F% a% ^
{
( f _: q( I; ?7 b& z/ }7 G, Y //read the string to get the object
& y/ ?1 o; c) ^+ U. } TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));" L1 T5 V3 X, R
& _9 B, v( V6 \; w+ A) J2 [! F" J
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
4 e" P+ l7 p, O* C2 L. V9 }0 J+ j {
3 v4 o7 H4 o% r5 f getObjects.push_back(tempObject);
1 t1 A) L0 g4 t M0 G+ K5 z% l }$ A/ o( |$ M* \- ]$ I1 M
}4 E; @0 l! J$ N& x6 V
. T9 j: ~. I! W. S7 U& D
return getObjects;# C) G; q6 i& I, M* ~) A
}[/mw_shl_code]6 N+ I9 K% P" \
7 O- M$ `! R7 i
% v5 V, u I8 O. U: K( v ^8 H; q1 R9 @; o
更多实例视频和专辑课程陆续分享!
2 P/ S) C9 `8 w
9 g) V" y( t7 q 欢迎转载学习! 3 J9 ~2 Z& O& O9 J5 I! V
http://www.plmhome.com
, I( E4 E f! _0 J , f# P( V/ q2 V9 j& j- W2 _! w
9 j. h; M( E M4 y) `6 B7 T- y6 O: Q; H% p8 L3 A
END PLM之家plmhome
& U. O8 ]' z1 m, T/ {+ \3 O( {▲长按二维码“识别”关注 & c" m/ ~ [. g9 w
; n' [5 K% `2 B5 L3 {~~~~往期经典文章链接~~~~
/ y; H$ c3 v0 \: FNX表达式视频 % B$ Q! Z0 V: {4 i
+ b" S8 a- j2 w' Y" W% c
NX冲压分析可成形一步式视频
3 }+ ?# G4 z' G6 s% a
2 _5 h+ D1 [0 G: aNX产品模板工作室PTS视频 NX高精可视化HD3D视频
2 C; e1 f' g. O* {) o8 c
3 J( _6 a* t: e) S( q8 L/ FNX模型检查一致性check-mate视频
4 C. h$ O" b: \' \9 A
2 F' J1 p4 B$ }7 r; y5 K, aNX入门视频实例教程(8 小时) + c2 S7 Z8 G5 {* x. x4 `
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
) s* Q$ N5 Y5 {6 N+ p& z | | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
' X1 C" E/ S, v# ~/ \7 O3 M; {其他重点咨询
9 {# Y, @) r; R J, n. z工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: " r) l }5 M# w% i5 W! h$ X
|