请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]8 z6 m/ r- }7 w; o1 w) H' w
// tag --> Object- b9 y% P) R5 k r" [
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
# r( z7 R8 B( F- ITaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))
1 j6 u# W& |. u4 w6 g& _// Object --> Tag
* x8 S8 B( D* I5 f7 S//直接通过对象的Tag()方法获取
k% r& n. ^8 {9 T3 w/ }tag_t getObjectTag = getObject ->Tag();
. G' z% ^% G% u0 Y3 }: \//tag-->handle
/ F: E8 Y& c$ r6 m6 s+ @char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());6 k: |% r! M! M% y
// handle --> tag 6 U; _# N, y) J% K7 e, T# ?3 o/ B
// ... 往后看....8 t q$ c3 I( Y' q2 y) l. e8 I
[/mw_shl_code]& q6 N! c+ v6 ~+ `' j, g
GetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583
7 ?2 Z6 B6 Y4 M% ]& L这个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]7 S& B' R( ]: k! ^$ w6 c& i( A+ S
8 G0 S% Z/ l% ?. ~0 G3 T8 L
std::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)$ g" v- s- n6 u2 ]
{
7 e' c' T$ t( y* Y$ Y6 z stringstream ss;
" C9 B7 K, F6 [: I3 j) k; ~ ss.clear();
! T+ E$ H' i' S2 W1 Q unsigned int
& M3 ^5 X% q+ l3 x; ~" S0 E% i ID,
4 C" H# C, }- z2 \) i7 R1 R4 O version;
: t" E+ Z9 q6 O* {( d5 B char) d. C) i, p4 h( t2 h' B$ Q
* file_data,% m/ J9 u9 }- G0 d! F7 E
* handle,
1 W8 }8 K# b3 h% I msg[30];) V3 s. |/ W* ^1 I/ W2 n4 v
if (objectTag)
* V' S$ L# l: ~# _ {
1 Y3 b t9 T* r! _% f handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
( e1 x5 Z7 [: b8 ?8 d- ? Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
3 Q! f [: S! f UF_TAG_decompose_handle(handle, &file_data, &ID, &version);
) c# @1 u" O& A/ ]/ H, X8 G Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);
4 Q# J* Y# R$ a) s4 T* `. {3 h' F ss << file_data << "_"<< ID <<"_" << version;
L: n4 t- H( Z UF_free(handle);
9 W( r: W- q, t2 d, T UF_free(file_data);2 V9 E+ _3 E" e1 X$ P# h
}
$ f9 Q/ e1 ~& c% ~( @* S
0 ]( z6 ?/ d8 x1 J return ss.str();2 Y. @7 V: r) U) U
}[/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(输入的组合字符串) 也可以进行查找,显然这种方法最为简单。
8 L, ~0 Z! x! h- i+ C9 R////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)( Z9 o& w/ F- M; b) @4 ^9 D
{4 ]- _% ^$ t3 O
vector<TaggedObject*> getObjects;
! p) l H1 E5 ~2 G: O, w getObjects.clear();
5 s. `- n& W- n) d5 u6 d5 g/ ~8 j p# v: q4 B) ?+ I
string attributeName("");7 ~! \% `5 d' t7 B0 Z) A
string attributeValue("");; `% O; A6 x8 p" Z
vector<string> stringArray;
$ v3 C% m! D7 v% ~. f' E stringArray.clear();: f6 k' r8 I3 Q( B* }
//get the attribute value 1 `( J1 G- d6 v
// get the attribute name
: k2 f2 f7 ]( R i3 T: i' i* y' _ Q/ l! B$ S) i5 f0 `& E. Z1 K! z- Y
attributeName = GetAttributeName_FromType(typeT);1 z) f9 f* h3 I
if (isStringEmpty(attributeName))
4 @, |$ r5 T+ K% t2 L1 D {
/ b) r5 J7 b- k. ^ return getObjects;
) p5 v" J* }4 r; z }
& c k3 }1 k4 ]1 ^( D0 G% n4 L //get the attribute value + P' C) d0 j6 T! j# I1 v8 Y& v
bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);
9 E9 ?4 `+ l/ m) [! o, r) J if (!hasAtt)$ S) F8 q; B4 E6 Y
{8 l0 s9 t8 {6 g5 Z T6 S; \+ C' @
return getObjects;
" c/ T3 d R( @. z V }6 |( W2 q% p3 V5 z! T/ `7 ]/ w
- p# {. e$ M; H1 @" V
attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();( a4 }) i# k! {" V
- S+ A% c* z8 M. h! S if (isStringEmpty(attributeValue))# V2 @9 `7 J! A8 e% p
{
# F/ C" @) T0 x, G return getObjects;! e4 h0 H- S% n
}
2 e6 [6 M% Q5 @6 x! P, a
; |3 W; P. g& i& L7 M6 Z l' a
$ W; d9 {! h3 ]9 f* \9 {0 x& O! F //get the key based on the split value
$ R0 ~) }, C$ C0 T String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);0 l9 O( k, }1 G4 R
for (string item : stringArray)
! E) x& K p, g, {% M2 C% h. l3 n, ]8 { {
) {) e, O4 ~! ^5 E' w# } //read the string to get the object # b, t2 p/ M3 q+ K1 r4 e( G
TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));8 _" P, }$ S, D& n4 t
$ o; n+ ^( t( \0 F) r. Q if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)% [; M- c# M- L/ k: r
{
6 U1 h3 c w/ b/ _ O0 [ getObjects.push_back(tempObject);: F5 v7 i; Q l/ q& d' \7 O, M
}
4 j; F$ {! I- W/ n }. P& o/ Y* S) `5 j! ]6 r
, T# z+ `5 K5 j( Z0 E& E4 f return getObjects;' f# v- ]( W& e( X/ b3 d
}[/mw_shl_code]- X0 k" w5 y J7 p( f+ ?8 p9 g
; ^! O& L2 W: s F2 H" F; A! z8 ]
6 a% D4 x: v) Z/ c8 K
( ~. v( {. K- m6 U) Z更多实例视频和专辑课程陆续分享!. _+ F1 t0 Y5 G6 p1 O$ m
/ V, l0 [* U- \4 U 欢迎转载学习! + `! V- o6 J) {/ N2 j' v
http://www.plmhome.com
; c$ ?& D2 B! q2 W4 i$ ?2 f
1 S- a1 u" i' _8 E6 h% ]% z, z5 Y. f! o% _+ `0 I
& y, m4 u" Y. [) s8 ?
END PLM之家plmhome
2 {' E/ J# b, i) F1 E' T7 k▲长按二维码“识别”关注
Z( L0 x. u- M% {/ t0 c$ F2 E- _
~~~~往期经典文章链接~~~~ - F5 h1 `8 ~2 J9 `
NX表达式视频
1 o" X* \* `( o8 j: x" d# Z' L% X2 g% N+ J
NX冲压分析可成形一步式视频 6 C0 X: q7 d q% X
- Y) ?& ~! _: [& o# A, a# p! n% |NX产品模板工作室PTS视频 NX高精可视化HD3D视频
, q, j' y" c4 `1 W7 z6 p2 E" N( a6 W( k8 ?8 B1 y8 F
NX模型检查一致性check-mate视频 * N; _3 c" X- A& L" ^ L" e
, \6 ^% W) z R9 K6 }9 T7 l" M, q
NX入门视频实例教程(8 小时)
' i' P4 l+ Q2 t% V6 `7 P& f* ~& TNX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
4 n! V8 P: [, Z# K/ j S# p | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | | - ~, G. |7 e4 g# o& }
其他重点咨询 ; Y( S; Y; t' b; V. T1 s# G
工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈: / J9 s/ V$ v. W$ d& e
|