请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
; W+ ?: C6 a+ l0 w2 e0 W3 k; i// tag --> Object! V2 Y8 t' L& v2 L
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
) U' [4 j* b1 n4 j1 x$ N7 `TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
. V0 D3 j0 r' Y& E) Q// Object --> Tag$ n+ @1 w0 T% H5 s; C9 O
//直接通过对象的Tag()方法获取
q( h) J) w; O; K8 otag_t getObjectTag = getObject ->Tag();9 }. x! V0 [1 s: ?0 C
//tag-->handle$ X$ I+ b- ~' u" m
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
- b1 l7 ?1 g; [// handle --> tag ) m# ]" `) n- H% ?$ C" U6 o$ O
// ... 往后看....1 J$ |/ k% n) X, _# `
[/mw_shl_code]
0 Q4 i4 _* J3 t- I2 aGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
, ^4 `% K* q( a+ N0 K" J这个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]( k! d* t3 `5 \$ C1 L
( K) K& i" e {) }, E m( P
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
" O# r, J3 G6 ?5 J$ I% U# ~{
0 k( K3 y1 C/ [( v% K stringstream ss;; y4 Y! P2 L; L) e
ss.clear();
& O+ [. |0 P4 E# b+ h) r unsigned int
3 S1 h" }; t# k+ i: R ID,0 O; n' U Z$ o% x
version;
R$ v, { E! e char
2 Y9 x$ B! g* z6 h& D * file_data,7 c8 W' H V3 c+ v0 N+ I. n2 D
* handle,
0 @- D- ?+ m+ e* }1 O! I; s$ x msg[30];1 Y! ?) i# P) }& G
if (objectTag)
+ l+ w7 c. N+ s) S3 y {/ ?5 p) ?& E3 ^4 b
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
+ [6 A0 j$ P7 b. ?( d% r z Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
2 C) W* {) Q: d, N9 T UF_TAG_decompose_handle(handle, &file_data, &ID, &version);; a0 u) F- d- a
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);( G7 B& C) O) x3 N% Z
ss << file_data << "_"<< ID <<"_" << version;
5 H/ f- w8 [* o4 y UF_free(handle);. a3 }6 B5 @2 `2 s9 p5 ]
UF_free(file_data);
" |2 p4 |+ D: a( _- h+ U( H }
# m5 Y) c8 ?% Y# n& r! Z: M& f: p# i( I5 ?1 A l$ e' y. B
return ss.str();
[" X$ I, w8 w5 _& ^9 a' @- \}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 " {! G; q1 o+ C% Z
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
; S5 s# W7 L, x( Z6 t* D% s. ~{2 y! k4 B" H$ k7 |
vector<TaggedObject*> getObjects;
3 _" Q) ~: |) y9 h% N getObjects.clear();: T1 r6 U* Y- ~8 W) c
3 Q, m# z9 }1 {$ ~ X3 ? c
string attributeName("");- w* H1 ]* Q2 h2 i
string attributeValue("");
: t: g: `5 t/ G8 V) t6 w0 d vector<string> stringArray; y1 X4 I/ m' M- q
stringArray.clear();
" A! m6 O4 K3 i3 `5 F+ g, v- A //get the attribute value 3 _" i% k) U3 ^+ i! n
// get the attribute name
# b/ N: o, L& y S% W e* j+ `+ @( P! l
attributeName = GetAttributeName_FromType(typeT);, A" @8 J) I$ g( ` e4 a
if (isStringEmpty(attributeName))
) P' J4 Z+ w" F2 D r( V3 A/ d* C {
$ R O" c0 m% F5 T$ }3 d+ P1 P5 T return getObjects;: c3 L9 C3 Z# q% a3 j
}
. d* P5 V1 ]) {. v) J8 B- L //get the attribute value
! C) j$ q3 Z( M2 V4 _' ~ bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
/ s N9 m$ x# l' u if (!hasAtt)& U2 F6 n5 Y. _/ Q4 _4 q# y9 p8 S
{) L' |$ @/ L2 C* ]) P5 f0 g/ |
return getObjects;
9 V; ]% N' ?5 A2 Q( l }
* Y# n# U/ ~! q/ J; b1 o5 K' k5 O2 v# `1 W8 j' ]
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();0 P$ t3 H: ^( t' u( e+ Z6 u
U6 t. r/ i; ? if (isStringEmpty(attributeValue))
5 C0 m5 M9 e' D ~/ ?. _1 R0 A2 i8 I {
& n/ @- R0 o* e; N: s6 N- U return getObjects;+ z y9 k- T6 M3 D, s& s' f
}3 Z9 A- N! M# X O* }) p3 v
& P8 `. B4 i( M% C( E* r
/ e9 Z4 y# \% d$ p6 { y$ W //get the key based on the split value
, s% R1 x' [$ Q: Z T7 m1 F# m String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);3 u8 e& h1 |. [) Z3 l$ U2 T
for (string item : stringArray)
; n' T/ H( o( [2 i {2 p) w1 P; Q6 U
//read the string to get the object 0 K/ B1 d& n7 k5 v
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str())); |7 h+ n* g$ f. I2 K
/ }6 W$ D4 |) w, k3 l8 P9 U _
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)( \* {% C6 \* ~* `
{# @! d0 \( S+ F6 q' x, f1 V w
getObjects.push_back(tempObject);" l* [) ^+ b1 O
}* z7 B( e" i+ R3 V2 T- o
}
2 H7 O2 Y4 D1 M
5 ^+ y) ^% C9 X& c: U2 W return getObjects;
9 f5 z' W. J) e( N! e}[/mw_shl_code]4 D# C5 b9 `4 H: c' q' f
9 e- g' K! P% z' O U' E, ^! H0 I: ]6 b! ^
7 w5 R8 B( {8 t& S, ]; S$ {! A
更多实例视频和专辑课程陆续分享!2 [* n3 |% o, v
8 u" B$ @, D) {% K. A' }- |9 ]8 V7 [
欢迎转载学习!
/ {: C" m7 S: d9 Chttp://www.plmhome.com
: j6 k; _) y1 Z% o/ C 0 {6 r, j6 g7 S
0 D# O2 s8 x, g8 Z0 R7 J, F
. R" Y4 J5 ?9 N5 wEND PLM之家plmhome
* ?% J3 S. w9 _▲长按二维码“识别”关注 6 v; o; E/ T6 Q% a! Y
, M: O7 H) O6 T" y1 G6 b4 ^~~~~往期经典文章链接~~~~
0 d# Z( S3 D1 KNX表达式视频
( m0 B* M! F, P3 N6 D$ ]! A5 p3 E2 r; m9 h1 X" d& M
NX冲压分析可成形一步式视频 O, J& `8 O' Q9 Q
9 }7 P0 a( `! I7 T2 {NX产品模板工作室PTS视频 NX高精可视化HD3D视频
" O' L- a q1 w7 Y! w! H, p6 T: C" m2 D7 |2 Y, {
NX模型检查一致性check-mate视频
0 d6 T% z& q* x& \3 w7 ^* K1 Z; C$ F& G# a* M2 b Z
NX入门视频实例教程(8 小时)
/ k, ?/ t1 [% \, b' U2 r3 S8 MNX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
. O+ _3 w5 h( y9 }9 K4 t | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
3 U/ E" \& \, v7 \其他重点咨询
2 t2 h5 f' d, s: c工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: ) \) L) ]$ d, K% R, ~7 ?/ h, M7 T; x
|