请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
9 k7 {8 Y" ?; J! m2 wNX二次开发源码分享:判断选择的面是否相切
. ]" F4 U6 _* ]* r* t) f3 J
2 a5 Y U! ^' k- }6 S) W$ M; R1 P
9 h, f( h, z$ V* H# x8 U
# e `. R, J. c 通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
0 x+ N& T( _2 X& A+ y
7 y7 ^9 J% F+ @; T3 |$ W8 N接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter
+ K: `2 S6 L8 x6 Y) [, F' a2 Y: H 选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。* P' |$ N7 m0 j9 F/ Z& J7 I
譬如: 当您选择曲线类型时候,NX会提供曲线相关选择 ) L6 s# `1 G& B) N9 S, G9 |
当您选择边对象时候,NX会提供边的相关选择方式 0 i- {* W% ^" t8 ?
当您选择曲面时候,NX会提供曲面的相关选择方式 . Y; x* A5 {) m% K, {, K
+ C8 S G- Q+ ]6 r1 Q& r, Z) A
2 ~6 n9 U* _2 i' e8 J# G- f ^(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮5 J" i! q" q3 C9 n& ^/ S
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。; j. ]" ~% }! q- u: V$ P
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
& r/ i7 u* ^: E5 I- \
: Y. `( p& U. d, S% L; }! @最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
6 j3 m" K: K+ S5 u1 V/ x ^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; } } }
! e& h# s4 a) \! `; B; `3 |3 k$ g8 s } UF_terminate(); return isTangent; } ( G! S) n5 q& K6 Q( W
9 u' Z& X" I- ~! S$ X
p. Q# d* T F( R
$ u: s9 q; v9 r7 @! {! L" `9 ^! z \5 q c) y6 c8 R
END PLM之家plmhome
3 P& q% c( O/ z, O8 ^ S: h+ r▲长按二维码“识别”关注 ! n7 {5 y+ T0 E( T# V
+ S; x* H- W' n. a p
[mw_shl_code=cpp,true]6 ]4 `2 P5 ]2 k. \' F# p
9 V' P. G% i# q! Q+ f$ a: q$ ^- j% l/ H$ |) p$ p
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)/ o; ?9 { v) ]0 h1 U# z
{
* r3 E* I2 O# ^
8 F) X; u% k$ P3 g4 x& r! M bool isTangent = false;
( v6 A8 h, j3 L1 i, J( b int count = 0;9 Z% t* t6 T& p: m
std::vector<Face *> boundaryFaces1(0);! e. Y1 o5 m! U5 l) _* |
FaceTangentRule *faceTangentRule1;
1 L2 }& i8 t7 L9 k5 G$ n faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
: e; C3 a- K0 b/ z( E3 g; ?; d ScCollector *scCollector1;0 G, c+ F2 \" z6 g, \: |
scCollector1 = workPart->ScCollectors()->CreateCollector();& l* H$ z& S3 k! O3 ~8 z
std::vector<SelectionIntentRule *> rules1(1);
4 z, k) @+ n( t6 A8 \ rules1[0] = faceTangentRule1;
2 w: d( j% Z! U) f! Q; v scCollector1->ReplaceRules(rules1, false);
' p/ N0 o$ x6 N! X* U std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();# u/ k( G7 ^( ?/ C* \6 p
delete faceTangentRule1;( F$ I1 L1 W6 g2 X, t5 D: h
0 ~+ `1 E C0 Z" X# g. o if (theFaces.empty())
- O4 W. U1 k( d. ] k {
/ p$ Y; \* J( |# ~2 m& T isTangent = false;" ?1 |8 @4 @3 R# L
}1 H" h& T) }0 x% N- |' m" S
else
4 |1 A+ i8 {- y4 B {" [8 y7 i9 K/ y8 l9 e# {
for (int i =0 ; i < theFaces.size();i++), P' A& S+ z6 w9 T- U
{1 n$ ~+ j$ r5 r: L" e7 @
if (face2 == theFaces.at(i))
- j* C# q, J$ S% h {+ T- x% J. k( |1 B' k+ u
isTangent = true;1 G2 t' D, V: S3 }" V0 J% D; C
break;8 M" }; q; }8 X L
}! J4 I' A& T; t2 ?; q# S2 s
}
8 `+ A6 K& K" S
1 B" N, X! X- l7 G* k3 } }* c8 y& c' A. M( g* K
9 v% H0 {0 x2 S' l3 q0 k# @+ s return isTangent;
0 E5 q* d% ^# Y; ^
5 [4 A) D0 {. i; z3 W}[/mw_shl_code]
3 M; y" | O) R
: a$ {2 a5 x/ z% w* t6 M: D |