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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

3 a( J) B6 I: S+ _; b0 J( ^! JNX二次开发源码分享:判断选择的面是否相切
: Z, R# ^* ~5 W  c! e" t3 x! A6 y& T  Y- Q
7 u; O+ n1 {: P) n

6 l& U0 _+ E4 D5 [* A
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。0 o& h- R" t8 o: @9 C
& a2 S+ y! x( F' ~; A; q% D
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
6 }/ W1 v3 V0 k4 G/ }9 ~
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。: j2 w" u" W& A
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择

    5 D, C4 E' I* A+ R
3 i5 h7 t: U! z. ~( x, o  D
                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式
    ' K3 u( ]& K5 C; k

    ) e/ S  G! x- ?8 [" G) n% p                               
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式

    , X7 w- C7 u- V' f: W2 [, v. Z

    : ]6 J6 e" B. m                               
    登录/注册后可看大图
    1 n5 p2 A, F( A! Q$ a3 S' G0 _
" t1 Z# |9 Y* P- H: t0 a% E
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
: e; G. N( f2 Z1 Q, A( i) T, W

5 D7 K5 Y3 V3 F/ Z                               
登录/注册后可看大图
) ~! D/ x& m8 ~1 C1 T+ E
                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。) h* C; t& G# P6 {: Y/ @2 l( d

( `+ a! O0 R* n2 r1 i8 _* }                               
登录/注册后可看大图
6 o$ K! B  R1 i; A- m3 }
                               
登录/注册后可看大图
3 n) p! ^# S6 x% @$ }- e2 v' E; ^
                               
登录/注册后可看大图
! W% h6 p+ r& V8 s" X; h% z
                               
登录/注册后可看大图
1 l) p7 |! L7 }9 w
                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。7 _( Y& E8 p) W7 Z

! I3 I) c" U" F, ~
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
- C% U* L- [4 D, O7 u
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;
                                }
                        }
                }
1 f6 N6 \* O8 V) y# P3 z; A2 ?* w
        }
        UF_terminate();       
        return isTangent;
}
' N- w. A. ]  J. q  l  g( p3 c

  n( E5 A5 q$ B) U
' c) X6 \" C" j7 I& n4 e4 g5 ^) \0 p: y

2 m) p' l1 w  n) ~/ }                               
登录/注册后可看大图

7 \5 M& b/ h6 B8 a* z( P! F- y
9 U# y5 L& a  c; a0 T
                               
登录/注册后可看大图
END
PLM之家plmhome

: r% d9 T, J( [3 s( L; ]/ w2 o                               
登录/注册后可看大图
6 _) |# z3 }/ _% z
▲长按二维码“识别”关注

+ C( m2 ~8 [1 b- X3 Y4 D  k& P. d1 u9 ]8 F4 }" [( c
[mw_shl_code=cpp,true]
1 V% v. y# ]4 a& ^* K2 s# t+ _6 w* ?5 N' [. }/ a% n: p3 S

; B& u3 E/ p* s' Ibool CheckDTS::isTangentFaces(Face *face1 , Face *face2)* b+ L7 e  }- L7 z) ]) |# c$ w' ^
{
# p" B8 r, |" \5 i- z( e+ E7 Q# K4 h5 f
        bool isTangent = false;
) }& x6 i/ S" R) m6 w7 m, ^. r        int count = 0;) E! ]7 m) P  C5 r, }. W# l" x
        std::vector<Face *> boundaryFaces1(0);4 [  P+ g" d: j; Z" A
        FaceTangentRule *faceTangentRule1;
6 ~( a8 I9 w' ^9 `* T0 N2 a. _. X        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
3 a3 S' ]" }/ N( e% m        ScCollector *scCollector1;; {8 N) K( W( S& _3 j
        scCollector1 = workPart->ScCollectors()->CreateCollector();' ~% b3 I% g' N  G+ Z3 I
        std::vector<SelectionIntentRule *> rules1(1);
0 ~: G5 r3 J' ?+ U        rules1[0] = faceTangentRule1;
$ C3 y5 Y8 e3 b" t. P) ~        scCollector1->ReplaceRules(rules1, false);- U9 w  g4 a) ]: V2 j% A
        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();# l. u" d# P) ]' s. {
        delete faceTangentRule1;
7 ?% m# z4 A( V  ^) K0 _. K        - {7 d& \# d: W) c
        if (theFaces.empty()). n; N, ]0 e6 G3 q5 n* l
        {
+ O' e, T" L4 t( u                isTangent = false;! z9 r# K. X; v& x0 i7 x
        }
, n  M) J( M, B$ s        else
9 W" [; Q  s6 B; T: c3 q" l        {
% n9 |# Z# v, ?6 X6 ^# }5 V( ]                for (int i  =0 ; i < theFaces.size();i++)" U% K; S2 y- U
                {, x4 p1 `1 h* c# _1 k
                        if (face2 == theFaces.at(i))
0 h' R0 N, m, L$ V: A2 S, I                        {" d0 m- v3 K0 X  R& s: ]
                                isTangent = true;- o7 i( i3 C8 a
                                break;
; ]  X5 M8 ?5 F4 {/ h                        }  e- _- F% l+ G" U- `8 {
                }
; ], r( t) m& m2 Y' ]$ s  Y5 ^! k2 s1 s# ~/ O- o
        }
/ H+ g/ n5 b7 w  c& z        7 t8 a: V+ [/ m* |0 e, t
        return isTangent;
! e& l2 y; n( m1 ^) n/ z6 V; F: ?: l- r
}[/mw_shl_code]
) d; e, Y, L1 |$ i
! W3 `) w$ x& j/ R# d! }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了