请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]7 o1 ~$ D; e- u7 K
// tag --> Object
. X$ g2 j% b! q3 A//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法- ~5 j. T5 `% K. b6 P/ ?6 i# U
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag)): R6 S' o& ~/ v$ }; X* H! j4 p" e
// Object --> Tag' a7 I# P( i- l2 h, f" b
//直接通过对象的Tag()方法获取" b) C, G; \2 J! {; I- d
tag_t getObjectTag = getObject ->Tag();
8 y. B! u0 k1 z" O5 j//tag-->handle L( Q. W' O& ^+ R" J7 J
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());& c' [: ~7 x+ s6 a) ~4 A
// handle --> tag 9 e) ^7 T* X' Q1 v) `
// ... 往后看....
% ?3 O8 f( k3 {2 d" V( p: J) Q: M[/mw_shl_code]$ a3 J9 `6 `" n/ y
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
/ }5 c8 }# H: X这个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 W$ I0 @/ L/ @; Z9 N( ^" R
6 V* d' H* _/ @+ N4 ]std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
2 ]. W# \) Y4 J, Z{ a3 u1 O* H) Q, g5 A
stringstream ss;
! V" D1 x @# O ss.clear();
; q& L3 C9 U) u6 O/ @ unsigned int
, M6 t9 V, s" f& Y ID,5 X. S8 V6 {6 M" L. P$ q' v# k5 C
version;
9 f8 \* ~0 H5 j) D) e char
9 ]1 C% F6 G, X ~# j: s * file_data,
, K1 `$ n4 @& w0 }1 C" ]6 g, h * handle,
$ K/ n' {- y8 F/ `* C msg[30];' B! o% z) V! Y/ w2 f
if (objectTag)& @, v5 ^, H8 @# f8 k
{$ ?: N4 } w4 F8 O( g0 t% Y3 O
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());/ J$ a) f) g: C) A
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
: u) I. {& X# _( u UF_TAG_decompose_handle(handle, &file_data, &ID, &version);6 k' q6 E3 k( L$ X6 y( H e
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);3 W3 G; s! e1 {0 {/ i! A
ss << file_data << "_"<< ID <<"_" << version;# L$ j& {" Y- D5 b9 j* [
UF_free(handle);$ t! |, w6 r, j& Y8 V4 x- h
UF_free(file_data);
, x" w. ?- Z; ?0 T5 q$ o' F1 ~) P }
, e2 ]7 [; E! v
/ ?9 h$ b [1 ]7 w" @9 c* e6 ` return ss.str();
: S9 z- N" H* ~}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
- J$ s _: k% a! j) {# [- J////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
! f. K: ?, }) K{
9 m: T% a& F, F7 s vector<TaggedObject*> getObjects;
2 M* q& F8 B7 e3 K! t V" N getObjects.clear();5 A, _- e9 N! v0 ]& D
9 P" {3 V1 i8 t O string attributeName("");1 t& l+ f+ b0 E! G2 z' w
string attributeValue("");3 Z x T" v1 j; T( I, N
vector<string> stringArray;2 h- j- F9 y4 O: X( p
stringArray.clear();' m; P# l( J( {
//get the attribute value 2 a+ ^2 P7 \0 T P
// get the attribute name
* k+ V% [$ G( M4 }
! s( o# @2 \# I e! C @+ r! q1 F attributeName = GetAttributeName_FromType(typeT);
4 \- [' Y5 J v; ` if (isStringEmpty(attributeName))
; w2 A* E9 B1 w& r' v# }/ L9 x( r {
4 s5 E) n3 F+ i; u return getObjects;
& t; v# h% h y4 o+ \ }, X1 B. ?( b* }3 u ?. m8 _, N& a) {
//get the attribute value
' H. x) p4 E. T2 V0 q! o bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
2 R* [! @: I Z% u if (!hasAtt)
, o3 X. X2 T3 o! S {/ r' R3 t- s! m% w5 {
return getObjects;& r6 `& H% u, c3 E
}& ]( c! t& u/ \3 h
8 g3 I0 _& ` n9 q$ \3 {) r
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
( c5 z3 O& y A
0 F% M2 v$ ~9 z, n i if (isStringEmpty(attributeValue))8 Y. {4 F' ]$ Q
{
0 O% m# ]: Y5 Y" e& T4 }$ T( c return getObjects;
4 ]6 i# ]8 u. K7 f1 Z9 | } C8 `, K! a# ] u
; y6 y. [- o5 V' t9 i
S# D1 V5 U: n+ R. h2 y, m //get the key based on the split value
* p6 W' w( X5 V4 J String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);' @0 r. |9 H2 l; T! Q s& E
for (string item : stringArray)" F5 I$ ~$ }7 F$ W! c$ N- I
{
1 T. w( l8 B5 l! b! W //read the string to get the object / `& o7 K3 m: }3 {6 F) s8 [. b
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
0 F" A8 R, }8 y* w # i2 W2 D3 H7 F% X" T5 i/ p; Q4 v( @
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
! I, |3 y; B0 t( `8 { {& ^2 W9 d( M, K8 X
getObjects.push_back(tempObject);
4 _# G0 [4 _ ^, y }
. `( r! G0 `! }5 [ }0 e$ g4 l! `+ E4 |
; a) `( @7 ]8 p7 f4 e return getObjects;
$ l* w% \1 K4 H5 c5 Q" W- u. S}[/mw_shl_code]1 ]: K k/ q% T
7 E) V0 ^- Q8 ~4 x- `( w9 h1 e/ y# K+ \* R" k- Q) t) z; |
2 r8 M) j" B+ {) }5 p v
更多实例视频和专辑课程陆续分享!
' K9 v8 F% t& J: |) B$ N, H" ^* c4 Q
欢迎转载学习!
2 c% M. }( P0 q& j0 ehttp://www.plmhome.com
: O+ B7 V9 t+ Y8 o" B" z
) z5 z' o" s- f- o
- E* a! r8 c- Z; c6 M) D
+ A# ]+ w" s# W5 uEND PLM之家plmhome 2 s7 p% `; H3 i- G
▲长按二维码“识别”关注 5 a3 A/ I2 H" m
2 A8 y& d" o" ~# E1 Y) _~~~~往期经典文章链接~~~~ 1 X# q7 `6 B6 x/ f9 K @
NX表达式视频 9 d8 N$ ]# l( B& U* }4 s& J, y
9 S- ]) P0 e5 E* ~ L+ D/ Q# ^NX冲压分析可成形一步式视频 8 V2 e: ^+ s6 L; g
; c7 ~3 c3 M: a9 ?+ U) l" |NX产品模板工作室PTS视频 NX高精可视化HD3D视频 2 B% o% ]: z2 @, A% c) m" o7 ]$ J
+ m1 q3 @4 Q! Y; e0 p) VNX模型检查一致性check-mate视频
7 L' ]4 Q0 p$ K2 n1 Z8 t4 T" T3 e/ [/ c5 b* H
NX入门视频实例教程(8 小时) . ?# |1 R- S. {% q/ a. d. j
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
- D1 R* d/ p9 V1 D7 r% b' a* c7 X | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | 5 Q* m1 W; r, T" V& T/ z
其他重点咨询
6 W6 k0 Z" m" V* ]工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
0 s" X P( {4 {. N3 P5 W9 B0 Y |