PLM之家PLMHome-工业软件践行者

[二次开发源码] NX二次开发源码分享:判断选择的面是否相切

[复制链接]

2019-12-24 19:06:37 2607 1

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82170
QQ
发表于 2019-9-15 08:38:30 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x

: h- b! Q- e+ z1 yNX二次开发源码分享:判断选择的面是否相切8 ~) h8 L& E  o4 w! V( B, _! Q

! ]0 B; }& y) Y2 h
6 |8 b# U- c: t
  i8 J: o/ u( N# q- ^  O8 K% C
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。% ?0 n6 C% ~+ ]* W) i& `

* J  i8 C' F% o7 x1 h/ {7 T
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter$ q& `  i/ z7 l( A2 [! s
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。) {9 V7 O! J; k; i! y+ A9 |
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择

    7 ?* l8 e: \7 f

3 N: E2 C1 X& N                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式

      H& @6 ^( A( L" Q6 t! t" z

    7 Y/ z/ a" \% H1 H/ z                               
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式
    ; C  H  a+ e3 S5 R- p8 V: E

    2 }) y' s$ W  A% Z9 F0 {$ c% a                               
    登录/注册后可看大图
    2 C& I' Q, b+ I1 A) F/ z

! {8 [1 D9 M. f: |( P, y
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
8 |+ k. w" C% l6 ]
. U- @8 u3 w! g6 E
                               
登录/注册后可看大图

8 ^4 d# C. P7 t" C, V7 }) G                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。" [/ F5 u6 i) K" E1 d
1 x0 R% F4 }; ]( L0 L
                               
登录/注册后可看大图
# S: T$ p& K( n) m) U
                               
登录/注册后可看大图
4 z2 D" x" p* Y0 S  H' E
                               
登录/注册后可看大图
. J  j" y9 G" w3 l
                               
登录/注册后可看大图
7 M0 {* w5 n4 [# I: G
                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。' L1 q0 t- j. p- W1 Z

6 m) ~, Z8 @' a6 Q% f
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!

# j% J+ p+ A+ t$ h. d: P: V) m
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;
                                }
                        }
                }

" C: S# S( y& P  M! q2 Z6 O
        }
        UF_terminate();       
        return isTangent;
}

9 Z) H( R! k& m0 u" z6 ?) W" G1 Y/ t8 c% r/ S" f5 J

! Y7 R# A/ X1 r. _; A
$ @5 A/ D# V+ F- |
+ J1 }4 _) J' J4 N- i$ k" S
                               
登录/注册后可看大图

9 {( }8 w! B& G# K, @( Q$ c
' G* v- g8 U! h5 O5 ^
                               
登录/注册后可看大图
END
PLM之家plmhome
  z8 B* w9 t* h3 I$ ?3 F; @8 p
                               
登录/注册后可看大图

( C4 g. l" s7 W+ y% e' H9 s  [$ Z▲长按二维码“识别”关注
% O( V9 u6 o/ X8 a/ K: m) i

+ K3 \2 c+ ^; H; a5 }# D" B[mw_shl_code=cpp,true]% k' A' ]# u' r
+ v( [/ g" O. A( E% ^0 M

9 x5 b# Y' E2 |2 k2 ~bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
, h7 U2 Q4 g7 n{
9 T5 \! I' R6 ^+ e4 Y2 o% U
0 F& l0 K& X1 t        bool isTangent = false;
" {; ~" K1 |6 J( G* X* g: Y: ?        int count = 0;1 Y! M! {7 e0 `' Q5 y4 G5 R
        std::vector<Face *> boundaryFaces1(0);- F- [/ T* H; g; `5 D: O
        FaceTangentRule *faceTangentRule1;
6 A( N6 v* T! B/ d3 b2 B& E        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
+ n' Z4 a: ^  T$ a        ScCollector *scCollector1;7 e/ O/ J; n9 d$ q7 V/ C( N7 M: v; F7 a
        scCollector1 = workPart->ScCollectors()->CreateCollector();; c4 k! o7 i5 A
        std::vector<SelectionIntentRule *> rules1(1);
9 J: ]4 q( G  [/ J8 O9 f; o( d        rules1[0] = faceTangentRule1;
" F% [8 Z+ X) L4 ^/ d% f9 V. T        scCollector1->ReplaceRules(rules1, false);6 m: J0 ^% G! h0 F
        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
$ r7 d0 W: g1 t  x        delete faceTangentRule1;
& W0 u3 f0 A- W) h1 [, r- V        7 g: ^3 v" z: s4 a0 S- ~( \
        if (theFaces.empty())
4 \! f+ v2 q/ v% ]# A+ W% l        {; P- |9 {' B7 X
                isTangent = false;
0 n9 l# d* s+ {5 P! p$ ?* U        }
7 c. s- S& t/ S$ b, p3 q        else; a& x- n# G# F0 T1 V0 H; [
        {
5 f  P/ W$ Y5 ?                for (int i  =0 ; i < theFaces.size();i++)
$ o' F* l# Q5 d5 V0 W; J. ^                {2 y; \7 e3 Q. Q* _5 e
                        if (face2 == theFaces.at(i))4 @5 M* J4 _1 W- g+ O+ U
                        {$ S0 U: k; V) e6 d4 a$ `# B/ a
                                isTangent = true;
: o& H! P3 r' g# B3 A  Z                                break;8 m9 \0 U# g, |/ G3 c
                        }" W) T7 K! ~- v$ B& `: {
                }$ A# @1 k$ J* [+ g
0 F( b3 {9 b! F8 m  O+ ^2 `" u
        }8 R/ n( r2 E: |: a
        + y' e, k8 Y/ H2 |
        return isTangent;9 L: h  o9 a' Y- g# A

. y$ j& X, `+ \% v}[/mw_shl_code]
6 r4 z$ i; r( x1 j1 C5 I3 X3 ]- g
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

1

主题

45

回帖

203

积分

培训VIP会员

积分
203
发表于 2019-12-24 19:06:37 | 显示全部楼层
学习了  谢谢 分享
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了