查看: 3208|回复: 1

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

[复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

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

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

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

×
( N% r7 [: Z* o1 m9 H
NX二次开发源码分享:判断选择的面是否相切2 h' ?6 K! [' |5 I! E+ y

, F, B0 Y) M( m* I6 F4 N5 a
& s$ I- T! _" v
​
+ G- o5 Y. Y. e9 I9 K; c
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
% {8 @( x5 R, j! P
- f6 U$ D, d  a/ H9 Z& G
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
- H2 m5 f  Q8 L8 z. K7 z8 {
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。2 D$ {5 d4 X$ U9 r
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择
    3 G8 @9 Y* A5 O

/ j' [- L8 ?8 ?% T                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式

    6 L0 u4 J4 Q/ j3 X8 {. w6 ~

    9 a/ ?/ \- G, S# }% y& K0 u                               
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式
    . n" u1 `/ B8 L

    1 k! i2 Y! T! u! H                               
    登录/注册后可看大图

    1 u4 o" j- T$ k% A; J* b
& E/ k$ S4 E; i7 r) e
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
& {+ Z4 ^0 [1 V1 t! l+ X+ H* x

* T- \4 ~. U, V" X  |% M  N1 Q: [                               
登录/注册后可看大图

6 r% r1 d1 e" K! n' |- _/ p                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
- N# `8 C4 W5 z- N- i

% u4 Z2 `1 S! r4 F' q                               
登录/注册后可看大图
, G) W/ J9 ?5 j" g0 ^: F3 }
                               
登录/注册后可看大图
/ v% f) ]1 x9 X) k- i6 [9 e
                               
登录/注册后可看大图
# V$ |& ~" R, u) \4 ?0 j# z8 x( {
                               
登录/注册后可看大图

  F1 N/ i1 R7 `0 d8 z" g8 Z- P                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。6 z0 U& m( v9 w/ k6 B
  E+ |: z' _6 d
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!

1 H2 i. x8 E6 s1 l, d. h! s/ y
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;
                                }
                        }
                }
  m: n8 q- ~/ C$ C
        }
        UF_terminate();       
        return isTangent;
}

7 k% k+ G- K& `7 R3 a. D% u. [( ]1 [( w

2 f0 ?/ a1 `1 H" y! B, U- {/ b, J: a/ Z) w4 y+ g) ^0 |) W% Y; D+ e$ o

. ?& B1 U$ J) s6 I+ |7 R7 W+ L                               
登录/注册后可看大图
5 r( s2 ^$ `9 l' |( ^
& l2 [8 ^$ G8 Q3 n% z
                               
登录/注册后可看大图
END
PLM之家plmhome

4 n! P: {, h# d  q! f% s* Q) U                               
登录/注册后可看大图

4 j1 U, O, k$ c▲长按二维码“识别”关注

1 i0 b2 v5 N% `- h- G3 _2 Z" g
8 m4 W/ A, {% {4 K[mw_shl_code=cpp,true]1 E9 z9 I  i8 @. H4 j
& ?/ b) \, l+ W2 {- M' N* Q% M2 H
$ t% r" h0 Y3 j6 n* Z
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)2 K; O7 j8 C, d) l- L& P
{' H1 Y0 l: t9 `8 D

; z/ F) u% H, W        bool isTangent = false;
. T, c2 x( K( q" F7 A; m! y        int count = 0;
, g# M  l, e7 N0 |        std::vector<Face *> boundaryFaces1(0);, b  E% u3 w5 r0 {) b; _
        FaceTangentRule *faceTangentRule1;' e# Q" B8 p5 u) a$ Z8 h
        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);  w# W/ L; }6 o4 f5 F
        ScCollector *scCollector1;. T1 R+ ~4 U5 d. E
        scCollector1 = workPart->ScCollectors()->CreateCollector();
( H; c: B* ^7 A! d& B. S        std::vector<SelectionIntentRule *> rules1(1);' R7 A$ t* Z/ Z/ p
        rules1[0] = faceTangentRule1;& t3 A  j# x6 q# R+ s9 v4 ~
        scCollector1->ReplaceRules(rules1, false);
; {; G" v, T  m7 \        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();" U4 g6 Y9 N# \' b. C/ p8 ]( e
        delete faceTangentRule1;- J6 \! W. y# t5 s. E3 z( I
        # D4 I! G( X4 f+ d# {$ D& O' ~2 o! }( G( Z
        if (theFaces.empty())
7 h( l/ ~+ Q9 e. B3 g        {, i6 L% b8 g" J8 w  Y# v) G
                isTangent = false;
1 j3 k; [& M0 ]' a& m        }
% Z+ P! l* l, I7 d/ ^        else
! `) K) M/ {' A! U) ^2 y        {
  V. Q& ]& W6 R                for (int i  =0 ; i < theFaces.size();i++)
; v1 p% z7 s- [) H$ Y                {
/ h* y% o8 R2 w                        if (face2 == theFaces.at(i))4 g6 t8 L& c. \0 ~6 r+ F
                        {# q# b" F6 p; k5 y. D5 z# s% H
                                isTangent = true;# O+ N. `$ |+ [
                                break;- L" L5 x0 R, Q" t  t& ]
                        }2 E( l/ `; N' g& R& `% b5 G
                }! c9 ^7 C4 X) {& Y: q5 q1 t$ J
% E; T; y0 _  l( \9 B
        }
/ \3 w7 P7 h7 ?. q+ u: n) j        4 ~# `+ _5 j' m
        return isTangent;7 J- v( M+ z' ~: W: i$ \2 K: v; t% m4 z

6 z+ H5 U" A! m! z% w8 D2 k) y}[/mw_shl_code]6 v" a) m. J- _$ }" F* f# x

1 N/ F* Q( S! ^; P9 g
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

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
回复 支持 反对

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部