PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

admin 发表于 2019-9-15 08:38:30 |阅读模式

admin 楼主

2019-9-15 08:38:30

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

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

x

4 M" p, M$ q+ {& M; H7 X5 N: CNX二次开发源码分享:判断选择的面是否相切
3 A5 G( F' o# \. p& ~# ?. m; x% J) ~/ G

  i' y; }+ N8 v4 D. L

0 G' V5 T) R6 V9 w
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。$ g4 u3 }0 G' V* F+ e

4 r" K5 H; g% T3 c. f) |2 D
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
: J, Q* ~) s+ c2 _
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。& d( G8 Z5 t# k
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择

    1 ]+ _$ ~$ }! }
, I2 R4 y0 W8 U( y9 x. J
                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式
    ( I, w# y/ [' g5 P& {! j
    ; f2 Q- [  u4 l
                                   
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式
    * R' r# z8 N: G2 J$ Q

    , I& s+ K% T) V  r+ i  [" B                               
    登录/注册后可看大图
    ' Q$ d' F+ Q5 O% o9 k
5 p) g% h" b) S' J
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮5 K  q) h/ x: D4 |1 L9 |5 y7 ]

! r8 ~. H% R' V                               
登录/注册后可看大图
& J" D* f% g1 X1 a! m8 J
                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
1 @' w8 W4 A, n5 G# f% j
4 ^: \2 Q- L5 W9 M5 l& o
                               
登录/注册后可看大图
$ p0 v. N' j2 K! A
                               
登录/注册后可看大图

4 l. E0 Y7 r7 m' G; h: c  G                               
登录/注册后可看大图

+ g( y4 F/ r: l9 a) O                               
登录/注册后可看大图
% h* p1 \# G6 ?! H! H
                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
! b" n; @  x' \, d8 q

; J0 C% a2 [( Y7 ]0 G$ O
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
- q* d. F4 u  o
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;
                                }
                        }
                }
8 L7 d8 @% ?! I1 T0 @, d+ `8 P
        }
        UF_terminate();       
        return isTangent;
}

# N& m+ b" Q6 q- U
% r$ F* N5 N: X6 u8 d1 s8 x: |8 S7 F. d- ?& k! E& u

- y) G( R4 _3 j: N  q
; c/ F8 L8 w+ g9 g5 }- X6 w
                               
登录/注册后可看大图

) |+ H2 B0 d6 o5 U( d

5 X; u6 v0 E" K5 k/ T' U5 c                               
登录/注册后可看大图
END
PLM之家plmhome
6 U+ L: h3 x0 G9 ]4 b- Y
                               
登录/注册后可看大图
; t: H2 f9 Z: d0 j) z# p; B5 \
▲长按二维码“识别”关注

0 g8 w( R* L% }  g$ G2 F7 G( `5 L6 J0 n2 J& D/ M
[mw_shl_code=cpp,true]
; {/ ~- ?! J5 _1 [* T
; G+ K& V, h$ R% z) y0 l/ g" J! F; M% J5 L+ P! m" I; Q& ]
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
5 l! L4 I+ a" @! t# O& w& N1 w{
$ |1 X, M5 I/ i! ]$ z8 o0 x. Q7 h$ T1 f) T" ~5 |& U
        bool isTangent = false;
# j( o$ k' Y' i$ g$ ]) }. k. j# M        int count = 0;0 u/ ~! n: f0 z2 N( t' n
        std::vector<Face *> boundaryFaces1(0);# E+ A. A4 t" Q4 r
        FaceTangentRule *faceTangentRule1;
/ r" k9 ^5 L- g( f        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
! T" p9 G6 c1 X# y, X! f        ScCollector *scCollector1;
! q) E: e% Q3 T8 {' x( C9 U7 V        scCollector1 = workPart->ScCollectors()->CreateCollector();
* r1 ~, x/ h6 K3 ^/ l        std::vector<SelectionIntentRule *> rules1(1);5 ^5 R+ Z& I% A7 S
        rules1[0] = faceTangentRule1;
1 r! \' Q: f) Q4 Z        scCollector1->ReplaceRules(rules1, false);
% }: p3 h( B5 a9 Y; Q: o6 K7 A& U        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
- ^% ]! }9 X% ~( N3 y. e9 a9 A7 Q        delete faceTangentRule1;
5 p" H8 Z( i6 a  f2 {, ^* T        2 ]. Y/ ?3 G2 V
        if (theFaces.empty())% V  L5 R5 d4 L: Z
        {4 R" ~* B7 I/ n9 n- Z8 {& x
                isTangent = false;
1 K5 s( ]3 N# ~: u8 i5 G/ q0 w        }5 [( j2 s- @% O8 h. q' P
        else
5 O- J4 Y, v! n; w        {/ J; I" H1 t- M! ?
                for (int i  =0 ; i < theFaces.size();i++)1 G' N! G5 L* S3 S  n' z" q" C! f
                {) b: s  M# b* e& V8 n  r
                        if (face2 == theFaces.at(i))
3 w3 m% H. j- s2 }3 S                        {
5 G% X- i% w# `4 {                                isTangent = true;) k0 G/ @2 W* B# v9 T
                                break;; |& @5 q! \- w- b9 q" Y/ M
                        }. D  J0 n- {9 Q' Z' f
                }
/ I' M! M) {. n: t2 x- ^! Q
5 Z5 R" S# k# H0 y- c/ \# h        }
6 ?/ H+ e. n7 g5 R' t" U        
6 ^( X6 H1 J; _- F        return isTangent;
1 h6 A3 W: ~3 J! Z4 j6 k' U$ k4 i9 i+ b
8 P" A# C  u7 p/ B8 y}[/mw_shl_code]
8 |2 m. X. A) ^  g
& X1 `0 @4 T. z6 T
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

licxsw 发表于 2019-12-24 19:06:37

licxsw 沙发

2019-12-24 19:06:37

学习了  谢谢 分享
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了