请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: h- b! Q- e+ z1 yNX二次开发源码分享:判断选择的面是否相切8 ~) h8 L& E o4 w! V( B, _! Q
! ]0 B; }& y) Y2 h
6 |8 b# U- c: t i8 J: o/ u( N# q- ^ O8 K% C
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。% ?0 n6 C% ~+ ]* W) i& `
* J i8 C' F% o7 x1 h/ {7 T接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter$ q& ` i/ z7 l( A2 [! s
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。) {9 V7 O! J; k; i! y+ A9 |
譬如: 当您选择边对象时候,NX会提供边的相关选择方式
H& @6 ^( A( L" Q6 t! t" z当您选择曲面时候,NX会提供曲面的相关选择方式 ; C H a+ e3 S5 R- p8 V: E
2 C& I' Q, b+ I1 A) F/ z
! {8 [1 D9 M. f: |( P, y(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
8 |+ k. w" C% l6 ] (3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。" [/ F5 u6 i) K" E1 d
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。' L1 q0 t- j. p- W1 Z
6 m) ~, Z8 @' a6 Q% f最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
# j% J+ p+ A+ t$ h. d: P: V) mbool 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; } } }
" C: S# S( y& P M! q2 Z6 O } UF_terminate(); return isTangent; }
9 Z) H( R! k& m0 u" z6 ?) W" G1 Y/ t8 c% r/ S" f5 J
! Y7 R# A/ X1 r. _; A
$ @5 A/ D# V+ F- |
9 {( }8 w! B& G# K, @( Q$ cEND PLM之家plmhome
( C4 g. l" s7 W+ y% e' H9 s [$ Z▲长按二维码“识别”关注 % O( V9 u6 o/ X8 a/ K: m) i
+ K3 \2 c+ ^; H; a5 }# D" B[mw_shl_code=cpp,true]% k' A' ]# u' r
+ v( [/ g" O. A( E% ^0 M
9 x5 b# Y' E2 |2 k2 ~bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
, h7 U2 Q4 g7 n{
9 T5 \! I' R6 ^+ e4 Y2 o% U
0 F& l0 K& X1 t bool isTangent = false;
" {; ~" K1 |6 J( G* X* g: Y: ? int count = 0;1 Y! M! {7 e0 `' Q5 y4 G5 R
std::vector<Face *> boundaryFaces1(0);- F- [/ T* H; g; `5 D: O
FaceTangentRule *faceTangentRule1;
6 A( N6 v* T! B/ d3 b2 B& E faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
+ n' Z4 a: ^ T$ a ScCollector *scCollector1;7 e/ O/ J; n9 d$ q7 V/ C( N7 M: v; F7 a
scCollector1 = workPart->ScCollectors()->CreateCollector();; c4 k! o7 i5 A
std::vector<SelectionIntentRule *> rules1(1);
9 J: ]4 q( G [/ J8 O9 f; o( d rules1[0] = faceTangentRule1;
" F% [8 Z+ X) L4 ^/ d% f9 V. T scCollector1->ReplaceRules(rules1, false);6 m: J0 ^% G! h0 F
std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
$ r7 d0 W: g1 t x delete faceTangentRule1;
& W0 u3 f0 A- W) h1 [, r- V 7 g: ^3 v" z: s4 a0 S- ~( \
if (theFaces.empty())
4 \! f+ v2 q/ v% ]# A+ W% l {; P- |9 {' B7 X
isTangent = false;
0 n9 l# d* s+ {5 P! p$ ?* U }
7 c. s- S& t/ S$ b, p3 q else; a& x- n# G# F0 T1 V0 H; [
{
5 f P/ W$ Y5 ? for (int i =0 ; i < theFaces.size();i++)
$ o' F* l# Q5 d5 V0 W; J. ^ {2 y; \7 e3 Q. Q* _5 e
if (face2 == theFaces.at(i))4 @5 M* J4 _1 W- g+ O+ U
{$ S0 U: k; V) e6 d4 a$ `# B/ a
isTangent = true;
: o& H! P3 r' g# B3 A Z break;8 m9 \0 U# g, |/ G3 c
}" W) T7 K! ~- v$ B& `: {
}$ A# @1 k$ J* [+ g
0 F( b3 {9 b! F8 m O+ ^2 `" u
}8 R/ n( r2 E: |: a
+ y' e, k8 Y/ H2 |
return isTangent;9 L: h o9 a' Y- g# A
. y$ j& X, `+ \% v}[/mw_shl_code]
6 r4 z$ i; r( x1 j1 C5 I3 X3 ]- g
|