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 2456 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]
0 Q9 q1 N- W1 e$ U1 U: U// tag --> Object
5 `) p2 V9 \* ^& ~+ T//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法/ Y4 k8 O8 w) x- |. `5 i& D1 g. _
TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))3 P, q4 d' D! h: [5 N" I
// Object --> Tag
  q" d* {! C% \* t4 @1 V//直接通过对象的Tag()方法获取
/ ~  F: ~2 }  z/ K+ l  ?, Ttag_t getObjectTag = getObject ->Tag();
; x8 l* I5 Q1 q' z+ f1 @3 w% [//tag-->handle
0 K/ N  [; f+ K8 Tchar * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());2 L! [4 D9 z6 q& M) j: t' d1 ^
// handle --> tag # z$ t+ }! j9 a; ?3 O& ^
// ... 往后看....6 h  q) i& i! }  ?" M5 `/ [& ^
[/mw_shl_code]
4 [4 B8 N1 w! p4 U4 v# v: E6 O
GetHandle: RMHPressureSymbol.prt R0000068a00000028
GetTag: 52583

% |+ A4 W6 E& w
这个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]
% z  k- q, f: ~: ^$ R& J8 a) Q/ a# ]8 Z' F
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)
! f" {: u# r4 y{
! |8 @' [1 k4 f. }2 o0 L( W4 ]  stringstream ss;
- }- e- w; }! L  ss.clear();$ q: Q( T8 X9 l- l
  unsigned int( ~0 h/ U" {: ]3 b$ q$ `) h- G
    ID,, \* p, P, ]2 x, X  |% U& {" c1 A. i1 A6 s
    version;
5 Z: v2 z! f0 i  char3 r; Z* K! M3 a2 r
    * file_data,
0 |, M1 {7 U7 _    * handle,, S7 m% W- k" ?
    msg[30];
5 V1 l9 d4 I/ g' o: N  if (objectTag)4 ]- M+ _; A; ?9 U
  {+ g) b% r  k" \- t) p
    handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());0 G' X0 S3 j7 Y' l
    Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
" V! E1 V/ |6 x& P) \+ o1 Z    UF_TAG_decompose_handle(handle, &file_data, &ID, &version);  h/ c/ r. ~& p, D0 u+ N6 ~- b
    Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);1 J0 F* Y9 r$ O$ z# s* l! J
    ss << file_data << "_"<< ID <<"_" << version;
4 F7 W5 \  D& s' K; f+ H    UF_free(handle);+ z+ m3 R9 [8 o8 L: f6 L/ Y
    UF_free(file_data);
/ E( d9 o9 S. i# W  }. r" J' S9 x3 c& S* {0 \5 j/ b: W

9 ?6 f" C( P3 {  return ss.str();, ~  d! x! E8 C: z* l" u  G; k
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。

2 N# S' P) H  L) M: u9 L
////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用//////
////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的/////
[mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)  h7 q1 T  {1 I' a+ u! Y
{
+ x- H& l  O; z  vector<TaggedObject*> getObjects;
4 f# G1 t0 L8 q# b5 b2 @& s  getObjects.clear();9 E7 f$ ^* V+ l6 x: t( p& c
2 [, S2 \) ]0 B
  string attributeName("");
+ @2 y& b' I+ v. J) }" ?2 ^# Z  string attributeValue("");
/ P2 |) T* A! |( L2 T  vector<string> stringArray;
$ `( G& J9 d! |/ a  stringArray.clear();( C% ~( ?9 }9 R: D
  //get the attribute value 4 P$ n/ T: s# a
  // get the attribute name + {4 |2 Q4 n+ L' j! q9 i
( y7 ]4 [/ n1 }; i5 ~9 _
  attributeName = GetAttributeName_FromType(typeT);9 G2 E7 b  Q# x" s$ o) N# Q7 j
  if (isStringEmpty(attributeName))7 _: N4 }. g  `1 L6 t- X
  {) ~9 @$ |' I" ^+ A* \
    return getObjects;
0 g* F: t/ O+ ~! O  C9 W# E  }- ^6 @6 L1 ]6 e) D4 n. o5 X0 w
  //get the attribute value ( r, k6 p2 H! d: L" p# Z) V! ?
  bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);; n" m: {' ^0 g% i. s1 Y! @
  if (!hasAtt)9 E; Q$ V5 X; g2 m% |8 ^
  {' z. e) n; O4 r+ m0 a5 b
    return getObjects;) `9 ?% }  g! M" x' O
  }5 c- d9 n4 [3 p. V) w1 E( h

3 f/ o  d  S# l/ [- R7 k' k  attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();
) O: O/ d& @+ e7 u9 T& s1 |; E  
/ \+ u# P- q! h1 C" t3 }6 I  if (isStringEmpty(attributeValue))' ]( A' K4 A$ J. u8 r2 U8 L" N
  {6 O& _- ]9 p/ L: L# ]; W3 E
    return getObjects;
2 O: Z% M% N3 [( [; l: r  }
9 w' w( k& h) r
) C) j' `5 A$ H
( c, e7 P# ?5 Y/ A  //get the key based on the split value
6 V4 e7 Z! N+ c, R5 o  String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);
! G0 d4 d  i( E8 Q; {1 h  for (string item : stringArray)
% j' L, b; u2 |3 `% d; X) w' M+ r; G  {
/ F3 s8 s) I! [& O* z# b    //read the string to get the object , E0 X: ~% @9 g- G; ^$ R: ?( l( T
     TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));
% d. X4 m; X0 T+ U4 N/ Q     
  f2 R) x2 [' Y     if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)+ r* d, ?7 B6 h0 @. Z& \4 H
     {
, ^4 n+ R! m$ j/ ?       getObjects.push_back(tempObject);" A6 c% j' X, ~  s
     }# m6 G4 j8 z  A1 W7 S
  }
- o5 B' s9 h, s2 q1 f2 @; _9 Z/ h0 U1 F# r. l$ ^
  return getObjects;7 q& [4 V8 V" ]$ g$ J+ X
}[/mw_shl_code]
* F8 O7 J( w+ o( t( r7 R$ R
. Y; Y) C, R! Y& X4 ~8 v: Y9 e8 N& A2 c; I8 R% O6 u/ C4 G6 v
8 @* ]2 H7 B. i1 [0 e- y) t$ [
更多实例视频和专辑课程陆续分享!
5 p  y5 Z! Z2 @9 [' b. e3 P9 B; c  q0 h* D; y
欢迎转载学习!
4 x+ e5 d) }7 a' Z# [0 G) E
更多精彩内容请关注PLM之家
http://www.plmhome.com
4 I. [3 u% m6 _( Q: a2 W2 s2 J+ D+ Z


+ \4 }' [4 M% P6 S, L$ w4 q. L! S' f6 z$ k& O: M' J
6 W0 v5 K9 b2 h7 X$ }! B2 A+ E
END
PLM之家plmhome

2 K# _& {: {( ]- o                               
登录/注册后可看大图
! X" \1 V( T7 e2 @& j" [; x: F, N
▲长按二维码“识别”关注

4 A& e6 E/ y: o3 F. O' A; `8 b2 L  l2 _9 ~: q
~~~~往期经典文章链接~~~~
! j1 v& K& i7 Q5 i$ B6 u# {
NX表达式视频

0 B7 ?  Q. p4 X$ F
PLM之家表达式专题视频-1 表达式概述
! |' b+ m( D5 p8 v$ V3 u( M' a  h

" c" `$ W: S. q5 \
NX冲压分析可成形一步式视频
( \2 q! H/ n: t/ n( |: s! ^4 f5 Y
' U1 g* u4 B  O/ k$ j5 a9 w
NX产品模板工作室PTS视频
1 产品模版工作室概述
3 K8 _" U7 p3 t! ^4 J
2 产品模版工作室界面* L; E# X4 V8 f0 E$ L* g6 O0 u) c' o/ f9 U) \
3 创建一个基本的模版9 Z& K1 t9 [8 m9 D$ ^& i2 i
4 PTS高级模版技巧9 t* N$ h: R' [; l7 r  D3 y3 {
5 PTS添加需求HD3D2 Y& w2 z; b: S  j9 o( z
6 添加装配模版& h3 t" h* [9 S9 L, ]& o% C
NX高精可视化HD3D视频

! m" I4 j# x$ G; R: n- o
1. PLM之家NX全息3D培训-HD3D概述4 z. s1 L/ Q6 o& y1 a0 Q1 L
3. PLM之家NX全息3D培训-HD3D客户化展示
& |9 d4 x) F- C( y% G! N0 e. r( J
# w$ g5 [, E: l% [, _
NX模型检查一致性check-mate视频

- Z! Q/ D# \. D4 h; ]! _8 U
* P! Z2 q" n( J) w& ^+ o
NX入门视频实例教程(8 小时)

: s+ m" w* Z- D
NX机管道布置培训课程(10小时)
1 管道模块简介
2 创建编辑路径
3 审核部件
$ j7 E# I; \8 d1 k. a
4 添加部件到管道系统
5 添加型材
6 HVAC管道功能
7 管理管道布置装配
8 管理管道部件选择
9 创建管道通路
10 创建管线布置逻辑图
11 创建标准库
NX二次开发入门经典教程(35小时)
! @6 S8 O2 R+ a1 m1 p% h
其他重点咨询
( a# |9 u+ t3 v2 r
工业互联网咨询:
工业软件APP:
数字化转型:
工业互联网技术栈:

5 c3 F; w& Y9 Y) q& Z% z/ 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二次开发专题模块培训报名开始啦

    我知道了