请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
+ \; H- b$ v" E% X' T8 hNX二次开发源码分享:判断选择的面是否相切
* M0 b. L. a, w. j9 f
/ f( `! ~' Z$ M. I1 f, \, N- e4 l, Q$ S) J7 C
% ~2 ^9 A \6 W% x
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
9 A) b( \4 w+ n+ G( G q
- M! Q5 u; m, [! w# A. x2 R0 {接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter
. m2 t w, b) r; Q) u, M7 u! L" J 选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。6 w8 N" b z9 }$ O
譬如: 当您选择曲线类型时候,NX会提供曲线相关选择
4 y, j1 D3 C% Q! X
当您选择边对象时候,NX会提供边的相关选择方式 # s& m$ C% j2 b
当您选择曲面时候,NX会提供曲面的相关选择方式 2 F. w5 p& S- f; P% I5 Y* Q
/ n' v- H1 t- J+ F$ H$ R2 l 8 b8 I! b) j! D+ Y0 q8 B X
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮* {; s9 g% \/ x4 z) m3 l
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。2 I# T$ j4 w! `2 {5 d
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。, H6 M; w; y- }( f- D9 s/ j! }( Q
* o/ Y2 M6 n- a# u3 \
最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香! % O" ?! G) ?% {7 W- {5 S
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; } } } 0 U1 F: @) V# v) l* g! S
} UF_terminate(); return isTangent; }
( M- v: P: N8 m3 q: L
5 Z) z5 j9 f# h
5 Z# s" x, {# P, h
1 ]" m# k" m6 |% j S v! _% c/ X" nEND PLM之家plmhome ) I, v! u' l1 l* G& f( a( Y9 O
▲长按二维码“识别”关注
6 T! I* r; |6 G- m# C* E- P% y) G/ T6 {$ v" e3 {5 y4 }
[mw_shl_code=cpp,true]
+ ?% \$ k, ?- [% |3 L& x& o; }; G7 d' f- |0 \ H
, E$ V% @. l/ D6 Z/ Abool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
" \, u2 K0 @4 t! g. F; E" F{
) u4 J5 |6 @- [! C# C1 e4 `# U& }% l: G" R9 i9 c: n$ ~
bool isTangent = false;# c! c' a1 ^8 J" S2 Q
int count = 0;8 a9 ?5 d9 D# T1 Q
std::vector<Face *> boundaryFaces1(0);
6 B" m( Z3 E/ `. ]8 f9 `8 W; | FaceTangentRule *faceTangentRule1;# F* }3 M3 h; M5 [* A0 [0 T
faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);( T& n, R, u5 \& m! l
ScCollector *scCollector1;7 D6 |( d% R9 ?8 B7 g. K
scCollector1 = workPart->ScCollectors()->CreateCollector();
/ y2 J2 x4 C% h: f5 |, M std::vector<SelectionIntentRule *> rules1(1);
" L' t9 Q& E/ n rules1[0] = faceTangentRule1;
% |; y* K+ f* L7 K scCollector1->ReplaceRules(rules1, false);
, Q! `& n0 @7 o8 H$ j- } std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
) o& H8 |$ M6 [1 ] delete faceTangentRule1;( h0 R+ o1 i/ r( q- m. |- T0 N
6 |" q4 G, ?1 `6 S$ Q1 N2 V7 S5 m2 i
if (theFaces.empty())
0 `, R2 q0 j' W1 T {* S# w: Y2 \$ y. l3 ]
isTangent = false;. n6 P, R& }# K
}/ m" `+ o/ L2 [
else, u' G' u8 R3 [2 I! C! D+ U; t4 [
{
1 V2 P6 C' }/ M$ {& q5 U for (int i =0 ; i < theFaces.size();i++)6 q4 c! M/ x. k$ d1 [
{/ ^; g) D" H3 {( M' ^" E( R# f
if (face2 == theFaces.at(i))
9 W" z, ?7 V }' S1 N' m- J5 f {
7 {1 Z: e) i9 p+ B. Q isTangent = true;2 ]8 n6 o3 d; T( u; r
break;
: y5 k+ k7 \ S }& X9 |- F. ^) F: O" \; e
}
) q3 O1 L( X* l7 p' c+ q6 E
! ?0 I/ [& l: H1 J5 f2 \, `5 S }' h4 v4 a. r4 {0 D+ I
5 Z M/ \3 I. c3 K6 V$ R
return isTangent;8 h$ b$ p, a/ `
3 G+ E- W1 s% s3 l6 I. d: N9 g6 _( ~. o
}[/mw_shl_code]) Q9 S2 U- V( \; L! _0 g% `
' ?2 g: k ~ N, _8 z$ `! m S
|