请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Handle 返回对象标记的持久句柄,Tag只是当前文件保存的一个临时整型数值,TaggedObject对应的是对象指针。三者转换关系如下: 这里假定变量: TaggedObject * getObject 为 对象指针; getObjectTag为Tag类型, handle为handle类型, 直接通过代码看:这里选择了一个体,打印下结果如下: [mw_shl_code=cpp,true]( y. w8 c6 f$ M! I3 t9 C
// tag --> Object* E, i; v0 ~1 R7 w* x
//这里通过 getObjectTag 转换为 TaggedObject * 使用NXObjectManager::Get()这个静态方法
5 @# h }1 P& \# N5 X# ]TaggedObject * getObject = dynamic_cast<TaggedObject*>(NXObjectManager::Get(getObjectTag))$ C/ v3 ^! p$ i$ h) e
// Object --> Tag+ m8 p$ c* t8 J# {5 r/ s. ?. M
//直接通过对象的Tag()方法获取
. Y/ E2 b, ?, |1 w0 [* u5 mtag_t getObjectTag = getObject ->Tag();
0 }$ |8 |7 z# |2 t# y6 r//tag-->handle
" A% c% F1 S% E3 N& |char * handle = UF_TAG_ask_handle_of_tag(getObject ->Tag());) z( L9 z' Q- D, U9 t9 u6 r9 j
// handle --> tag 0 A* V8 _" ]9 e3 j) z8 {0 G$ E
// ... 往后看....# m9 I2 N, F! G4 U- |( o8 G6 _
[/mw_shl_code]
8 K' h9 A6 ^! [& |( A$ sGetHandle: RMHPressureSymbol.prt R0000068a00000028 GetTag: 52583 / H6 b. J# ]2 t8 S
这个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]; |+ u# g9 m- e
3 P0 q% B6 H7 d3 n5 V+ }. `/ Y' bstd::string CIDS_BaseObject::GetObjectHandleStr_FromTag(TaggedObject* objectTag)$ A; E) x4 _" r" L6 \5 Q1 F6 G
{
' H( F/ c3 M' J7 t9 v9 t, t stringstream ss;
% o6 o( `$ s4 ? s( e ss.clear();
) b, I, }- ]6 ?3 K3 t, s unsigned int
1 D0 b& f6 _5 } ID,% `. S) [4 _7 }( M
version;9 m7 j+ m( v K5 C" ~4 G
char
) w9 P$ H5 V7 J9 v * file_data,. e7 z$ J( `) N$ @9 g
* handle,
( z2 { _& V& Q) N, t8 S- O2 Y msg[30];
3 r7 E" n8 ?2 B6 x4 J- _, L2 E. @ if (objectTag)
' ?( x1 x j2 D4 [/ V- J( _# U {
% j6 }& Q0 |( X/ d* Y" C# b handle = UF_TAG_ask_handle_of_tag(objectTag->Tag());
. t# e! H" k% B/ y Echo("GetHandle:%s\nGetTag: %d", handle, objectTag->Tag());
# S" I0 c. }9 i3 R: v UF_TAG_decompose_handle(handle, &file_data, &ID, &version);6 N# q1 v4 F- J( s9 i0 ^# v" ^9 E/ e
Echo("...decompose...\nhandle:%s\nfile_data:%s\nID:%d\nversion:%d", handle, file_data,ID,version);. F5 D% G8 [: r# T: C1 Z
ss << file_data << "_"<< ID <<"_" << version;* M1 R' ]% G* v! I' W
UF_free(handle);9 P3 }" S1 @0 t$ W# Y7 t
UF_free(file_data);
" }' {; n, D+ s }
3 l! [: i) ]* ^, @4 h4 C( U$ P/ A+ J/ _! ^% W
return ss.str();
- K/ e5 f, _. s0 F2 m5 g}[/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 l( \: b" B p( a9 D I////// 具体用法如下,通常会将这个值存储再part属性中,那么就可以直接进行调用////// ////// 在选择的相关对象对话框弹出来之前,就可以直接去读取属性设置这个结果,从而达到记忆的目的///// [mw_shl_code=cpp,true]vector<TaggedObject*> CIDS_BaseObject::ReadObjectsdataFrom_AttributePersistentHandleID(Part *workPart,CastingSystem_ComponentsType typeT)7 H3 S9 l. |1 [+ L; O
{1 \# c) [. J' D5 A! t
vector<TaggedObject*> getObjects;
7 a2 I+ Z; a- Q) Z- `4 N. R8 N! T+ C getObjects.clear();4 q3 t2 N+ C3 E. X* B& c
2 I! |. W" C( R* c3 C
string attributeName("");
3 ?2 U( X' G5 ~! d5 ?9 V string attributeValue("");
3 J( p1 A; l' i6 \* R' [" ^. E vector<string> stringArray;
9 v' s$ f1 v f( P; w. V( ?/ h( M stringArray.clear();
! A5 f- I* Z# g* r/ Z. g6 z/ w //get the attribute value
* B% a/ n. R" u5 C. z // get the attribute name & G( |& z4 U2 G$ ?8 `
7 o+ x) ]1 o% I. m attributeName = GetAttributeName_FromType(typeT);6 t6 O/ }. m* N H3 E
if (isStringEmpty(attributeName)) U( M* k9 U6 X
{$ |9 e% H% w/ S+ ~
return getObjects;
, c1 G! B8 p* p, ?! q, g! h5 h9 r% Q+ N }; q* T `8 J: _6 k' q
//get the attribute value
2 C$ n& ]+ }/ e' `! f' r' H, K bool hasAtt = workPart->HasUserAttribute(attributeName.c_str(), NXObject::AttributeTypeString, -1);2 ?, b" w3 n4 B; K1 s/ k
if (!hasAtt)
! H& U. U% H2 B {' u, O) X* M9 m0 _
return getObjects;
1 c7 ?/ M+ l3 V& e6 n6 \/ F+ s }
. j+ v' p# y0 y- n" z
1 s: T3 c' X4 m$ L1 Y" B3 c attributeValue = workPart->GetUserAttributeAsString(attributeName.c_str(), NXObject::AttributeTypeString, -1).GetText();: e4 D$ m/ d8 x7 u# F6 V' f
. V' u5 r9 W& r8 u if (isStringEmpty(attributeValue))- w8 U, K6 @& q9 J1 E" c
{$ ~7 i0 ?) B* X4 b2 c# q
return getObjects;3 o1 z2 c Z: h8 C. W) l0 }
}
9 j9 j& Q4 Y9 Y9 ?6 c' T3 x( L5 _* v6 a B( N
, ` ]( e: M: T, h //get the key based on the split value 4 ^/ E5 ]# f* {
String_SplitString(attributeValue, stringArray, DELIMITER_SPLISH);$ s! r; i0 Y$ m) N8 ]( Y
for (string item : stringArray)
0 ]4 l8 v3 z/ @- N$ {# L5 W6 ^! t {
- H7 R! t4 `1 f7 F' T //read the string to get the object
/ E0 L1 N& B( ?0 H9 c- R1 i TaggedObject *tempObject = GetObject_FromStoredFileID(atoi(item.c_str()));9 F8 N) R9 x( ]4 f/ r4 u' s |) |- _
7 p S! @3 E& H1 q
if (tempObject !=NULL && UF_OBJ_ask_status(tempObject->Tag()) == UF_OBJ_ALIVE)5 h, }3 W; |" i0 P; i
{! P/ i3 b1 e* G6 {5 ?$ q
getObjects.push_back(tempObject);; b/ q1 a0 t5 C: c$ `: L
}. y6 ~1 n$ t& T8 q+ c! S
}: @, l( \6 [& i% Q- f @& B4 o
4 v. `6 J4 x8 j$ D, n
return getObjects;0 h! F1 b3 @ j( P6 D
}[/mw_shl_code]
6 y3 p0 s4 T+ N! m6 P9 L, E( y
/ O3 _) f: q. F/ G7 v! J3 }( {7 u: e7 y( J* G3 A2 \
- k, T5 [5 W1 v4 m
更多实例视频和专辑课程陆续分享!* d2 J0 [2 Z$ Y4 e1 \; `+ H! S
$ z; X |7 ^/ c3 Y9 w" P
欢迎转载学习! - J( U6 K7 X, d& M
http://www.plmhome.com P! u0 B5 R* A' p9 U0 X
$ F4 g `* G5 x' d5 X
1 w/ e* z5 p) e( ]; Y
& p4 f1 W$ |; F# h z3 W+ ]END PLM之家plmhome . T4 `# l# v* p$ v4 {/ W0 q
▲长按二维码“识别”关注
# u2 s" U& h, u- A7 j u' F' ]( p# z
~~~~往期经典文章链接~~~~ 4 @3 q5 D& l& b. d! Y# c6 x2 F$ }
NX表达式视频 4 W; l- C, _* Y/ p& X# {) k* _
# f; p- ~; j. r' L0 n# h Z
NX冲压分析可成形一步式视频
3 B2 E6 t( U+ Z4 r/ E$ ?/ u$ L, v5 n5 L+ [8 @
NX产品模板工作室PTS视频 NX高精可视化HD3D视频
4 z+ F2 x0 d- }
# l1 H; F& `. o9 \# b. K- w- gNX模型检查一致性check-mate视频 2 o' J; W- E# A6 W* c0 j
- i# H8 D% ~1 L5 l: gNX入门视频实例教程(8 小时) , F8 e4 [! G" n
NX机管道布置培训课程(10小时) | 1 管道模块简介 | | | 2 创建编辑路径 | | | 3 审核部件 | |
. `7 Z: V$ D3 V( } | 4 添加部件到管道系统 | | | 5 添加型材 | | | 6 HVAC管道功能 | | | 7 管理管道布置装配 | | | 8 管理管道部件选择 | | | 9 创建管道通路 | | | 10 创建管线布置逻辑图 | | | 11 创建标准库 | | |
7 K% N3 ?9 l6 O0 W" ~4 \0 n/ u其他重点咨询
' N6 q% W2 N$ C/ n工业互联网咨询: 工业软件APP: 数字化转型: 工业互联网技术栈:
1 Z# a, v2 k |0 U/ u3 A/ q |