PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

2022-6-1 14:33:25 2324 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]
& c1 ~/ s. E7 A; m// tag --> Object  b3 O5 K9 h4 m4 ^, D
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法! R: X  a6 @1 p' l& R* i+ I: g
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
1 t* X# Y  Q1 a5 x  K// Object --> Tag
; v4 K1 C# S4 ~* o. v; ~//直接通过对象的Tag()方法获取
4 r. B* X8 E$ xtag_t getObjectTag = getObject ->Tag();3 G9 Q7 a/ V; _& A) |/ j. a# ^
//tag-->handle
! F" l7 P& \9 s( s8 z! Qchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());( \9 [2 `* B. _! M
// handle --> tag
1 M9 J7 ~1 \4 g3 M- o% Y// ... 往后看....
4 x6 D7 s$ h6 T* s. F[/mw_shl_code]
8 f& E" G& D  ]; R" P  d
GetHandle: RMHPressureSymbol.prt R0000068a00000028
GetTag: 52583
: o" w2 _  F4 ^, d+ H
这个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" V- j' r0 k; n% Q2 Q" d0 `: k: ~  q4 U

3 J: X" S; R) T) T" jstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)5 p# o, v( B6 u7 C& S' J* e
{' e. Y# I8 r1 y; ^# w
  stringstream ss;+ ]+ s0 i. F3 U8 i$ H8 ^: C5 r. A
  ss.clear();
2 n5 X5 p& D; p) Y# h  unsigned int# v, B0 w" t/ |  f4 Q! q$ I9 t! m
    ID,
' Z& G+ b2 m4 ~9 k    version;
- B7 r2 l2 N) Q8 U3 X  char9 \8 [& u- O2 z: I+ P: y; H0 k
    * file_data,  i$ o# n, a/ d* s0 q- L5 s
    * handle,! D& r) @# `9 g
    msg[30];" X6 t1 r8 G# y  A- ]
  if (objectTag). x7 t! c7 P# v0 Z) r0 D( e9 Y  t: [
  {1 ~1 N5 a% R0 @1 c/ m) ]
    handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());! R3 S7 _9 i7 W+ I6 W6 k
    Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());* A) T7 w8 b+ t6 ~! O& p$ M0 A
    UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
6 e, o+ e: |2 z6 E2 e6 m5 }    Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);/ _$ L8 E! \# P: |# ^3 }" L% h
    ss << file_data << "_"<< ID <<"_" << version;# d' k4 `0 Q4 s5 {7 l( d
    UF_free(handle);1 N6 q0 b$ q1 d$ {4 A& N3 e7 }
    UF_free(file_data);
