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

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:38:30

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

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

x

+ \; H- b$ v" E% X' T8 hNX二次开发源码分享:判断选择的面是否相切
* M0 b. L. a, w. j9 f
/ f( `! ~' Z$ M. I1 f, \, N- e4 l, Q$ S) J7 C
% ~2 ^9 A  \6 W% x
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
9 A) b( \4 w+ n+ G( G  q

- M! Q5 u; m, [! w# A. x2 R0 {
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
. m2 t  w, b) r; Q) u, M7 u! L" J
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。6 w8 N" b  z9 }$ O
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择

    4 y, j1 D3 C% Q! X
# C& ~; N6 |& c: S
                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式
    # s& m$ C% j2 b

    - q7 l$ e8 {$ ]0 ]                               
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式
    2 F. w5 p& S- f; P% I5 Y* Q

    0 t( r" ?+ j$ p                               
    登录/注册后可看大图

    / n' v- H1 t- J+ F$ H$ R2 l
8 b8 I! b) j! D+ Y0 q8 B  X
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮* {; s9 g% \/ x4 z) m3 l
9 b: Z2 b5 m9 Z/ I# G% N2 ]7 [6 A
                               
登录/注册后可看大图

) X) r; G% e: x/ }                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。2 I# T$ j4 w! `2 {5 d

9 A6 a" o& R8 H4 b1 Y" b5 s3 i2 M                               
登录/注册后可看大图
, w8 H3 S8 V& k; `9 H( l- [8 ^
                               
登录/注册后可看大图

) g- [3 N/ y3 f& t8 ^' H; F                               
登录/注册后可看大图
8 b! Z/ d0 X0 M4 E
                               
登录/注册后可看大图
1 r. {# y4 ]0 T  @2 c! J) A
                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。, H6 M; w; y- }( f- D9 s/ j! }( Q
* o/ Y2 M6 n- a# u3 \
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
% O" ?! G) ?% {7 W- {5 S
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;
                                }
                        }
                }
0 U1 F: @) V# v) l* g! S
        }
        UF_terminate();       
        return isTangent;
}

( M- v: P: N8 m3 q: L
5 Z) z5 j9 f# h
5 Z# s" x, {# P, h
1 ]" m# k" m6 |% j  S  v! _% c/ X" n
6 ^  L' R- @  K  l% s
                               
登录/注册后可看大图
8 R6 q4 I  L2 _$ c. z* o

4 J* f; Y1 L! ~0 l                               
登录/注册后可看大图
END
PLM之家plmhome
8 }* C: S! Q, Q9 s' `
                               
登录/注册后可看大图
) I, v! u' l1 l* G& f( a( Y9 O
▲长按二维码“识别”关注

6 T! I* r; |6 G- m# C* E- P% y) G/ T6 {$ v" e3 {5 y4 }
[mw_shl_code=cpp,true]
+ ?% \$ k, ?- [% |3 L& x& o; }; G7 d' f- |0 \  H

, E$ V% @. l/ D6 Z/ Abool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
" \, u2 K0 @4 t! g. F; E" F{
) u4 J5 |6 @- [! C# C1 e4 `# U& }% l: G" R9 i9 c: n$ ~
        bool isTangent = false;# c! c' a1 ^8 J" S2 Q
        int count = 0;8 a9 ?5 d9 D# T1 Q
        std::vector<Face *> boundaryFaces1(0);
6 B" m( Z3 E/ `. ]8 f9 `8 W; |        FaceTangentRule *faceTangentRule1;# F* }3 M3 h; M5 [* A0 [0 T
        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);( T& n, R, u5 \& m! l
        ScCollector *scCollector1;7 D6 |( d% R9 ?8 B7 g. K
        scCollector1 = workPart->ScCollectors()->CreateCollector();
/ y2 J2 x4 C% h: f5 |, M        std::vector<SelectionIntentRule *> rules1(1);
" L' t9 Q& E/ n        rules1[0] = faceTangentRule1;
% |; y* K+ f* L7 K        scCollector1->ReplaceRules(rules1, false);
, Q! `& n0 @7 o8 H$ j- }        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
) o& H8 |$ M6 [1 ]        delete faceTangentRule1;( h0 R+ o1 i/ r( q- m. |- T0 N
        6 |" q4 G, ?1 `6 S$ Q1 N2 V7 S5 m2 i
        if (theFaces.empty())
0 `, R2 q0 j' W1 T        {* S# w: Y2 \$ y. l3 ]
                isTangent = false;. n6 P, R& }# K
        }/ m" `+ o/ L2 [
        else, u' G' u8 R3 [2 I! C! D+ U; t4 [
        {
1 V2 P6 C' }/ M$ {& q5 U                for (int i  =0 ; i < theFaces.size();i++)6 q4 c! M/ x. k$ d1 [
                {/ ^; g) D" H3 {( M' ^" E( R# f
                        if (face2 == theFaces.at(i))
9 W" z, ?7 V  }' S1 N' m- J5 f                        {
7 {1 Z: e) i9 p+ B. Q                                isTangent = true;2 ]8 n6 o3 d; T( u; r
                                break;
: y5 k+ k7 \  S                        }& X9 |- F. ^) F: O" \; e
                }
) q3 O1 L( X* l7 p' c+ q6 E
! ?0 I/ [& l: H1 J5 f2 \, `5 S        }' h4 v4 a. r4 {0 D+ I
        5 Z  M/ \3 I. c3 K6 V$ R
        return isTangent;8 h$ b$ p, a/ `
3 G+ E- W1 s% s3 l6 I. d: N9 g6 _( ~. o
}[/mw_shl_code]) Q9 S2 U- V( \; L! _0 g% `
' ?2 g: k  ~  N, _8 z$ `! m  S
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了