请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]
. I! h/ w, b( I# {1 Y% M// tag --> Object# G, l( c$ V& U, q) {
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
( a2 f/ z: e& T1 M5 mTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))8 I% p* A; i6 n m9 h. J" S) M
// Object --> Tag2 t( C: M9 Y7 V
//直接通过对象的Tag()方法获取' u7 @# q: |) w; h
tag_t getObjectTag = getObject ->Tag();8 D7 ]2 x Y) G% E/ A- j
//tag-->handle
. I1 N4 Z( R# ^1 nchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());9 X3 L" x5 y( v
// handle --> tag ' H5 g2 W* u$ Z3 o% a- G i# S/ X' A+ V
// ... 往后看....1 w% s! _0 b2 I; Q% R
[/mw_shl_code]
- @$ Y& Z t/ X5 z* Y8 wGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 5 V0 J& `; }4 s
这个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]
V' e- Q, n( J- I3 m% h0 y- M4 w2 @4 o, c3 [9 X+ \
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
5 c8 v& U' v/ p6 f9 G. ]{
& e. U3 E! \& G2 y! ~ stringstream ss;0 p7 t' H2 p" G2 ?9 v% y! E
ss.clear();- W# e" W( ]! Y( m: g
unsigned int+ |; h+ Y9 L& _. r g4 V9 d3 X
ID,* e4 ^4 Y3 s' x; p9 ]# x, r. l8 ^, G
version;: |$ F: V- Y( i ?2 g2 K
char- S; l% X8 S: b: P
* file_data, M }: t- N+ \+ t- x
* handle,2 j/ j0 D' u, f4 \1 ^- r
msg[30];
$ O9 N+ H' y$ g/ i) J- S if (objectTag)
. v; M1 G; [1 Z {
; U( b5 [8 ]$ _( d handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());6 A+ }" x" P7 j! @4 _- a( v5 O
Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
1 L4 Y) P) P& V; D% [5 j! t UF_TAG_decompose_handle(handle, &file_data, &ID, &version);$ v& Y+ o9 `; R: l) z) G7 L1 z
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
: U% ^, q0 C0 ?& ?- b" Z5 l( J ss << file_data << "_"<< ID <<"_" << version;
1 ?/ u* H4 O& }. ~ S. e$ z5 V UF_free(handle);
4 X4 D& i' [9 H& ~ UF_free(file_data);5 X4 L5 v; D, i, \7 L& B
}: Z& f- d$ T: F4 o2 K2 g8 X0 m. x; `
. v; e' ~' a v. b. `- f return ss.str();
* {% v% x# I G: r! f+ 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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。 # ~5 _: c8 ^" A# y7 g/ U
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)% \$ k; T( A' y/ H/ ~, I
{
& t5 N& C+ e) C9 V% {$ N vector<TaggedObject*> getObjects;; z/ M' r! h U
getObjects.clear();
! j: F5 O! r5 T
$ M' R' R' R+ d% w' G: x2 r, t5 ] string attributeName("");$ R9 d* e6 o, I7 k" U y
string attributeValue("");! [& b7 v9 e8 Y* Y" e& L
vector<string> stringArray;5 ~: C% ?$ |" f3 Q: X
stringArray.clear();
* j" G. ~% [6 j* n //get the attribute value
0 C2 f0 j' ~- N // get the attribute name ; y7 @* R1 x2 a2 W3 T
8 t, h c* s& u t
attributeName = GetAttributeName_FromType(typeT);
/ L5 r* Q6 M: A3 z if (isStringEmpty(attributeName)). v1 J; [) Y- I8 J' P( k$ P- v
{
; T+ a- g- Y) ?" @. w return getObjects;
3 _/ g! e. M& X8 Q$ N- g }
" q4 ?, X7 F/ q0 a4 }: q/ J //get the attribute value 8 ?0 a G( l; f8 l7 d; e! y; f
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);/ O! t1 ?0 C1 @8 ~% E7 q
if (!hasAtt)" K! v* Z- d% E4 i; T- s. P
{
) |! r: d5 d% }7 e7 P- X( C return getObjects;
4 O c; |9 Q' B( R }9 ~8 J& J: ?' P' I- Q1 |$ ]
% j4 i) l9 r% O! f* s2 I0 z) ]8 @8 ~0 e attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();! m& @( N, S, \1 O# Q; m
) P2 R) g* V: F r. n* x' F e
if (isStringEmpty(attributeValue))
# l: {) ~+ k* }/ c. t- m {
: H0 N, z( Z9 o( X0 X return getObjects;
% m6 U5 _0 `7 O; [8 D* ~/ d) b# t! D M }- N+ l2 E6 Z+ O; s% _9 u
8 ?0 G6 O0 |; R. ] b; v2 S
$ D( o j O6 X& I7 H1 G //get the key based on the split value
c% o t/ K! J8 o4 U. n0 G8 [ String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);, L7 {% _& E; t
for (string item : stringArray): F# W/ e- L# ^
{
( [$ _' n# H) x, h/ R4 l //read the string to get the object . [' K* v- b' L# u) P9 I, `* w2 U+ ~
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));* I- y- A- y: k
, m. ?* _& J m2 j. R' J4 ~5 j. d
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)6 B/ _( i3 c" [5 G1 ~. B
{
8 c# q- M; `+ v, z$ ^& b getObjects.push_back(tempObject);
) \3 `2 H0 H. T, j* x" h. [4 v }
5 D! S: Q. D( \1 Y& g3 t1 b6 Z }
3 K! k2 d8 N+ o& w+ I4 M& B, M
! Q) n0 W6 s" {7 y0 {0 J7 e return getObjects;5 y0 O. F# E% J& b
}[/mw_shl_code], E: Q+ w: l8 ?" P
! M* z& a% f6 t" Q$ e
" H- |" i0 |8 }; [3 }7 H/ r
( e! Z* h2 D8 G9 W) ^- b更多实例视频和专辑课程陆续分享!9 p8 R Q! _* T- P# Q
3 z: m, K- b J$ F5 g2 c' z- a4 H 欢迎转载学习! * U. {5 g7 N6 h* f' l- J3 V6 t# Z- r9 I
http://www.plmhome.com
$ D; a, e' S8 M% q* O* [
" g( ^! e: I. R3 j$ V; `6 q4 {# j9 a+ {& ?4 D/ `3 r
1 C3 \: y# q0 s& w* k
END PLM之家plmhome
- S& X P5 |% h$ ?) D0 ^0 ]▲长按二维码“识别”关注 * }+ a" a6 Y# j/ E
4 D" I8 @! A2 U5 Q% }, ]9 p
~~~~往期经典文章链接~~~~
" k/ M7 \7 U/ |& v% C; ]4 d$ VNX表达式视频
. V7 r& a: y1 X4 K" Q3 t4 ^- m, _3 S9 r J
NX冲压分析可成形一步式视频
2 I! a5 F" Q4 u$ `1 m$ ]- C2 m$ q# A& q% @
NX产品模板工作室PTS视频 NX高精可视化HD3D视频 s3 w# a! ^+ D7 N: k4 U6 ]
( `0 i' Y& t( \NX模型检查一致性check-mate视频 7 O; @- Y8 Y2 y
4 y1 n3 v% M; _ D5 e, k
NX入门视频实例教程(8 小时) 8 ^' m6 h g/ Q
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
[7 T" N0 @5 E1 g | | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | / f7 p, }. J) x, s$ e, D* ?! q
其他重点咨询 : |; d& O H) J7 e/ ^
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: 2 s& s; H: X' z; T' u
|