请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 a( J) B6 I: S+ _; b0 J( ^! JNX二次开发源码分享:判断选择的面是否相切
: Z, R# ^* ~5 W c! e" t3 x! A6 y& T Y- Q
7 u; O+ n1 {: P) n
6 l& U0 _+ E4 D5 [* A 通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。0 o& h- R" t8 o: @9 C
& a2 S+ y! x( F' ~; A; q% D
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter
6 }/ W1 v3 V0 k4 G/ }9 ~ 选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。: j2 w" u" W& A
譬如: 当您选择边对象时候,NX会提供边的相关选择方式 ' K3 u( ]& K5 C; k
当您选择曲面时候,NX会提供曲面的相关选择方式
, X7 w- C7 u- V' f: W2 [, v. Z1 n5 p2 A, F( A! Q$ a3 S' G0 _
" t1 Z# |9 Y* P- H: t0 a% E
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
: e; G. N( f2 Z1 Q, A( i) T, W (3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。) h* C; t& G# P6 {: Y/ @2 l( d
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。7 _( Y& E8 p) W7 Z
! I3 I) c" U" F, ~最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香! - C% U* L- [4 D, O7 u
bool 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; } } } 1 f6 N6 \* O8 V) y# P3 z; A2 ?* w
} UF_terminate(); return isTangent; } ' N- w. A. ] J. q l g( p3 c
n( E5 A5 q$ B) U
' c) X6 \" C" j7 I& n4 e4 g5 ^) \0 p: y
7 \5 M& b/ h6 B8 a* z( P! F- yEND PLM之家plmhome 6 _) |# z3 }/ _% z
▲长按二维码“识别”关注
+ C( m2 ~8 [1 b- X3 Y4 D k& P. d1 u9 ]8 F4 }" [( c
[mw_shl_code=cpp,true]
1 V% v. y# ]4 a& ^* K2 s# t+ _6 w* ?5 N' [. }/ a% n: p3 S
; B& u3 E/ p* s' Ibool CheckDTS::isTangentFaces(Face *face1 , Face *face2)* b+ L7 e }- L7 z) ]) |# c$ w' ^
{
# p" B8 r, |" \5 i- z( e+ E7 Q# K4 h5 f
bool isTangent = false;
) }& x6 i/ S" R) m6 w7 m, ^. r int count = 0;) E! ]7 m) P C5 r, }. W# l" x
std::vector<Face *> boundaryFaces1(0);4 [ P+ g" d: j; Z" A
FaceTangentRule *faceTangentRule1;
6 ~( a8 I9 w' ^9 `* T0 N2 a. _. X faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
3 a3 S' ]" }/ N( e% m ScCollector *scCollector1;; {8 N) K( W( S& _3 j
scCollector1 = workPart->ScCollectors()->CreateCollector();' ~% b3 I% g' N G+ Z3 I
std::vector<SelectionIntentRule *> rules1(1);
0 ~: G5 r3 J' ?+ U rules1[0] = faceTangentRule1;
$ C3 y5 Y8 e3 b" t. P) ~ scCollector1->ReplaceRules(rules1, false);- U9 w g4 a) ]: V2 j% A
std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();# l. u" d# P) ]' s. {
delete faceTangentRule1;
7 ?% m# z4 A( V ^) K0 _. K - {7 d& \# d: W) c
if (theFaces.empty()). n; N, ]0 e6 G3 q5 n* l
{
+ O' e, T" L4 t( u isTangent = false;! z9 r# K. X; v& x0 i7 x
}
, n M) J( M, B$ s else
9 W" [; Q s6 B; T: c3 q" l {
% n9 |# Z# v, ?6 X6 ^# }5 V( ] for (int i =0 ; i < theFaces.size();i++)" U% K; S2 y- U
{, x4 p1 `1 h* c# _1 k
if (face2 == theFaces.at(i))
0 h' R0 N, m, L$ V: A2 S, I {" d0 m- v3 K0 X R& s: ]
isTangent = true;- o7 i( i3 C8 a
break;
; ] X5 M8 ?5 F4 {/ h } e- _- F% l+ G" U- `8 {
}
; ], r( t) m& m2 Y' ]$ s Y5 ^! k2 s1 s# ~/ O- o
}
/ H+ g/ n5 b7 w c& z 7 t8 a: V+ [/ m* |0 e, t
return isTangent;
! e& l2 y; n( m1 ^) n/ z6 V; F: ?: l- r
}[/mw_shl_code]
) d; e, Y, L1 |$ i
! W3 `) w$ x& j/ R# d! } |