PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

[原创] 一文搞懂NX关于Tag,TaggedObject,Handle之间的转换关系

[复制链接]

2022-6-1 14:33:25 2448 0

admin 发表于 2022-6-1 14:33:25 |阅读模式

admin 楼主

2022-6-1 14:33:25

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下:
这里假定变量:
TaggedObject * getObject 为 对象指针;
getObjectTag为Tag类型,
handle为handle类型,
直接通过代码看:这里选择了一个体,打印下结果如下:
640.png
[mw_shl_code=cpp,true]
" y! @' x$ u9 M( T7 Y9 g, u8 j( o- v// tag --> Object
3 @+ F3 T5 j- o$ {* U+ b//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
# A$ _, O1 o; u0 o" J$ X8 \TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))5 D" l( P. B* J/ j7 h7 S  x3 q% c
// Object --> Tag; h6 C" m6 d$ g2 x
//直接通过对象的Tag()方法获取
% h  b" a9 ~( ctag_t getObjectTag = getObject ->Tag();, q7 B8 u! n( I8 \6 J9 T
//tag-->handle
2 V' |: V6 f  Q7 t2 ~" ~1 {char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());
6 p+ c% d  {' G0 E/ W// handle --> tag 3 h0 s+ J( i6 F2 X
// ... 往后看....- B- H; [3 s8 V2 d3 N+ C* c
[/mw_shl_code]) p- H/ b1 q' |4 `% f5 _0 v
GetHandle: RMHPressureSymbol.prt R0000068a00000028
GetTag: 52583

1 h6 H4 a6 C+ {5 `
这个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]+ L" r! c$ G3 s+ A* t% C

6 p7 G3 O5 H, y  Q& nstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)7 b7 C* |1 ?  Z. w6 T- q
{
- F: T8 H  Z7 f, H6 b+ i  stringstream ss;
* x$ v% X$ o( [  Z! y- k  ss.clear();; b% @) z+ K# i0 p! R# D5 j& U
  unsigned int
9 y% V( ]3 Z! ^" B: N1 i7 u    ID,8 r' `, `. d% [3 }  T
    version;8 m: [. [9 r2 h- s
  char9 t5 k: _, w% A
    * file_data,2 }% _& m& ~7 j% W, j
    * handle,
' }  X* X' m9 M2 r8 K% _0 a    msg[30];
8 B4 ?5 Z  h( A' y  if (objectTag)
0 w% ]" d! V  {; t2 l3 O! r# [) Y  {: v6 y1 N. @! h/ T4 O
    handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());- G" t. K* Z. C) w8 U# `, D
    Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
, c: `. [' ?3 e% m3 p5 R: l$ k( H    UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
  Q+ c. Q  r: k9 P6 o  F: W    Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
  l( O' p4 H8 v* c; I    ss << file_data << "_"<< ID <<"_" << version;
. O# Q# {7 D" c$ v    UF_free(handle);6 H/ ~: U+ e5 G8 k; P+ p+ s
    UF_free(file_data);; s5 M# x1 G: }6 Y. m3 s) f
  }  ]. W; |6 b6 V, w4 m4 f$ K3 o$ T: W

- ]7 }. z* D6 D3 L/ m# L" m$ @2 X7 m  return ss.str();- |6 N2 v. |. c4 J- A/ M* F4 ]1 B
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
9 \/ s' ^8 I5 Y# i1 J
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用//////
////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的/////
[mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT). Y5 C  ^; F: z
{8 B( m4 C5 w, i3 K; A' }
  vector<TaggedObject*> getObjects;
2 P6 C' r; W) B. H/ Q/ p- b  getObjects.clear();
  Q4 H! U# R4 I0 v5 f, W! w& l2 h  i" b$ C1 W4 i: [
  string attributeName("");# `( [, Q" C0 y1 E* d$ g. g
  string attributeValue("");
: \7 U- Z7 d4 {. r  vector<string> stringArray;) v/ D. h& v7 I0 r& C" s
  stringArray.clear();
( P" F, A9 R8 E9 z5 J  //get the attribute value 1 h+ I0 ]  R2 a# @1 Y
  // get the attribute name & N3 j) d# b2 o; a" ?  p. _7 y# P
  s3 @/ R& K: z. k, r
  attributeName = GetAttributeName_FromType(typeT);
# P, U* ?/ H& N- o0 m5 x  if (isStringEmpty(attributeName))/ D" P4 n0 _) Z; N
  {/ W, i, Y/ i: ~( y. w$ D% U
    return getObjects;
3 I# Q, _. l  x. G0 p' z4 e  }. ?# N% I9 J" P0 N, v3 G
  //get the attribute value
% Y2 x, A; l9 d3 k( x% A- H7 M  bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
1 f3 {; ]7 c  @& n& R0 r7 R5 S4 M% v6 j  if (!hasAtt)
3 B% w* t% Y1 i# n  {" g0 b% e5 M$ _0 H& b
    return getObjects;1 N" Y: H' p5 e9 t
  }8 j! c4 |. s( H2 t# G% L, F5 b
1 I5 t" D' F! Z) a+ o8 Y
  attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();. z1 L$ X; L! @4 Q" M8 e$ v+ U
  
0 N: |: h  Z5 U- f# K# @  if (isStringEmpty(attributeValue)); ]: f+ p; s2 H: {0 P% @
  {
* u+ [# Y* J& E% w    return getObjects;
* C1 [* z+ f& V0 ?/ r  }( U) [. ]1 T# c8 ?. z+ a' d

9 d/ z' o! q0 {
7 B5 @( i) G+ @( P$ v: [6 M  //get the key based on the split value
+ k; {6 l/ m- H  H: x) Z6 |  String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
; M5 y+ O5 F) m. U6 D! y- y2 R* Q( H8 A  for (string item : stringArray)
# C, \: m7 @" i& o4 [& j  {4 g1 H& @& n0 j: h
    //read the string to get the object
/ T' `2 y1 m! a5 s2 q( ?     TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));9 C5 C# a5 r. ^$ N0 N$ G* x
     " w3 q# {/ ?- F$ m) B2 v0 U2 |- H
     if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
2 t* U% U2 x/ S% P, l: L7 [     {5 B. \. k6 I( t& O; n5 H; f
       getObjects.push_back(tempObject);8 N* }' {( v4 o0 |1 Y
     }
  l* {5 Q8 F8 D2 F  }
8 ^8 m5 u- _, c- U! f6 y  l5 n
0 p6 c: N1 q+ K  return getObjects;6 o- z' h$ e1 {3 ?1 b+ w( n5 o. ^
}[/mw_shl_code]' O& p! S1 O6 d! H+ z  t1 A0 U+ N

# [, Y2 U- u5 g  {, o
; z- t5 s1 j7 V4 W. s- G( U3 o4 g. W; `/ H2 v! k
更多实例视频和专辑课程陆续分享!
$ A7 Y6 A2 t& [# T$ \8 ?* B. s8 y! Q! |1 N
欢迎转载学习!

5 V4 F( B" U) D. a/ ~7 Z5 e
更多精彩内容请关注PLM之家
http://www.plmhome.com
$ n/ Z, Z( s' c9 k+ ~, f" O. i

' _  A. `$ J' r

# N1 J( |* l" p* Q' P; D) w7 b5 t+ L2 n0 ^0 [2 X/ Z
END
PLM之家plmhome
6 R( A3 q9 ^) C" }) [
                               
登录/注册后可看大图

/ K6 b: n" ], Q) _2 q8 l$ h▲长按二维码“识别”关注

+ Q7 {, ~" ^4 V: v9 }6 ]# a% ~; U2 X5 m, Q
~~~~往期经典文章链接~~~~
7 Q7 A9 i8 ^, t9 m" L1 J7 {
NX表达式视频
/ Z# h$ {( M, ?) ^# f
PLM之家表达式专题视频-6 部件间表达式
) c: x  C1 x" r# C. A( S! }6 r% F
/ w$ e' l; l( f
NX冲压分析可成形一步式视频
3 _$ o: `0 n; F% C% f% Z2 {6 b
冲压模具分析工具 3 全部展开实例9 |+ g9 ]( s& ~9 L' C2 m' o  g/ }
& m/ J* I8 R. s( w/ I
NX产品模板工作室PTS视频
1 产品模版工作室概述
1 D" {9 P2 F1 R' C) {( Y  d( o! @
2 产品模版工作室界面$ f3 X6 H3 C+ ^" _% x" e
3 创建一个基本的模版
% [0 ^# a! ?1 f' Y6 A7 ~. {
4 PTS高级模版技巧, @+ r) ]# P+ f$ ^
5 PTS添加需求HD3D( t: l0 p+ B0 Z% m) V0 C
6 添加装配模版
& k4 q3 r; O! g6 \9 I/ O: O3 n
NX高精可视化HD3D视频
6 J: j" {% r0 \; G' [- P/ h# i1 e
2. PLM之家NX全息3D培训-HD3D基本使用
) y7 V5 o- Q# d. B. `# Z9 M7 p$ l
4. PLM之家NX全息3D培训-创建HD3D
# {' _* ^0 Z& V! r: ~; o! K; b
. Q9 K) g4 n! }, y* l! h3 X$ O" a5 h$ l
NX模型检查一致性check-mate视频

2 \  E/ ]% s5 p* L( I, g7 [8 C8 o0 o3 [- K6 n0 I9 [( p
NX入门视频实例教程(8 小时)

( V9 H- H: r/ M1 G0 l
NX机管道布置培训课程(10小时)
1 管道模块简介
2 创建编辑路径
3 审核部件
  v! Y; a4 L3 T. a& e3 S3 `
4 添加部件到管道系统
5 添加型材
6 HVAC管道功能
7 管理管道布置装配
8 管理管道部件选择
9 创建管道通路
10 创建管线布置逻辑图
11 创建标准库
NX二次开发入门经典教程(35小时)

; [; Z9 @0 U. N其他重点咨询

1 @# ]+ f$ @7 o
工业互联网咨询:
工业软件APP:
数字化转型:
工业互联网技术栈:
9 O3 g9 t) A% O5 Z9 Z5 t( V+ i  T, s
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了