请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 P: P/ e6 D* ~; H; l4 LNX二次开发源码分享:判断选择的面是否相切* U) B8 S- ~' j9 F8 r
+ A) r8 K# ]5 @# ~- W% {! t M2 U7 l2 E2 V# Y
. B& s0 i2 b. Y* v. ]3 ~ I4 J 通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。5 o4 p& N$ @4 g+ T: E( f3 J0 X
1 A: U: U* N' j/ a, b, b% D. V接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。 (1)先看看选择意图 Select Intention中的Selection Filter o5 s, U3 E0 q0 W V( b
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。
% D/ _) D6 p. W) D! A* }5 m$ @, t 譬如: 当您选择曲线类型时候,NX会提供曲线相关选择 ( T& c I" ^& O
当您选择边对象时候,NX会提供边的相关选择方式
3 N: r) z1 g2 M4 t. P当您选择曲面时候,NX会提供曲面的相关选择方式
/ u5 ~0 W( {; N3 f) g
L6 ^! m0 Q) I1 @
' O4 f2 ~/ y R$ [$ Z$ p x(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮9 j% X) Q& G* S! E [, F
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
" i i3 e9 I+ ]% L (4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。6 h5 g* ? Q, g* d' U7 Q
* C( l6 g6 k/ J, D' A
最后把这段代码提供上来,仅供参考! PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香! ' i1 r/ W8 g4 z1 y) Q1 h+ J
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; } } } * N, z& Y( p2 d \8 p- Q
} UF_terminate(); return isTangent; } 6 [' \7 `3 a3 `, ?
* x, B8 A; B" J0 F
7 a8 y1 p, s o+ Y5 J5 {# b5 y
5 P/ }4 X% S/ @5 X) cEND PLM之家plmhome
" n U. M; e; T) ^4 ~; Y- \▲长按二维码“识别”关注
" P/ s/ }* U2 @/ o
1 ?& a) A1 m: O$ |[mw_shl_code=cpp,true]
& R8 g- `$ P. P
2 K0 k' w1 x7 M) f, x- T6 j- H9 q
* A) M$ c: j) W! s4 Qbool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
$ m# b* x+ ], ]{
' }# w) P& v) |
! b6 c3 {5 x h* r# }+ g( l bool isTangent = false;
# g/ v- ~/ m$ ?' ?4 t m& t7 G int count = 0;
; I9 B* S' l; U' m1 o. i( j9 q6 Y std::vector<Face *> boundaryFaces1(0);
1 ^3 W+ m6 h$ H0 p2 x FaceTangentRule *faceTangentRule1;
5 o8 p) o, B. I faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);& l$ b/ |' s+ S
ScCollector *scCollector1;
! |& }2 `0 d, P: O scCollector1 = workPart->ScCollectors()->CreateCollector();
. [- f1 w1 L0 V: p$ ~1 u: |% T& y std::vector<SelectionIntentRule *> rules1(1);, U+ b. L$ Z/ _/ z, F$ p
rules1[0] = faceTangentRule1;
$ F# V( T1 D" @' c" d/ H, L scCollector1->ReplaceRules(rules1, false);
) o) E/ b/ H- {% e std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();3 T# `5 n9 e' G1 j4 S) D% c
delete faceTangentRule1;* q% b# Q7 G. m% I
' \2 l; K. u, n! j& l2 U; b if (theFaces.empty())
9 K, C% n$ |+ B0 y6 e) K {* C, p; Q8 \" V; z6 y$ V
isTangent = false;
- X8 ^4 y9 d' h' ]6 y/ z4 I2 J }
$ ~9 n1 P# Y* |; Z' ?/ ] else
( D1 V9 S; l* ~8 r. K5 f {' b1 \ w/ M* B! O& ?0 t
for (int i =0 ; i < theFaces.size();i++)
7 a: y Z2 c7 O) ~ {' J7 D& s; |( ]; T+ H+ m) [- Q
if (face2 == theFaces.at(i))' k2 ?$ w5 \. o+ a" X" l+ i
{& r+ l$ y- \4 E: r3 k5 p
isTangent = true;5 r I% j7 I" ~
break;
" Y9 z, F0 F" u, I }6 K, q* ]0 N2 x* H5 [5 Y
}
) g2 V) `/ b2 i& Z$ x6 g" t, V) o' q" s/ e: l
}, S# Q7 Z2 a4 t* N0 T8 |
: T0 T! K9 e: u3 D$ o return isTangent;2 z7 ~/ \* T. x, B! E6 r
/ I& K/ a$ w3 p- O}[/mw_shl_code]$ ~ O$ c. ?1 k+ N2 m5 r& t
# N' r( b- [' J |