请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
1 e/ _8 R1 A) C! P6 B9 x! n// tag --> Object; y4 x! r1 X- Q; @! i4 f
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法; k1 N: E5 o5 Y& S H* s6 x( |
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))3 ?% h9 u: B4 G7 j% Y9 q" X3 t& z
// Object --> Tag, k! X8 f: p4 Z( j! S2 P9 ? v
//直接通过对象的Tag()方法获取
" J. u+ K s) otag_t getObjectTag = getObject ->Tag();
- P; W% }6 ]5 s+ S" q//tag-->handle2 l. @, y) l5 \
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
( G. H! q, `+ w& X, Y( R' c// handle --> tag
# H- x7 ~: P* Q# C& U: j// ... 往后看....: n. I; D2 j- o" ?# X C
[/mw_shl_code]
4 q$ ]- ~' }4 P0 Z7 HGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 2 k4 y v$ B. D; Q* k
这个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]' `( A6 t9 e/ g: f! {
2 {8 `( y1 K" h0 g
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
0 }* W& H4 w$ \5 x( c" p- J* `{' r: w# w i7 x" k8 J
stringstream ss;
8 D: M9 l# k: \; E# k, U5 S ss.clear();. c( a" o7 _$ G; n" {' a5 K
unsigned int7 x8 X, G* {) ?- [1 Z
ID,9 o& l2 C* r0 Y. i6 U R
version;5 u9 l- I% D# J+ g
char0 P' z$ t# x2 g! K
* file_data,
0 @/ N, G) g' O. ~1 T * handle,
5 |0 d8 T9 I) A% W- E2 C3 T msg[30];6 s) d% M7 p d1 H4 l
if (objectTag)/ Y8 i5 ^% U+ K' g- g( j4 i
{# z( L9 T6 E" ]$ y. Q6 _9 n
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());: s' P: ~: ^( {; d7 _; B
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag()); F7 M$ f% M, e1 l( H* M u& {1 E4 I) `
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);6 `( e) `. `, {. c$ d2 ^
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
0 T8 W' G' B$ l# i* q- Z ss << file_data << "_"<< ID <<"_" << version;
8 k/ ^/ N5 M3 e; n8 z! J UF_free(handle);
1 }4 V: Z1 K, K2 |5 i3 K0 E( { UF_free(file_data);1 u& y s; }: J3 H
}
, h0 F' _- @$ T. C+ z
% k- {, q$ R& A" ` return ss.str();% j% W0 W7 p7 c3 e1 I4 `$ T
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 {: m3 h5 ~, q% i6 l2 m) Y) ^) R( p
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
0 N5 S% J2 ^) H ~{
4 p g. x8 M# ^* x vector<TaggedObject*> getObjects;# U& r8 Q c m O) d1 q& v
getObjects.clear();* k" T5 ~8 y2 r s9 ~
* H Q8 O0 y/ q4 _0 C) t
string attributeName("");
0 c4 p- _: N- z$ k- S# n7 \ string attributeValue("");
, _# ]& }% ], _, |5 i( P vector<string> stringArray;
% D7 ]8 j: e5 ]/ O! {& q' u stringArray.clear();- z4 ~: K6 _4 M1 a* l/ [2 n
//get the attribute value ! C5 d' ^6 ~4 L4 j' \; K- c
// get the attribute name
; J; j) N6 H4 W8 D
# P y; H x0 g; C4 F' g: x attributeName = GetAttributeName_FromType(typeT);
j1 C- V3 u# o if (isStringEmpty(attributeName))$ ^/ }' P' P% C3 a; X# O m% f& r- e
{
8 l* Z X( c, U5 m' C. f: B e1 h return getObjects;
% J# k t9 Y7 j5 ?1 x: `1 X }
5 l; X* m5 @- J3 l& S$ C( i2 u; N //get the attribute value
7 [: O: q9 K6 S. c. e5 p! O bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
0 D- [/ w6 S: R; `8 }; x8 k3 p* X# u if (!hasAtt)
6 M4 ?5 I4 J" |; Q& w$ \ {
' J- _6 @% I* P5 ?6 g# @8 G/ d return getObjects;
4 Q/ o! O* a6 P }% m3 q! j: f8 C
& s( k% {; @) | attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
9 i) [7 L2 D( @6 h. P ( b9 G0 I; m) w7 f- j
if (isStringEmpty(attributeValue))$ q+ `4 {) x4 z4 U Q, x k
{4 O$ M* W% D$ I5 o O7 P/ J3 C0 G
return getObjects;
! B( x5 A" R9 C! n& t- R f: F }
$ p' h1 ?5 q: D3 B& @3 o5 J9 n0 M1 N$ h. s" X5 t
9 R7 ^% h' h7 k- H9 q* i# t //get the key based on the split value
4 A, Q1 c. J9 o9 ~% \* }1 D String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
$ R/ V8 |6 a0 Z4 J3 D( r& ~, z for (string item : stringArray)) d* s9 { W# L6 b$ X
{
+ ?( h' m! |( x //read the string to get the object " o* o m6 C. z6 i- R
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
, Y! [2 `+ w0 k5 E2 J: \: C* S 3 e2 u9 y8 U$ C
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
6 `, }% Q% w$ a5 a- c, K% k {5 K ~# I6 K6 n* J
getObjects.push_back(tempObject);1 u' f% F& R3 J6 e! {
}0 ?( y& q9 H# y
}
, ? \: n. n0 K( {. {: [
( \' `/ C) u; I1 a return getObjects;4 c, N. b, [4 n0 n
}[/mw_shl_code]
# P, O# g* V" i/ ~" B/ v# f% h+ V/ d# U1 f: |
: W# N; c! H6 y: P5 K- G3 \ Y7 {8 Z ?% k1 W- v- |9 }
更多实例视频和专辑课程陆续分享!$ I7 M1 P' `7 S7 E
* M& R7 O2 y5 Q: I 欢迎转载学习! : U; M' ^( M5 E d( U" u9 V7 E6 V8 O2 M, V
http://www.plmhome.com
9 T; E9 Q' r$ d2 d & M, e4 F4 N8 D5 h- |' u
9 y, ~+ g, g( |2 E4 r) f( f1 W8 a9 w. R R
END PLM之家plmhome 4 K, J L0 D. T5 T! h& c
▲长按二维码“识别”关注
% n# d% |: Z8 V, e$ t* X/ k m) C& M2 {* S3 A# S2 X8 z; k0 h
~~~~往期经典文章链接~~~~
. Y7 `. n5 g' ]0 X$ G$ \" @NX表达式视频
( \5 V% L* { j: z/ \) ?; ? S# I5 X
NX冲压分析可成形一步式视频
4 ^; K' s* O6 f1 [& M0 |5 h. _. D+ H: S. E+ U
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
, Q9 x! D* o+ s5 q1 v7 j
4 D4 p0 Q: k! t+ \# BNX模型检查一致性check-mate视频 7 Y) |4 [! W; B2 O7 T4 h( q: g
% j* H' N: q- k1 d, N# R, }NX入门视频实例教程(8 小时) $ c1 o7 W( t# A' M& Y8 O
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | / e3 P. J# B' j w
| 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | : X9 A* u& H7 g: s3 e% b
其他重点咨询
' I3 O- v4 O. I- ~3 @$ A工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
$ \6 Z/ R, ]- r& z! @1 U$ D |