请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% f+ t z* Q0 a9 V6 H
NX二次开发源码分享:判断选择的面是否相切6 v b7 y& H ~* O
& J$ t% T) L/ S$ J( \7 }* J7 k6 r; a
/ ~4 M- h% I, l# Q) x2 T
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。5 G2 n3 D; T3 i
. N$ C0 E' ]! X9 X
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter
+ ]5 u/ E9 H# Z" v 选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。; N. ?( w9 K/ g! x" ~
譬如: 当您选择曲线类型时候,NX会提供曲线相关选择 9 x {1 \1 Q! f7 I. I
当您选择边对象时候,NX会提供边的相关选择方式
! Z6 H v6 ~6 }( d6 A+ a当您选择曲面时候,NX会提供曲面的相关选择方式
# G3 h8 _ }. {* z- m: b2 s. Z8 M! Z6 |6 c5 Y4 n
& R4 i! X( H8 F! w9 j4 q4 m% w
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
( v. n8 U) h% u4 y( A (3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。; X3 ^5 \$ b, T, x: F# v3 P
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。; z/ L; Z, E# |: i. X U9 i
+ T: ~+ m% f3 C4 {2 b7 z4 V最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香! # x9 L4 r- P5 B z) |
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; } } }
! V9 H1 F a3 A9 x+ q; y } UF_terminate(); return isTangent; }
6 N( c' S1 z; T# I, b9 |9 V" L* n8 I. i
: i+ K0 W, H" O
4 P- c1 h- X% F& x% c; t/ H- l n( V) S& i ]# R: Q) e3 [
END PLM之家plmhome - _7 K4 Q% s6 Q& \5 b) z9 g& U
▲长按二维码“识别”关注
4 \+ q! ?* {1 n( L3 F, b V
2 B! N6 O5 R7 _! g6 _+ h" }[mw_shl_code=cpp,true]
0 M. S. i' l, K7 T) J$ V$ i. [! L8 n0 D, t; Y+ U9 U
c4 }, A t4 Y7 s; \! r) h1 I) j% Ibool CheckDTS::isTangentFaces(Face *face1 , Face *face2)$ `; g j6 S* I% x+ j9 `
{) i" ]" a0 f {! o
6 ?9 I( F) p- \# [- p2 F2 W bool isTangent = false;
! Z: h8 ^- x2 K! h int count = 0;; @0 \) H' G6 U- `
std::vector<Face *> boundaryFaces1(0);4 t/ [# O/ r, S; c8 o5 J- }
FaceTangentRule *faceTangentRule1;. W* L2 [9 h. _
faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);8 F; S; ]6 h0 [
ScCollector *scCollector1;
* o1 d- q Q0 C4 x) L; c/ c+ ?; ] scCollector1 = workPart->ScCollectors()->CreateCollector();0 w# x: j' Z0 z
std::vector<SelectionIntentRule *> rules1(1);
* k3 @# I# S& |- @& Z; D rules1[0] = faceTangentRule1;
( J; Q) Q0 M6 e% a. O; M scCollector1->ReplaceRules(rules1, false);
% T( s6 \8 N* [; J- x* H/ k$ x std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();" [) }8 n* T, |( B1 m/ J7 e8 S
delete faceTangentRule1;5 R$ K) A1 k6 q3 d6 B, j) I/ o
( L# b# b8 O/ t' k M: b/ {
if (theFaces.empty())& n# v$ p, F0 G$ {8 p
{" g6 S& A, Q' ]0 y$ b
isTangent = false;
0 n. F% r2 S% t& v7 V* r }( ^$ V# Y3 }+ |% R P1 Q4 e
else9 @# q) I: d' h. ~4 |
{
2 ~4 f3 ^* y( L& M" d6 o( Z% S, ] for (int i =0 ; i < theFaces.size();i++)
! l. e* k9 G& U- f7 J5 I {# G' ?$ w7 e- P
if (face2 == theFaces.at(i))
) m( E* N9 r' k! [. ]: t {
6 G* x6 h: o' b8 k. X! q- }" l isTangent = true;
7 `6 K( k4 L* ~3 I( \* k( x" C break;
7 P' a# P4 @: p% r- O$ \* j+ a9 k }
$ v' c4 Z; @ @, z4 U: \ }
+ I% L% G* W4 z" q$ u0 e3 }( e3 @/ S/ @% |# y4 O T" L# O. n: ~
}
9 m. [5 s0 N0 m- {) R
, L/ |" E3 G% l& A' [ return isTangent;8 i3 l w: e4 l9 ~0 x
4 b1 o$ ^* Z4 h! ~}[/mw_shl_code]# \5 w* J# ]* n0 ]1 k' n) D! K0 O
% T$ i# |+ j+ h5 k" S2 B) S5 P' o3 [
|