请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]6 t8 S& }7 c' _- c
// tag --> Object; u9 A* Y: C0 x# v) C8 z' i
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法' G# [1 i4 K6 N u
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))4 _' k& H- T' i) Z7 r
// Object --> Tag- S, `/ p0 ?0 ^. y; {! ^
//直接通过对象的Tag()方法获取
1 E! }$ `- w2 Y: Htag_t getObjectTag = getObject ->Tag();
: D5 W! u/ m8 f* j4 p" ?+ Y//tag-->handle
+ ]' \! Y: c9 u4 ochar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());& o/ G' [+ } n c a
// handle --> tag 4 k0 D X) c0 o0 i5 }+ ]) c
// ... 往后看....
" e7 a7 P3 n! F' f7 k2 O5 C5 Q; W[/mw_shl_code]
6 l+ C& d2 L- `0 T3 {" JGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 % j) b, @: d9 k0 n' t4 `) b! k# q8 ]
这个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]
0 c$ }8 T3 ]4 {* E% y! `7 Y& x% f
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)2 v7 J# n$ U4 r- ?. c0 B% L7 k- Z
{( D2 H, e r& H% o4 T" T
stringstream ss;
0 p2 q( p* w; T& o ss.clear();
7 |, D# D+ F& n$ p3 G" D; x0 _" ~ unsigned int9 g/ [8 f" q1 l; I" ^/ \: f$ P
ID,1 Q" G4 F! |; B; s5 `8 e; D7 w
version;, E9 O# ^# V4 N9 b& D) Y. t3 Y
char; [* X& T# E! z
* file_data,- V$ F$ Q3 D/ f' ~- c5 h) D5 B
* handle,9 f# x) D' |# k" V
msg[30];
+ b- H r* \; g, ^ R+ Q9 B if (objectTag)$ x/ A' v! V9 X5 `3 X6 U( n5 D
{3 u3 K; o% o( V. d* I! T0 S& d
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
- t2 r: Q# O' L) C8 ] Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());5 { s% v" e) {6 e
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);) u$ c2 E$ M' l/ ?# j
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);; |1 ^" k# [/ ]% z$ ~
ss << file_data << "_"<< ID <<"_" << version;2 M6 Y2 U/ }# u- q% i9 t
UF_free(handle);
$ c8 H/ {: ?- w. V1 K- ~ UF_free(file_data);0 ^; ]1 _9 O- A
}
1 M' v, V' x$ A, N: f
6 v1 G9 h7 x# f$ b2 U return ss.str();8 s6 A& \$ z. K& k0 x4 X& {
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 ( D! u. j( @6 w% N; k* h3 y% ^5 [8 \5 l
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
5 `" @6 v8 c+ O6 G7 q$ {{7 |' ?% O! O: G3 r$ t7 p! @7 R
vector<TaggedObject*> getObjects;
( Q0 t3 O; {- x- \! R! M2 U0 `8 Y getObjects.clear();
2 c2 E9 F7 Y6 [9 o8 K
- h4 t/ K% o1 {0 S4 p/ ?5 s1 ~* B string attributeName("");( H6 T$ ]7 G% }: |( ?: U8 k1 x" S' i& @
string attributeValue("");
$ M M4 Y( f5 l1 E/ U vector<string> stringArray;; H: Y" e' k+ a* R& G
stringArray.clear();
1 e* z5 R+ f0 h3 _( ^+ ^ //get the attribute value
: k! S$ d- P3 A [) @* C) K // get the attribute name & J6 C: i8 u$ l: K
' t% ?" e5 ~: |3 W attributeName = GetAttributeName_FromType(typeT);
0 G8 M* R! j9 L if (isStringEmpty(attributeName))8 z6 a4 M5 c! C* y3 j
{
3 F' M O$ }/ [4 v0 N5 H# h0 r return getObjects;# P& z# z' S/ A, {
}, p0 D& Y/ Z% _" P6 q3 O3 I
//get the attribute value . s% v$ W2 B9 N( a, t1 i
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);2 F1 q1 S; R+ z8 J: P
if (!hasAtt)! a* a+ c) W C" x" S9 f2 ~1 q+ e3 \
{
, b8 k$ Z' _5 K3 P& K* ^ return getObjects;% O n. S+ s4 o7 J- U$ I7 O
} Q3 t7 y7 P/ I# t8 Q" ~
2 U$ j# Q, {/ x# d( E3 A; ?
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
6 Q5 j T& v( Q1 C' _) L 6 u9 \+ A5 d$ K- O
if (isStringEmpty(attributeValue))/ | d; Z( U, a4 o) t
{
5 H# z! p3 a. s! P return getObjects;6 d4 m Z ~) L9 s# ]0 G) ~$ f; X
}
. y; l7 k& q! S1 g" i6 `) Z4 u1 O: `7 H8 p
; ]; a1 ~, ^# M' i p6 P2 _5 Z //get the key based on the split value
- b- Z# c5 j% v, {, x3 B { String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);3 e: R' Q3 m9 O9 z3 r
for (string item : stringArray)
* n4 P, V* }" k$ x5 a4 K {; X* B/ D0 O2 {1 Y
//read the string to get the object # o1 ~5 ^; h9 M- B/ s2 p5 K
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
* m' V! N1 J4 `9 w+ r5 K 6 _$ Z0 A/ L1 d. T/ a
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
+ ]: A- V6 f; }3 l& ~& W {
5 U4 s1 c# Q$ q getObjects.push_back(tempObject);) L6 Z- j0 @+ ?4 |" u
}
; N& a4 C, o2 X* h- p( V# M }
1 T g/ v& Y1 Q0 j# `. }3 R' @* H$ m7 h$ H
return getObjects;
* o x5 H, j) A0 t/ {- B% T. L0 V}[/mw_shl_code]' f& z; i: @# O) j
- t+ y9 c1 V1 v
0 e; S4 T" T6 g' S/ A$ c0 ]# m0 D
) z i) c5 S4 M5 L; j9 ?更多实例视频和专辑课程陆续分享!
. Y1 d' _4 u5 a2 b4 ]3 N# d3 @0 E; X$ U' n# @
欢迎转载学习!
7 B: s6 I% Z# B9 }. ]http://www.plmhome.com $ [, x1 C, U( F; ~7 k0 @1 L: u! k
. q, y& D2 M* e! W9 D/ G: e. C* j$ K. c' L
5 W0 n0 X' F4 }: I' F/ J1 Z
END PLM之家plmhome % H) q& m+ n/ M" {# C, E# C; f
▲长按二维码“识别”关注 5 v, W, N. K$ S7 h1 @: a
% H0 o& B$ u$ f* g% p6 }
~~~~往期经典文章链接~~~~ ! p: c# i0 V# s
NX表达式视频
: [7 w" Y5 n8 ^6 d( {% C. D
# C8 ~# ~" v7 U2 B/ ONX冲压分析可成形一步式视频
: B% a1 U) T8 k( M0 R0 h9 ^# G- W t2 f6 v) C6 \
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
4 v. X: |0 P8 R9 U
; E+ u3 a6 I/ @: m; {( INX模型检查一致性check-mate视频
}& @6 W- E6 s/ _ Z' F8 t/ ?
NX入门视频实例教程(8 小时) * ~: ?7 i' {5 m. c
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
' T1 y4 k- u+ w$ ~9 u+ d: Z | | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
' L ?5 y8 A( J9 M9 Q其他重点咨询 % z2 h' |! K- v/ o
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: + K+ }) }2 x& h0 }% f
|