PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:38:30

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

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

x

9 k7 {8 Y" ?; J! m2 wNX二次开发源码分享:判断选择的面是否相切
. ]" F4 U6 _* ]* r* t) f3 J
2 a5 Y  U! ^' k- }6 S) W$ M; R1 P
9 h, f( h, z$ V* H# x8 U

# e  `. R, J. c
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
0 x+ N& T( _2 X& A+ y

7 y7 ^9 J% F+ @; T3 |$ W8 N
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
+ K: `2 S6 L8 x6 Y) [, F' a2 Y: H
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。* P' |$ N7 m0 j9 F/ Z& J7 I
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择
    ) L6 s# `1 G& B) N9 S, G9 |

$ U4 \6 P0 B" `! ]+ N4 o, w, W                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式
    0 i- {* W% ^" t8 ?
    , `8 |6 L) W4 x. |- G
                                   
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式
    . Y; x* A5 {) m% K, {, K
    3 Q& N1 P7 J, b  p- F
                                   
    登录/注册后可看大图

    + C8 S  G- Q+ ]6 r1 Q& r, Z) A

2 ~6 n9 U* _2 i' e8 J# G- f  ^
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮5 J" i! q" q3 C9 n& ^/ S

" n+ M9 S7 [2 i* c5 R                               
登录/注册后可看大图

+ |5 J9 M& e; V6 Y1 ]5 [                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。; j. ]" ~% }! q- u: V$ P
1 C! C3 l4 p/ d3 P6 i: |  }
                               
登录/注册后可看大图

3 k/ ^; Q& q. b+ v- R, w" J, P                               
登录/注册后可看大图
- m' T3 }2 M4 u- M& {3 a( |* M4 T
                               
登录/注册后可看大图

& ]. S* l3 `! ]+ A5 i" P5 c                               
登录/注册后可看大图

  X; V4 Q0 ]# w/ l) E9 G- T1 `$ [                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
& r/ i7 u* ^: E5 I- \

: Y. `( p& U. d, S% L; }! @
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!

6 j3 m" K: K+ S5 u1 V/ x  ^
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;
                                }
                        }
                }

! e& h# s4 a) \! `; B; `3 |3 k$ g8 s
        }
        UF_terminate();       
        return isTangent;
}
( G! S) n5 q& K6 Q( W

9 u' Z& X" I- ~! S$ X
  p. Q# d* T  F( R
$ u: s9 q; v9 r7 @! {! L
1 F/ K6 L* F( ]
                               
登录/注册后可看大图
" `9 ^! z  \5 q  c) y6 c8 R

+ u% s4 y8 Z. ^$ |' k/ N3 z                               
登录/注册后可看大图
END
PLM之家plmhome

/ L$ Q: t; f  A( P- ~3 Q7 {                               
登录/注册后可看大图

3 P& q% c( O/ z, O8 ^  S: h+ r▲长按二维码“识别”关注
! n7 {5 y+ T0 E( T# V
+ S; x* H- W' n. a  p
[mw_shl_code=cpp,true]6 ]4 `2 P5 ]2 k. \' F# p

9 V' P. G% i# q! Q+ f$ a: q$ ^- j% l/ H$ |) p$ p
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)/ o; ?9 {  v) ]0 h1 U# z
{
* r3 E* I2 O# ^
8 F) X; u% k$ P3 g4 x& r! M        bool isTangent = false;
( v6 A8 h, j3 L1 i, J( b        int count = 0;9 Z% t* t6 T& p: m
        std::vector<Face *> boundaryFaces1(0);! e. Y1 o5 m! U5 l) _* |
        FaceTangentRule *faceTangentRule1;
1 L2 }& i8 t7 L9 k5 G$ n        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
: e; C3 a- K0 b/ z( E3 g; ?; d        ScCollector *scCollector1;0 G, c+ F2 \" z6 g, \: |
        scCollector1 = workPart->ScCollectors()->CreateCollector();& l* H$ z& S3 k! O3 ~8 z
        std::vector<SelectionIntentRule *> rules1(1);
4 z, k) @+ n( t6 A8 \        rules1[0] = faceTangentRule1;
2 w: d( j% Z! U) f! Q; v        scCollector1->ReplaceRules(rules1, false);
' p/ N0 o$ x6 N! X* U        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();# u/ k( G7 ^( ?/ C* \6 p
        delete faceTangentRule1;( F$ I1 L1 W6 g2 X, t5 D: h
        
0 ~+ `1 E  C0 Z" X# g. o        if (theFaces.empty())
- O4 W. U1 k( d. ]  k        {
/ p$ Y; \* J( |# ~2 m& T                isTangent = false;" ?1 |8 @4 @3 R# L
        }1 H" h& T) }0 x% N- |' m" S
        else
4 |1 A+ i8 {- y4 B        {" [8 y7 i9 K/ y8 l9 e# {
                for (int i  =0 ; i < theFaces.size();i++), P' A& S+ z6 w9 T- U
                {1 n$ ~+ j$ r5 r: L" e7 @
                        if (face2 == theFaces.at(i))
- j* C# q, J$ S% h                        {+ T- x% J. k( |1 B' k+ u
                                isTangent = true;1 G2 t' D, V: S3 }" V0 J% D; C
                                break;8 M" }; q; }8 X  L
                        }! J4 I' A& T; t2 ?; q# S2 s
                }
8 `+ A6 K& K" S
1 B" N, X! X- l7 G* k3 }        }* c8 y& c' A. M( g* K
        
9 v% H0 {0 x2 S' l3 q0 k# @+ s        return isTangent;
0 E5 q* d% ^# Y; ^
5 [4 A) D0 {. i; z3 W}[/mw_shl_code]
3 M; y" |  O) R
: a$ {2 a5 x/ z% w* t6 M: D
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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二次开发专题模块培训报名开始啦

    我知道了