请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
8 a1 ?, g" }/ {) ?// tag --> Object7 P% K+ Q* n. ?' B9 P
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法$ D2 W8 v6 H0 ~' S
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))6 a; D) e1 O0 V4 E* E+ W
// Object --> Tag
" y# T+ R7 m' x* K: _% H0 v//直接通过对象的Tag()方法获取. h$ _& a$ R M" v9 c2 B7 x
tag_t getObjectTag = getObject ->Tag();
2 _) ?% G( l* ]" p3 H" {//tag-->handle
1 i. C6 K* d% |* j& x" o7 Xchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
& B) e0 Q) P3 z5 p( \2 q. b// handle --> tag
6 a& P: x# v i2 L& a3 u0 [// ... 往后看....7 [1 ~* J8 ]/ p! |2 E0 d" T
[/mw_shl_code]0 }: o/ J% P. R- S: ~: D7 o
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
- s( s w5 \6 i4 F6 O# [4 z& h/ |% h4 y这个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]
1 |- e& J5 l5 o8 x' G1 Y. D. f# g+ A3 o% Q" a1 R& }; q
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag); e) c ~1 h: J5 \$ v$ U, L5 s" B5 ~& q
{, r# p2 d( @1 o7 {6 w
stringstream ss;
L' Y) j1 ]# ?+ h5 a6 x ss.clear();- G3 o9 ~2 _3 o7 ^( ~) s; z" e
unsigned int L! z( B/ B& \
ID,
2 y) U0 w. Q4 I6 w! a# m2 r version;6 |$ y1 x# k7 Y/ b
char" l5 P8 Y1 G- V
* file_data,( ]: N/ [2 \4 V3 k6 c! W: W" z
* handle,
$ ?* ^* c% H9 p1 @8 W V. ~4 S msg[30];
: z2 z) _4 @# b( B4 w& m if (objectTag)
3 t, w$ e" D' U) n3 L {: X$ w' `: c+ T' G' A' M8 P4 Z
handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
; _7 \ ]6 ], b! c- e% n: K/ o Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
% ?7 Y, O5 o) f" [ UF_TAG_decompose_handle(handle, &file_data, &ID, &version);, w0 m, R' i. ~3 i4 @; w5 U3 Y. m2 O
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);4 f$ O2 X" W! ?# C
ss << file_data << "_"<< ID <<"_" << version;( J' i% n6 q: H- _! z
UF_free(handle);; ?/ g9 D- W" b$ N
UF_free(file_data);
8 ?$ z) o% L8 Y& M d }
; y$ L) y( I- l+ j% l' b% Z* T" x8 `8 R6 o5 E
return ss.str();
2 p0 m8 f% w) g# Z8 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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
6 U2 ]8 X( c/ }////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT). Y* j( u% d$ k. H0 m
{1 L* o5 {# Y. g( X7 ]
vector<TaggedObject*> getObjects;- f0 {2 G9 }+ a0 I
getObjects.clear();
% [+ d2 N! G8 D
# B5 |# U" r% G# M& n: x' t& ^ string attributeName("");
; i8 e* i( ~% W7 h+ s. y0 e string attributeValue("");: s+ Y& {# {. J: g! w% O4 }& V7 X
vector<string> stringArray;0 `4 K5 s, |7 \) h$ l
stringArray.clear();
% p( @: T4 @* Q7 h) m. b5 b8 F //get the attribute value
2 |6 G8 A& B# S // get the attribute name 2 ]+ i2 l F, {/ u( _# D8 U- T
& ?) w) I( m5 P, M attributeName = GetAttributeName_FromType(typeT);! `! I) l1 @+ Q) E& q1 S" [
if (isStringEmpty(attributeName))
; M# y m2 U. u8 D {
: y, V! `* b. L- { return getObjects;3 r( Y/ z7 y: s3 M. D& k" q) U/ v
}3 y2 F9 d, C' N; C
//get the attribute value / S$ N% H% f% Q' \5 Y
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
/ {% Q+ N3 m4 X if (!hasAtt)
N8 a0 I7 Y y f8 ^3 q: J# C {- A# ]' h. [3 b
return getObjects;% V/ o( q! i! _$ f
}
; W$ L2 t) M7 t: R6 {
6 c9 a$ r5 n" J0 o3 F attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();7 N' ]& p% Q; n0 k3 X
) }2 C( U, w& C1 G6 e. y D if (isStringEmpty(attributeValue)) X# [0 E4 ]8 C' O& I1 S
{0 k) f3 m8 K, v+ w( d5 c$ W/ s( Z
return getObjects;: h2 Q: K( U# K0 F9 a! {7 y6 r
}1 O4 Z1 b/ M' I5 X: V
* Q8 @+ n. t' A3 r
6 z8 R" Q! W# q, [/ I( b //get the key based on the split value
' E. W: Q9 k0 q5 O/ N5 J String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
9 H- Z! ^9 ?1 V7 G, z/ G; ]2 _, f for (string item : stringArray). i- C, y8 {9 V7 f: o
{
6 W" K7 J1 O) `$ M) R" ~2 p! V //read the string to get the object - G, @6 G8 u0 O5 a; W7 D
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));: h1 @; \. Q5 ^$ N
1 d% N& d" p* a, y j3 W- h
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
! v3 {$ @$ @ H( ^) L! n% q- H {7 i# u$ v! p1 ~% ]
getObjects.push_back(tempObject);
* ~' \0 e0 F7 p" C3 ^ }
$ Q& r* ^2 ]5 y+ f }
& s: S: `7 n3 L: e$ T" P3 N. f, G6 u O; J' i" s
return getObjects;
& {5 e5 L# b& c5 n; o+ W}[/mw_shl_code]
5 s( Y* a/ k0 y9 N( L/ p( k( q h
, h4 l1 T9 R2 e
8 d$ h0 k- a' i
更多实例视频和专辑课程陆续分享!4 z1 x2 X q) g L" `
' @! h; T" \1 |. @3 S! V( ^ 欢迎转载学习!
+ ^( s$ L7 @5 e1 z5 g; Chttp://www.plmhome.com
6 a" _6 S/ i, G . F- ~' H8 h( m
6 H5 B8 Z. }+ B9 B1 s. O
2 I0 W1 o: d$ h! ^# YEND PLM之家plmhome
* ^, n3 i' N" @6 C# z" P3 J▲长按二维码“识别”关注 0 u5 c. h, N( T- i. @( r' l
' l! w! [: a" W3 G& G( u& F* D~~~~往期经典文章链接~~~~ 6 R4 G7 t0 J% p% G8 A* y
NX表达式视频 * I" H7 ^2 @( ?6 a/ n Z, l
' B* }0 J7 G# G3 f% G3 g2 Q
NX冲压分析可成形一步式视频
: Z/ y6 r# n; w& w5 h- M% ]- }. J. H) g* c- Z; j- q
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
8 ?1 v$ Z3 {8 P# S. b8 E( ^8 V/ w' u; m% D# g. X0 d. N
NX模型检查一致性check-mate视频 & _- j" U$ @+ e! _' H
/ U+ c8 f9 c& V) BNX入门视频实例教程(8 小时) 4 h2 A; T6 @& y1 x. n8 d8 @
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | | 8 O1 `2 U8 f3 {) g" |" g
| | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
! d' W7 H( ~. }- [' m/ Q: i其他重点咨询
% [: v0 x% D& o工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: 1 ~% s' d6 ^5 I: o9 F
|