请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
! p) W' ~8 o8 r+ x$ M
NX二次开发源码分享:判断选择的面是否相切; @! q# |2 a- x, n4 w
0 ^* P% J. l% s% ?
! x6 d6 ]6 b0 D
9 S. G9 J/ x; h: f; L% a 通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。; p8 ]# d/ d& \, W/ i1 x
! n. w, p* \0 p3 n$ Z8 i- ]接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter$ F% Z2 e7 ]- [4 Q' f+ K& }9 B
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。
7 e3 q' R H% f9 w1 P 譬如: - , d2 Z. x( V2 f+ u, s8 M: O+ Y
当您选择边对象时候,NX会提供边的相关选择方式 5 s3 U. z; g1 y+ E' z* d( I, L
当您选择曲面时候,NX会提供曲面的相关选择方式
: T/ }2 y# ^7 @* ~2 M0 X& x- W: k8 N; ^4 f' Y/ h
1 A/ h6 T6 ?/ n& z/ Z9 O& s(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮% `4 C- ?7 e4 \ ]- h2 J* z; o
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
: M4 l- v/ h' V. X" L+ |( A$ { (4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
' b3 t' H) |* w2 h* b
# _2 U3 T+ B( q) u; @0 t4 h最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香! ) n( `4 V: X. t# {9 n
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; } } }
$ t3 y# x; j& q2 u9 e% h% k% b4 X } UF_terminate(); return isTangent; }
& T7 F# M, P5 e1 N; l
4 ? u0 h0 H$ z
, Y9 q& W6 T. K+ Q2 Q& U+ `; |' c; Z" i+ f
END PLM之家plmhome / K3 b2 t) z( _6 \9 S0 y2 s q
▲长按二维码“识别”关注
! g. }4 L0 R$ z2 Y3 n' k- F1 \- b4 u y0 i. t
[mw_shl_code=cpp,true]3 y6 n6 ?+ J8 k- C
7 G+ X! l8 @$ s- [- \$ f. u/ v
' x! l+ S7 i8 q b9 A3 l3 j) n. rbool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
% u- ~4 y: q% ?( P3 y S{
) m6 H' ^ {; l$ u. R: d
# B/ k5 D1 r5 n bool isTangent = false;
$ J) U7 c2 r, \; e+ ^5 S2 [4 R int count = 0; u# Q. f& R3 K1 T( F5 j
std::vector<Face *> boundaryFaces1(0);
9 V" |6 q+ R% Y. B4 Q! u6 { FaceTangentRule *faceTangentRule1;
, @7 T4 x2 M( }/ l( f5 }4 d. u faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
5 a( B" k( w d8 A6 O& ] ScCollector *scCollector1;+ ^8 x5 x G/ C5 w4 w9 p5 j* w
scCollector1 = workPart->ScCollectors()->CreateCollector();
+ g V' K, W% z3 d1 T7 W9 s std::vector<SelectionIntentRule *> rules1(1);
x" S6 \ z+ P rules1[0] = faceTangentRule1;
! J* E' M( `3 S" A) u2 o, U scCollector1->ReplaceRules(rules1, false);
7 ~5 w/ X: j7 v7 b% r* t8 d$ r std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();( q0 w3 K+ X/ w) \
delete faceTangentRule1;. C0 W$ D/ L8 _
. Y8 A4 L5 f! l8 K! N" k
if (theFaces.empty())9 K! D. [. P5 T1 ~% i0 Y7 h# ]
{) u& H2 y7 s' u) d3 Z" M5 P
isTangent = false;
. Z0 e3 B* i6 i }
5 q5 l$ K! @% l" [. q2 K else) k6 K. s* Z/ s$ f, S$ f" m/ F8 p4 C3 Y
{
L; O9 d( B* C0 K for (int i =0 ; i < theFaces.size();i++)
8 e1 O4 J0 w |5 F {8 M* X# u S! c# u# @( I
if (face2 == theFaces.at(i))
. w4 ^% H8 X( l {
5 m, I* Y# e% Z isTangent = true;
; R9 r9 E/ e/ |2 Y( Z break;& Y# P; S a' q8 q3 y
}
# L& z' b" [! s, b, a" x3 p. n }0 h* \7 H2 m1 m: C: q, e9 n% x: z
$ ]; z/ f2 m. \0 \* ? }
?) x/ A o& [/ Y* F0 I8 p8 t
5 O: a, B! P$ ^ return isTangent;5 }: Q7 Z; P }/ v
6 V1 }! F8 ]$ E* q' ^) E% o ?}[/mw_shl_code]$ U, U& p: N% b1 b* ^1 s' `
2 p. Y' j2 V- W5 g |