请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
/ H; d. r; e6 b) v& _6 i8 f, e6 y" `NX二次开发源码分享:判断选择的面是否相切2 ]3 v. A8 Z" r; s( M, t* M: M) I
1 N# z* z) i& t$ m, X, a# [: p
c0 u5 e( r; T
+ ]5 s) _6 F. L1 o/ i 通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
3 ?* R1 K& G9 o- P
- k3 s) f- N/ C3 p2 T* v& d2 C1 c接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter
j' n$ O$ J) t; C. ]$ `( I1 o. S 选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。
. s+ p+ Z6 O) ]( i' T 譬如: 当您选择曲线类型时候,NX会提供曲线相关选择
" e# J' D) g1 H7 @
当您选择边对象时候,NX会提供边的相关选择方式 " u C/ ~) v. l2 r5 j6 v
当您选择曲面时候,NX会提供曲面的相关选择方式
, N$ P- F* ~- I9 z: G1 [; B; [8 n; c9 y
W& [- i! k2 O* x) Y( C9 e(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮( u( r8 y# N$ n6 I6 a3 l
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
7 }2 ^* ~/ \7 Q& X$ h& b+ p# w- o (4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
, M+ e L( y# I4 s; Q" L
7 m) S, z* E) R9 ^8 W最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
) f3 M) s" P) s- X, l7 `4 Y3 Tbool isTangentFaces(Face *face1 , Face *face2) { UF_initialize(); bool isTangent = false; int count = 0; int edgeCount = 0 ; std::vector<Face *> boundaryFaces1(0); FaceTangentRule *faceTangentRule1; ScCollector *scCollector1; std::vector<SelectionIntentRule *> rules1(1); uf_list_p_t sharedEdges = NULL; faceTangentRule1=workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1); scCollector1 = workPart->ScCollectors()->CreateCollector(); rules1[0] = faceTangentRule1; scCollector1->ReplaceRules(rules1, false); std::vector<TaggedObject *> theFaces = scCollector1->GetObjects(); delete faceTangentRule1; if (theFaces.empty()) { isTangent = false; } else { for (int i =0 ; i < theFaces.size();i++) { if (face2 == theFaces.at(i)) //checked face in the tangent faces list { UF_MODL_ask_shared_edges(face1->Tag(),face2->Tag(),&sharedEdges); if (sharedEdges != NULL) //confirm has shared edges { UF_MODL_delete_list(&sharedEdges); //free the memory isTangent = true; break; } } }
, Y, X& J: O: O; x0 R' f } UF_terminate(); return isTangent; } ; h0 e. M/ [- _/ g7 m- _
; y+ a& \! T: F$ E1 M
% V) t8 \$ ]# ~5 a6 t& v3 F: ^; S. Y& c0 N+ l" ?
END PLM之家plmhome 3 A4 \# x* P/ _" K5 N
▲长按二维码“识别”关注
. s O1 k2 u' N/ \, f! C$ q. ^
: A7 L4 n! D3 |, Z4 e, t8 T- j$ i[mw_shl_code=cpp,true]+ D) V `5 M& E% u' |# y# l
) R& Z1 C) m) M
2 ^8 v9 T& _' l7 P2 Z
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)2 w2 o$ K/ L* f" m* j) j- I
{
3 V* ?' z! z" D$ W2 j9 j& P$ F. X- }7 @$ Q
bool isTangent = false;
3 K/ T0 `; X Z2 t; y2 F int count = 0;
" x) @4 w7 L6 V. b9 E std::vector<Face *> boundaryFaces1(0);' V7 f% @5 f9 o! B9 `
FaceTangentRule *faceTangentRule1;$ v( h( b0 ^ m9 h4 ^1 P
faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
1 Z( E" r) N6 }" o& ?& p" @ ScCollector *scCollector1;7 f+ A1 ]. A# s4 O) I
scCollector1 = workPart->ScCollectors()->CreateCollector();
3 O* D4 z+ D* K+ q7 n0 ?' N" \ std::vector<SelectionIntentRule *> rules1(1);
y! i% L$ v+ c! o2 u rules1[0] = faceTangentRule1;
2 m! F g% O- F( l: ]/ w3 b2 G scCollector1->ReplaceRules(rules1, false);
" c, o# [0 k! j4 ?8 s% j; Q std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
; L6 Q3 h1 A" O9 i, r0 g7 x# k1 j! m delete faceTangentRule1;
4 G) J6 k# m* c; v / T) n0 b( |1 {/ y( |* S+ R
if (theFaces.empty())
' P. ^# H" W* I {
* J; r. |! _# m! S* b( Q% b5 g isTangent = false;4 ?; L4 M: U- ?. D4 b! s6 T; b
}$ F' x+ A% V9 W9 Y2 [3 {/ { l9 {/ u
else: {$ ]# T" q8 r: E. r5 m3 g( a
{4 V3 n% w4 K- h. Q. c2 u
for (int i =0 ; i < theFaces.size();i++)+ }1 f. l% g. }/ I1 X
{
8 a3 a: j! ?/ q) V& ?7 c+ f) ~ if (face2 == theFaces.at(i))$ d+ [8 T7 B# [8 C8 b: [ C
{. E% F8 @8 j! h7 p7 @. j6 _8 G1 e
isTangent = true;( U, T8 O9 k% `; m. Y' }
break;
: i+ m, f) G2 H, Z( _8 O }/ [3 P+ E: H$ b: y% f2 S# }
}3 s8 ?7 D; B, D+ e0 Y. L
0 t7 K+ _7 p/ x- K, U$ B4 C+ m }# d$ B8 v" w& p2 R* O
! R% @2 P8 d3 X: t/ _ s
return isTangent;
' W6 Z: o1 \) N3 r
8 M& t* A. M/ _}[/mw_shl_code]
( V, a4 V4 C$ }+ H- `$ `. I
& _6 ]0 d( I( S# u# A |