请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 a# _6 K0 J8 `) b9 V$ V% TNX二次开发源码分享:判断选择的面是否相切. P+ Z7 p$ L7 r. G
" J9 ~/ J: ` D* D
. W& g5 N) A4 O3 [- c
" {2 h8 N2 R# v/ I1 G 通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。0 K- q& G' {0 j1 A
% M: @: s# g6 i' z O5 k
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter
. R: j& }9 Z7 f8 P: {8 U+ F+ V( x. { W 选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。
: A$ T8 b: D" c0 t/ L1 B4 L% \ 譬如: 当您选择曲线类型时候,NX会提供曲线相关选择 4 P$ |! F' P! ]1 \ z
当您选择边对象时候,NX会提供边的相关选择方式 7 H! W ?( c6 i' w
当您选择曲面时候,NX会提供曲面的相关选择方式
( g l+ M, E7 k {; {4 Z s
8 y# T& y4 j! z" x
- N9 ^; ^$ R, k. x(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
: P: ]7 l/ z, C" u9 g (3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。- v$ \$ T( @* f4 u% R8 v
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。# E D+ s2 {4 m" i) m
1 d* a& f1 p$ I" J
最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
5 G/ o( N I3 W$ B# p2 Gbool 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; } } }
; p' ^) ^+ k: ]" k* P5 }6 M8 E } UF_terminate(); return isTangent; } 8 p) M- I3 [+ L0 p+ c- j
( j( ?) G& L5 J7 H. X2 B
8 l7 P, G0 N7 x) B2 G7 f* u( \3 p) |. ~8 r2 w" J$ o- n9 B
: k$ I" F* R1 S7 f6 o5 S. P
END PLM之家plmhome 7 R7 Q7 ]" z% e
▲长按二维码“识别”关注 : `+ y0 }/ C2 q3 b, C4 A5 n
4 P2 [- j- r$ T# m[mw_shl_code=cpp,true]
# U5 U2 V. Y( ?& n; n9 P5 b; Z5 e/ Q" P+ @6 @
8 {$ X# ~* y& j6 `5 f) W
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
9 E3 n# R; o/ c+ `2 p$ _{; m+ q9 [/ b5 f
% n4 w, m0 n% Z3 C
bool isTangent = false;
O/ p* ~$ G) a# ? int count = 0;
' l% r& X' P3 N7 f std::vector<Face *> boundaryFaces1(0);
3 z: F, `9 b E' G* p% @ FaceTangentRule *faceTangentRule1;
$ X, P& \" d2 B; s" W faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);( ~9 v6 c& |# A y! P: A4 m0 g
ScCollector *scCollector1;
9 G' m4 }% c0 `1 }$ D8 D) |$ \ scCollector1 = workPart->ScCollectors()->CreateCollector();
3 _" t& l& @5 \& F: ^1 q std::vector<SelectionIntentRule *> rules1(1); {- G+ r: v" W4 }0 |7 ]
rules1[0] = faceTangentRule1;5 y" \9 k+ H, }; F: U
scCollector1->ReplaceRules(rules1, false);- F: L$ C- r0 I& M# {
std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
, l \" t. P& D$ s" n1 S+ J delete faceTangentRule1; f3 ~) D! {6 L6 u; p: l- [
0 C: J+ o6 \6 R: z' U5 } if (theFaces.empty())4 Z" |- K# ?5 a) x% C
{6 X- f$ Q3 f( N' `1 @7 }6 z
isTangent = false;
E J, p7 i8 N) t# f0 G }& ?/ o, i8 v1 e/ G! f9 ` G% }
else4 z+ q) w' i" ?1 b% c8 O
{+ L7 e# o# @$ P
for (int i =0 ; i < theFaces.size();i++)5 ]% H% _6 g# F* o
{
$ g$ T. d9 a2 H: ` if (face2 == theFaces.at(i))- H' x; |2 M/ l6 G: s$ r
{
) z, l; I. k: e. ?9 e isTangent = true;! \" e0 F0 ^& p2 r6 D4 t' w! B
break;3 G2 ]* O' z2 \9 A
}( h5 ~3 i- \5 ]! [' h& A6 U
}
5 C1 N5 E/ O) L3 w
; V" l- D. A% T$ i2 k9 r z+ H, ] }1 k& p8 y t9 T& I1 h6 J
( {" y2 c; P- P: p( s/ h return isTangent;
3 P) R4 F* _ D Q. @( s& Y9 m: I6 Z/ n' Y1 n$ V/ R- j G4 H
}[/mw_shl_code]
7 T& N4 F: r: I1 Y3 A" q
$ e: p2 ?; \: M) v4 ]/ h/ ~ |