请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
- m# U- P/ }- K; a6 A
NX二次开发源码分享:判断选择的面是否相切
9 n& W, o/ j: c) n# }$ x! a& e H e" z- c- L: B/ _& u
5 ]$ K8 q/ J! y, y( p3 e
/ R9 @- P$ m$ d) q
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。0 Q3 z D5 X1 j, h8 d
* n/ z& I4 m; J9 Q0 D, c G! ?4 @+ k
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter- A& ]: Z0 b2 n' T7 F/ B; h
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。
, J9 R: q" J. g, r j } 譬如: 当您选择曲线类型时候,NX会提供曲线相关选择 7 j4 J% m( @; q7 A
当您选择边对象时候,NX会提供边的相关选择方式 ! r8 }! A" a. ^
当您选择曲面时候,NX会提供曲面的相关选择方式 ! r6 `( C3 M$ J- b2 E
# m+ o# R p) O* L
) A' b, n" P/ W& p' `" p+ I
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮& p3 H/ c1 e- f2 ?0 f& j( i1 T. N# J
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
/ F: i$ t4 l4 X2 [7 s1 R8 t) @ (4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
3 O4 i, U9 g/ J# c- B/ J, h1 d# z
- V- Q& z/ { n最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香! ; [+ @5 O" G. ^* q3 z) 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; } } } ( ^; q% Y& r3 V" s5 u
} UF_terminate(); return isTangent; } 9 X! c4 i/ w( ^! ]
; f0 H( H5 d( K" l* l! i8 _8 G( C
4 g/ {, `& x& V; E' K& d# p2 T, D6 n
/ f) z2 }5 h. ~END PLM之家plmhome 8 T$ k. C8 \+ a# C: W5 b3 }+ A4 w1 E
▲长按二维码“识别”关注 3 b+ E. G. r1 M" D+ v1 `
$ Y( |1 X0 K' _[mw_shl_code=cpp,true]/ E8 r2 c( n l1 I- M9 B5 c5 E
( S+ ^- ]1 Y& B) q, `. ?
' V7 v7 W0 D' G8 `+ @3 s3 Ibool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
0 R' E* y5 d/ [( M& q4 X{
\2 Y4 b, U$ ^6 x; G; B+ Z: a! k* I0 Q* x3 }( k
bool isTangent = false;" b3 ^/ Z* u7 }# _; K6 i# b# ~
int count = 0;# Q: X& s3 |0 ], _9 j9 `
std::vector<Face *> boundaryFaces1(0);, p/ M; ~9 ^) c! k! q2 C$ ~
FaceTangentRule *faceTangentRule1;/ [8 ]/ |. \( F( o: g# F
faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
* ?& g, N" E T ScCollector *scCollector1;
5 N6 Q$ \0 q/ n: _3 A scCollector1 = workPart->ScCollectors()->CreateCollector();
, `8 s+ v4 ] M/ n$ A% Y( E std::vector<SelectionIntentRule *> rules1(1);
: `' m0 e* W4 M' b, T2 S9 P: { rules1[0] = faceTangentRule1;5 b4 N; [& [( v5 b" t
scCollector1->ReplaceRules(rules1, false);6 {1 F J& x4 ]
std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
& h$ o5 Z& w7 R; O# v: Z+ ]% A7 h6 | delete faceTangentRule1;! N0 U1 u @. }$ T1 R- T
# _2 @& E/ p @; K7 v7 H
if (theFaces.empty())
5 c0 K2 @* f$ V X0 K+ t6 o {3 i+ Y5 a9 e6 @ g( p' q6 r% z
isTangent = false;3 I R0 o D! t) r, x5 u
}
4 X, g V1 d8 O1 ~; j# N# c! o, p else
* Z- B- l0 ~0 ^9 u9 _+ O/ }+ w9 F {% ]( T# V( w0 C" w$ e" f$ D
for (int i =0 ; i < theFaces.size();i++)
0 h8 d5 l6 O. V4 f {3 G9 _3 r% N3 X9 g3 J
if (face2 == theFaces.at(i))5 b. R) T' g" S
{
/ Y2 g9 }7 ~% D1 `9 {, @! ` isTangent = true;7 k3 h, L( w2 c4 K3 _
break;! [+ |; f6 z; b- ~
}) ^0 |( n: O/ [; U- m/ b/ J
}
8 k- O2 x) k) K8 a' w; t8 D9 }4 E8 v% R* r- @
}
- z$ o9 e+ D8 T4 p
9 J. L( t! j1 f" B9 K# H( j return isTangent;+ m+ q# y& o. a& M9 k9 U) g
' e* A+ ~; \/ s
}[/mw_shl_code]7 @. }' k" O! f }/ h( j ^! J
1 s" }2 t6 o2 Q& s! N A; m7 X' \ |