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 2440 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]
9 \; n! B9 x. ^1 {// tag --> Object
; b6 B1 D, S9 A, V) \- o//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
$ T3 L/ I& Z7 G5 R  L3 J: ?% s" G, E" wTaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
2 |' o, W+ }& y# P; g5 m% x. U// Object --> Tag
0 l1 E) ~8 }/ c6 s5 f: G+ m//直接通过对象的Tag()方法获取
5 Z0 m6 s3 q3 ~* \/ N9 s* Rtag_t getObjectTag = getObject ->Tag();4 ~% W  n7 ?* {* k- _9 e
//tag-->handle
  H% h2 l5 S; }( V5 Rchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());, @/ q/ o; g3 b2 T3 n5 m, ]
// handle --> tag 9 B6 t6 v  {* w+ ^; e! @% E
// ... 往后看....
0 F& g3 s, Q, m1 n: f3 ^5 b. F( W[/mw_shl_code]& Q) |+ c* H0 s$ {& @
GetHandle: RMHPressureSymbol.prt R0000068a00000028
GetTag: 52583
6 q8 s7 ^8 N9 I2 d* O, U
这个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]
3 N0 H2 F2 J* t( m2 [! p/ R* |1 \; w( y6 J! `: Q: I* [
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)- K  M& }4 `( K% A$ R$ t
{
% I& [  p' A$ K, }" y  stringstream ss;
) Z5 a: G& |* x4 q0 v9 c! X, R% A; `  ss.clear();
" j8 v# x9 M, b9 p5 Y  unsigned int
% {* Y* b0 G' r, C' j6 [- i    ID,
7 s& U+ M# q& I# b    version;
7 H$ N  Z; J: o; t$ T( l% D7 t( S  char9 z. B' r3 c% u3 H' }" L
    * file_data,& ]1 |. S$ h! [0 A* P& `! i  F
    * handle,5 o, \6 Q+ s* C8 ]
    msg[30];
' _3 A) G1 f& E* z2 B8 i' I8 F  if (objectTag); Z0 P/ @3 `) ~
  {6 {" t; L: i" L7 j* P5 A3 {3 y
    handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
( Q+ B6 ?/ l2 J0 i    Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());9 _  J' U/ Y. V3 b6 q' ~, B
    UF_TAG_decompose_handle(handle, &file_data, &ID, &version);" D) I- Q- S8 }% o; W; G9 P5 ^
    Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
2 L! E: z4 W9 ?    ss << file_data << "_"<< ID <<"_" << version;' d3 k" j' F3 A; }
    UF_free(handle);
3 e2 V1 b0 Z, \8 a6 b% w( @    UF_free(file_data);
& W8 `/ ?: C* G! \  }
. P) h9 `1 H/ r7 [4 _" d8 z5 ~" Y4 G; r- I5 W0 [) J
  return ss.str();% C0 v  \+ r6 m+ |
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。

# P1 x# L( `( z& _5 z
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用//////
////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的/////
[mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)
5 A  @2 O& m( |& t: R{
7 ?! p9 x; H, p+ \- c' E0 w$ d  vector<TaggedObject*> getObjects;
; {( h  a1 e2 u! J  getObjects.clear();
) t1 J3 V% C' Q$ b/ u. x) ]/ }& u6 b3 W! |( x6 f4 ?3 Y$ ^
  string attributeName("");
* A* O* [; H9 N6 i  string attributeValue("");
8 Z7 `" f4 [; e) l  vector<string> stringArray;. I/ [- c% `9 h' Z% |7 s
  stringArray.clear();& r  d* B, a+ H4 v' a9 I" O) `" }
  //get the attribute value 4 L6 ~- a% d# x# H
  // get the attribute name 4 B  b1 o& V/ B% n, F# @1 t) l* [
3 G0 J5 t- b* R7 I+ F
  attributeName = GetAttributeName_FromType(typeT);
! c; u( ]# K) [, b% ]- l, t* I: ^  if (isStringEmpty(attributeName))
$ \9 s! X1 h  J; s3 f) A  j  {
) R6 ^2 ~* D+ r) ~8 g    return getObjects;$ W' ], R0 c+ {, H, Z
  }
; m& W+ h% V& [* n  //get the attribute value ( I$ N. p7 L* I  [" l- L9 Z
  bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
: z  g; ]! X$ |, K5 B  if (!hasAtt)3 [0 x  S; G/ a1 G
  {
& x3 X; {0 {( n- f+ @    return getObjects;
! U2 _; B2 O% T+ A1 O9 {: W9 W  }& h2 f2 Q3 |5 v( B; }8 Y! N+ Q3 l

$ ~% S/ v, J, P! g- u  attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
: t+ F' y' ^2 t' C% y  
% v1 D, F3 Z, N1 k7 f, b8 e  if (isStringEmpty(attributeValue))
* h2 a) L0 Y1 \  {+ g* A" B, `4 G. @* w5 ?3 f) {) f
    return getObjects;
- i. \8 C. j* P9 i5 V$ y  }4 q! I# \7 |6 `0 k* U( a+ \4 ?
- \: k) U* e; R# s; h) p) b3 X

) s* S& p8 ~& l6 \6 d- v; b  //get the key based on the split value
& K) \  s2 B& }/ g: `9 S  String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
; |9 ^# C+ G! A  for (string item : stringArray)
5 q9 f7 N* [9 J) x& y  {" q( Q. I, O( D1 b! Q
    //read the string to get the object ! D, ?- s3 `, `6 Y6 N2 {' E! z
     TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));$ B  B( R: t0 Z) U5 J% Z" t
     
- a+ \9 }. P% F/ K; q; x     if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)) X. M  H; C* u
     {% z% g- s" c* g1 y! R; o% |
       getObjects.push_back(tempObject);
/ y: Y! T4 l, A! |. n     }
# C9 Y% f# C! h& t& ]! H- {  }# O4 |6 m: O9 Y9 R, q, _* M3 G

, P: N7 T" I9 g3 J  return getObjects;& {8 y7 j2 f7 z
}[/mw_shl_code]
" T; m; I# U1 d9 C- d8 L. T0 z
" ~9 a. |& U; U8 R, {, i0 v2 j! c1 Q5 c" l9 L

4 t2 c& U* ?- t$ j- a; ]  a5 L
更多实例视频和专辑课程陆续分享!
8 J) `% B$ w9 I3 \* h; @5 `# {  B/ d3 a9 x5 v& P) l: a
欢迎转载学习!
1 b  D: D4 G- t
更多精彩内容请关注PLM之家
http://www.plmhome.com

, r3 @" h0 W. e- F1 Q3 Q7 z

7 f1 Q  u) j) r: r9 i' Y) @+ G& B) g0 m

# V! S% L- ^2 N+ |  A
END
PLM之家plmhome
9 s8 F" J8 d  M, q
                               
登录/注册后可看大图
, h/ `  O& c' x; A0 P
▲长按二维码“识别”关注
# v7 ?- o3 H1 _

! h& D# P* Y: c* X; F
~~~~往期经典文章链接~~~~

! d( c- B+ I" s+ O9 K
NX表达式视频
! Z+ }4 w+ w+ C) o9 f

  k; ?2 S" N& o6 P2 ~
NX冲压分析可成形一步式视频

) w) B  I& L3 @2 v' I
冲压模具分析工具 3 全部展开实例
, W# b% @& Z3 o2 i( A' `9 ?1 a

' ^5 ^4 n/ u) _" {/ e. U
NX产品模板工作室PTS视频
1 产品模版工作室概述
! a- [4 G( ?" D  z* E2 c
2 产品模版工作室界面% A0 @) x7 e% u* L* o! X
3 创建一个基本的模版
. _, ^" q! F( f  A- k8 o. V
4 PTS高级模版技巧
) T+ a* W; Y" y; j* Q; @' N' Z$ }
5 PTS添加需求HD3D- Y% t$ F5 o/ b
6 添加装配模版
/ K5 N8 I# f; [) V/ H
NX高精可视化HD3D视频
1 _  F$ }) {" t6 m' r1 Q
1. PLM之家NX全息3D培训-HD3D概述  X( Z0 D7 E" h2 S% ?- R- J, ~' `9 o
2. PLM之家NX全息3D培训-HD3D基本使用
( ]  i; i2 W4 r) q9 `- ~: X0 G% r

# _% j  x5 M' B- ?& ?8 z
NX模型检查一致性check-mate视频

( g! V) {: ^+ A
9 ?( C+ A( R  J4 j2 C: `
NX入门视频实例教程(8 小时)

' s: r0 J/ H" C5 W* M% `
NX机管道布置培训课程(10小时)
1 管道模块简介
2 创建编辑路径
3 审核部件
/ S% p5 ]1 ~( ^$ e2 N
4 添加部件到管道系统
5 添加型材
6 HVAC管道功能
7 管理管道布置装配
8 管理管道部件选择
9 创建管道通路
10 创建管线布置逻辑图
11 创建标准库
NX二次开发入门经典教程(35小时)

. o8 `* \) m: _, s  p其他重点咨询

6 O+ Z5 Z+ x- r4 k  u3 a. [
工业互联网咨询:
工业软件APP:
数字化转型:
工业互联网技术栈:
( s' M$ v7 J8 _" h  ?8 A* @
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了