请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
( N% r7 [: Z* o1 m9 H
NX二次开发源码分享:判断选择的面是否相切2 h' ?6 K! [' |5 I! E+ y
, F, B0 Y) M( m* I6 F4 N5 a
& s$ I- T! _" v
+ G- o5 Y. Y. e9 I9 K; c 通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
% {8 @( x5 R, j! P - f6 U$ D, d a/ H9 Z& G
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter
- H2 m5 f Q8 L8 z. K7 z8 { 选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。2 D$ {5 d4 X$ U9 r
譬如: 当您选择边对象时候,NX会提供边的相关选择方式
6 L0 u4 J4 Q/ j3 X8 {. w6 ~当您选择曲面时候,NX会提供曲面的相关选择方式 . n" u1 `/ B8 L
1 u4 o" j- T$ k% A; J* b & E/ k$ S4 E; i7 r) e
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
& {+ Z4 ^0 [1 V1 t! l+ X+ H* x (3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
- N# `8 C4 W5 z- N- i (4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。6 z0 U& m( v9 w/ k6 B
E+ |: z' _6 d
最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
1 H2 i. x8 E6 s1 l, d. h! s/ ybool 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; } } } m: n8 q- ~/ C$ C
} UF_terminate(); return isTangent; }
7 k% k+ G- K& `7 R3 a. D% u. [( ]1 [( w
2 f0 ?/ a1 `1 H" y! B, U- {/ b, J: a/ Z) w4 y+ g) ^0 |) W% Y; D+ e$ o
END PLM之家plmhome
4 j1 U, O, k$ c▲长按二维码“识别”关注
1 i0 b2 v5 N% `- h- G3 _2 Z" g
8 m4 W/ A, {% {4 K[mw_shl_code=cpp,true]1 E9 z9 I i8 @. H4 j
& ?/ b) \, l+ W2 {- M' N* Q% M2 H
$ t% r" h0 Y3 j6 n* Z
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)2 K; O7 j8 C, d) l- L& P
{' H1 Y0 l: t9 `8 D
; z/ F) u% H, W bool isTangent = false;
. T, c2 x( K( q" F7 A; m! y int count = 0;
, g# M l, e7 N0 | std::vector<Face *> boundaryFaces1(0);, b E% u3 w5 r0 {) b; _
FaceTangentRule *faceTangentRule1;' e# Q" B8 p5 u) a$ Z8 h
faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1); w# W/ L; }6 o4 f5 F
ScCollector *scCollector1;. T1 R+ ~4 U5 d. E
scCollector1 = workPart->ScCollectors()->CreateCollector();
( H; c: B* ^7 A! d& B. S std::vector<SelectionIntentRule *> rules1(1);' R7 A$ t* Z/ Z/ p
rules1[0] = faceTangentRule1;& t3 A j# x6 q# R+ s9 v4 ~
scCollector1->ReplaceRules(rules1, false);
; {; G" v, T m7 \ std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();" U4 g6 Y9 N# \' b. C/ p8 ]( e
delete faceTangentRule1;- J6 \! W. y# t5 s. E3 z( I
# D4 I! G( X4 f+ d# {$ D& O' ~2 o! }( G( Z
if (theFaces.empty())
7 h( l/ ~+ Q9 e. B3 g {, i6 L% b8 g" J8 w Y# v) G
isTangent = false;
1 j3 k; [& M0 ]' a& m }
% Z+ P! l* l, I7 d/ ^ else
! `) K) M/ {' A! U) ^2 y {
V. Q& ]& W6 R for (int i =0 ; i < theFaces.size();i++)
; v1 p% z7 s- [) H$ Y {
/ h* y% o8 R2 w if (face2 == theFaces.at(i))4 g6 t8 L& c. \0 ~6 r+ F
{# q# b" F6 p; k5 y. D5 z# s% H
isTangent = true;# O+ N. `$ |+ [
break;- L" L5 x0 R, Q" t t& ]
}2 E( l/ `; N' g& R& `% b5 G
}! c9 ^7 C4 X) {& Y: q5 q1 t$ J
% E; T; y0 _ l( \9 B
}
/ \3 w7 P7 h7 ?. q+ u: n) j 4 ~# `+ _5 j' m
return isTangent;7 J- v( M+ z' ~: W: i$ \2 K: v; t% m4 z
6 z+ H5 U" A! m! z% w8 D2 k) y}[/mw_shl_code]6 v" a) m. J- _$ }" F* f# x
1 N/ F* Q( S! ^; P9 g |