请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]7 Z+ c( o% r( F" v: T6 D) F
// tag --> Object
7 M; J2 S# e, ?; w& j( m1 S//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法- a3 C7 E1 N3 A
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag)), Q- [ r; e5 g3 m. K3 U: s
// Object --> Tag
7 v& m' A u% g//直接通过对象的Tag()方法获取1 v' z6 l+ r, [3 q0 W# e5 A
tag_t getObjectTag = getObject ->Tag();; S' f6 e0 Q! i0 p. Y
//tag-->handle- R9 O5 A2 Q! t+ T1 n% U
char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());2 z8 R( s1 I9 K/ m4 u- U
// handle --> tag % ?# p2 J4 v, I: |) ^* K
// ... 往后看....
( y/ L8 Q# ]3 U[/mw_shl_code], E6 N8 q( }8 E2 L/ f
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
9 P5 l! S3 n. T% u7 I, F, V这个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]
: L8 b9 |7 f' y- F) {! N- S, y2 q- {2 G! C& G- A) Q
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
8 G3 I- ^8 y, e! {5 c{
# U8 `0 f/ [: O" c0 r! [( b) i" K stringstream ss;/ X' `; { A% p" ^- }8 c
ss.clear();2 e: c6 g) }* x
unsigned int) M# b# H8 n" f2 X' c
ID,7 u) T* |( Y; d5 ]
version;' ~* c! [8 D+ u1 h+ Q
char; M9 D4 q( Y3 R
* file_data,4 N: f7 s# K. v( n" j; u8 F
* handle,
$ x1 D# u' c% m+ O2 \# a. G msg[30]; K+ \& I; o9 L7 o9 k; }
if (objectTag)# i6 g6 Y, |1 T7 V
{: x+ M' V; D# U& y/ e
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
3 [0 s2 ~' g# `8 m Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());: U4 P: I; b) Z1 N0 Q9 l: C
UF_TAG_decompose_handle(handle, &file_data, &ID, &version);. X' J: f& w% Y3 x6 [9 Y
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);* [% J3 a' H" i8 z. R
ss << file_data << "_"<< ID <<"_" << version;" G, q l& H6 u0 p. z
UF_free(handle);0 B' W" S7 V* c# J* I# \9 v& j: F
UF_free(file_data);
* A) f: u% B+ b/ t% x0 n. } }
/ D' `4 I$ J/ d% J4 G3 B$ c
6 H7 p P1 M( a- Z/ B return ss.str();. w$ v( z- p9 ]% s6 n+ n
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 # x N4 P/ ?/ B8 W9 d9 r. o2 f3 z9 v
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
6 W1 w: X: i% Q0 I5 Y& |. W; \{
1 K+ k7 `2 Q$ O" Y vector<TaggedObject*> getObjects;/ c# Z1 W, Z- f( k1 k0 u. c
getObjects.clear();: i% b& e3 ?" E4 ^
$ F2 W W0 n) V- X! t% K2 B string attributeName("");
* Q" ~% k# J; }; e/ L string attributeValue(""); X: K/ T4 I+ ~. {0 l# Q' d
vector<string> stringArray;9 b( P+ h9 Q8 h$ h% m, z! v' r9 x
stringArray.clear();
1 F+ G5 m: U/ P //get the attribute value
s$ Y0 m, c1 }# @# y // get the attribute name
; m0 i$ D/ W% s& l) H% E F0 p/ i. i" Q- g
attributeName = GetAttributeName_FromType(typeT);
0 q1 @6 j. l: ~3 y7 e. F/ {" I if (isStringEmpty(attributeName)), ]% K- `) o; B7 @2 i/ ?
{8 |5 p$ U- O6 [8 M& w
return getObjects;/ H* l; ^; }( ~: x
}
w, p7 Z) O( S6 I* ~0 T: ^5 I" @+ c0 b //get the attribute value
& ?% W; l; k+ q' A bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);, M9 w( l/ P1 F" F& n }
if (!hasAtt)" b& z# c4 D) o, z, k
{
. |1 ~3 E% {7 X1 C5 \8 Z& h$ s) I3 F return getObjects;5 L1 o7 S1 L7 a: O+ O% ]/ N1 ]
}
* L% U' s$ a0 V4 a; R) [# |" ^) K8 f( C% P1 O. i
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();3 v; a3 Y, B$ ]# Z. @6 \* H
. y; N, ^( [- ~5 x5 i if (isStringEmpty(attributeValue)); j5 B1 Q# l) T2 l4 t& d
{
) @5 F7 O7 a& z2 R C* v1 M return getObjects;
% `' E7 Q% j& O0 Y% ? }
- E! L! F; j5 y I3 Z+ O( J7 P$ c2 z1 O9 a( S C, ^
* J) x- K" U& M0 A1 k4 Y" K
//get the key based on the split value , X1 X4 X, `4 h9 C9 w) K7 e( L! ^
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);. c H/ g: c" n* F0 @! E- [ G4 K. \% d
for (string item : stringArray)9 _& E$ n2 ~( B
{# L& w' t2 q0 A0 a7 p% ] p4 n
//read the string to get the object
7 G1 F& J: r* @/ V& q$ Y& a TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));* f6 x9 l+ C3 f
& y) Q1 Y i8 l
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
% X/ f$ _! k8 ]9 u+ m% v5 w4 m6 @ {5 s9 ~0 o7 i; @, F+ ^, [: k
getObjects.push_back(tempObject);* s; J! C! m; ~
}
]1 ~. y2 L y7 O0 ~ }7 O8 I3 l2 ?. |2 H8 |/ h, [5 S* N
" D9 d6 P A8 o; R: E/ W, B
return getObjects;
: `7 K9 G% d( g5 M) E7 c}[/mw_shl_code]
3 W" [/ v9 b0 c" p. V
# ^( a i0 w/ J' u6 t' o) s* U K3 a) U
7 Z( T- g1 \. u8 P# j更多实例视频和专辑课程陆续分享!
2 D; b) S0 i$ a
* Z( |# N5 X! k( U) [( G 欢迎转载学习! . q6 C; M; X. C0 P/ ~; w( E% _- S
http://www.plmhome.com
& i( Z/ `: s2 Q. ? ) z2 O" D8 P8 k5 e; m: c3 {: L
: Z& d5 V+ x5 \6 A9 u
/ P- b# N$ D: V, MEND PLM之家plmhome 1 ~ U/ O, s0 T# @* A+ Q
▲长按二维码“识别”关注
" |' y" x, D, u) G! g( Q! F1 v4 p o: Q i+ L. f6 S# h9 x
~~~~往期经典文章链接~~~~
5 W% I: s$ ?, E+ `6 h0 DNX表达式视频
& Q8 z2 F/ z0 \
T! `0 }3 C5 I5 J* n+ f; \NX冲压分析可成形一步式视频 4 S6 G, c2 o* D) @: |* A( R( x$ \
$ E% A; }0 F4 f4 xNX产品模板工作室PTS视频 NX高精可视化HD3D视频 % v( Z# @' @1 g: P* s' {
9 E+ P3 r D7 H& B2 a8 v* x
NX模型检查一致性check-mate视频
; }, l' I. u( P5 m. ^" j0 H7 r1 c. ?. ~9 Q, z2 Z# }: T
NX入门视频实例教程(8 小时) ! ~& z! ~1 m5 @6 |6 z9 e
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
1 T3 N. S6 l' s- Y$ U0 ~9 f2 r4 I | | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
/ r Q+ ]" \1 C其他重点咨询 ; Y# P3 K6 g2 Q' N/ c; g# w. D1 R
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: $ U9 f4 I' m3 j. y- G
|