( ]4 I7 A0 i+ Y! G) L( z, o  }
4 B0 S! q& @1 ^; ?/ ]
/ p$ [& c: e" I, ?) V8 X4 U. A  return ss.str();
( l; v9 \/ U5 ]+ v' G7 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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
4 j4 A; W: S. _# k; d" {% g
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用//////
////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的/////
[mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)5 ?+ j4 F' s1 o& K6 w
{
: L5 i, R( h: g- J  vector<TaggedObject*> getObjects;2 L# ?" V  x; k* [$ S) O! g
  getObjects.clear();
) t9 I. B6 j' s- v; G! j' l2 a' Y* z; T- t& n9 o4 n
  string attributeName("");$ l# D1 s+ z0 L3 H, Y/ V
  string attributeValue("");
3 c; [% @, _4 Y4 W  vector<string> stringArray;
8 o8 G- P0 \  E/ \# [  M" L  stringArray.clear();8 G* N7 W5 X7 E: z
  //get the attribute value
7 }- R7 M" q" `% p5 E6 [  // get the attribute name ! r  K( S8 e: c1 H

8 c4 S! V6 y( Y* a6 i2 ~  attributeName = GetAttributeName_FromType(typeT);5 R: ~& E! i1 h7 |4 w
  if (isStringEmpty(attributeName))
( g5 W- |1 m  P5 T% z7 X  {, j8 ^3 O7 ?- l8 {  a7 I! A
    return getObjects;. q2 R5 F: x, N( Z4 q. W
  }
6 f( W1 Y, L7 y4 N( s0 z& N( o5 R  //get the attribute value $ d% o! s7 N2 {6 |4 l; G
  bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
3 F# R) X3 |, ]- l) {  if (!hasAtt)0 E/ v$ @4 L) E: n4 Z2 F
  {
2 n. d. Z# a; C8 ?8 U2 k+ j1 K, p    return getObjects;
+ F5 O' l) R2 P( E  }7 E" x3 m9 T; g

' q3 Q2 j: @0 Q( A  attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
! a8 Z: f( X. e& R/ C  g  
0 Q3 q" R8 c2 u% h  if (isStringEmpty(attributeValue))) T6 f/ Z0 h0 c7 @
  {" \' Z% M' C# H7 n
    return getObjects;' c" W4 c+ r& C! t* p6 s& Y2 W
  }
5 ?$ Z$ m* D4 i7 L2 }. ]* O8 R& {( y: Z# v. z: y' m* M

+ R' S; e$ f) \4 J0 }  //get the key based on the split value 9 g0 v) D! r7 D1 W8 j/ k# c8 K6 C
  String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);( ?+ A. y( u8 X! U4 \0 B6 ?
  for (string item : stringArray)
- n( g) p  S% p! K' T+ _  {
: O3 I# M; V: H: k- J% l# ?' n* B- A    //read the string to get the object
4 R; E9 a0 i7 |* ~& ?1 a, Q     TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
6 u' o- E- u$ ?     
9 h  p* o. t+ R3 B     if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)
) r$ h' J$ c& Y" w2 V     {/ p1 E1 x) J1 s! a/ r( c- }+ j& d
       getObjects.push_back(tempObject);
3 N. B* |! b' F" B% v     }
) G; v4 z  I7 a" G6 g  }, A$ `# ?5 m1 F

( E5 q, H& O& X% P5 h  return getObjects;" \$ s, M: q3 Q5 ]5 O  U% O9 f
}[/mw_shl_code]
7 F5 ?+ s2 W* ?% C7 R, b% G
' U; w& `7 X" n, ]  X( G+ p& l1 }. s0 m& L

7 W$ b6 V. e6 k+ l: \
更多实例视频和专辑课程陆续分享!/ c7 a/ b  l; d, V1 S( m

/ j' t! Z, B) V0 o' G* E4 _
欢迎转载学习!
3 e! L+ i' B- R, M
更多精彩内容请关注PLM之家
http://www.plmhome.com
' b" w- k% U. q" U1 G2 d6 e: v) R, ^


; `2 T/ G3 f; ]# @% B: I0 t( d$ _8 l0 N. C  L7 c
% m; V$ h! L  ~* ^' r+ a* X5 v
END
PLM之家plmhome

3 B, Q8 d# B1 w- T6 l                               
登录/注册后可看大图

' k. ?& o' ^0 `: j; W▲长按二维码“识别”关注
) Z+ N! m7 h- x5 r* u6 X) C0 i
; L# R# }, c4 A* U
~~~~往期经典文章链接~~~~
. C, F& w& r! m1 j
NX表达式视频

  D  R+ `& D; z% z& p9 f& n" U' b# O8 C* E' L2 S$ O9 l
NX冲压分析可成形一步式视频
2 u2 V  V0 G' v+ Q0 y+ y! d
冲压模具分析工具 3 全部展开实例
1 L4 B  i8 J5 g# d$ p0 g' }
# i/ }/ C. g0 K$ K  v+ t
NX产品模板工作室PTS视频
1 产品模版工作室概述
# n2 B, {2 |! `8 J  z% c1 A
2 产品模版工作室界面; S' Q: W6 O  v% @! h- u- t8 D
3 创建一个基本的模版) r% o" B7 {# F8 Y4 o
4 PTS高级模版技巧
8 F2 t3 r- m9 r0 A
5 PTS添加需求HD3D! L2 B3 T5 Y, }1 F/ l% f' v
6 添加装配模版& [1 i/ d1 A- `4 \% y% q% V6 j% O3 x
NX高精可视化HD3D视频

1 k. |  j. N: }" R0 g
2. PLM之家NX全息3D培训-HD3D基本使用
$ E8 j" ]& k" ^. M5 D8 W2 W0 o# m
3. PLM之家NX全息3D培训-HD3D客户化展示& q3 i9 i7 o  E0 \* t# y6 w) E  b

8 L) y! R1 `( A
NX模型检查一致性check-mate视频

" ?3 |1 r4 c0 b2 R& `9 G# s: h$ N8 v# Y  q1 R, n( R2 d
NX入门视频实例教程(8 小时)

( r% \# \8 L6 s; V) F8 B
NX机管道布置培训课程(10小时)
1 管道模块简介
2 创建编辑路径
3 审核部件
6 ~0 K# L8 C0 P+ |
4 添加部件到管道系统
5 添加型材
6 HVAC管道功能
7 管理管道布置装配
8 管理管道部件选择
9 创建管道通路
10 创建管线布置逻辑图
11 创建标准库
NX二次开发入门经典教程(35小时)

) G: B4 o) m$ i4 d: X6 V9 g4 R; ]其他重点咨询
; D& y6 J5 S& h9 w7 n) V5 }  y, a+ q
工业互联网咨询:
工业软件APP:
数字化转型:
工业互联网技术栈:
' X/ i, Q1 y( O+ H3 f# E( I
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了