PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:38:30

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

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

x

6 a# _6 K0 J8 `) b9 V$ V% TNX二次开发源码分享:判断选择的面是否相切. P+ Z7 p$ L7 r. G
" J9 ~/ J: `  D* D

. W& g5 N) A4 O3 [- c

" {2 h8 N2 R# v/ I1 G
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。0 K- q& G' {0 j1 A
% M: @: s# g6 i' z  O5 k
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
. R: j& }9 Z7 f8 P: {8 U+ F+ V( x. {  W
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。
: A$ T8 b: D" c0 t/ L1 B4 L% \
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择
    4 P$ |! F' P! ]1 \  z
% r7 n9 C# w& I
                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式
    7 H! W  ?( c6 i' w

    + z- l/ ~7 O1 x" I' @' H0 S' f7 h                               
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式

    ( g  l+ M, E7 k  {; {4 Z  s

    5 p" w% r, w. ^# \3 {2 p2 u8 R                               
    登录/注册后可看大图

    8 y# T& y4 j! z" x

- N9 ^; ^$ R, k. x
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
: P: ]7 l/ z, C" u9 g

* F3 U# d& g; }( h) ^                               
登录/注册后可看大图
1 [  ~/ R( v# V
                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。- v$ \$ T( @* f4 u% R8 v
1 l, h) j! O+ d1 O
                               
登录/注册后可看大图
3 \& X& B. x2 N/ y8 ?+ r
                               
登录/注册后可看大图
) x( N' X8 ?9 ?. d- y$ O
                               
登录/注册后可看大图
6 E% M* o0 \" B+ [0 ]
                               
登录/注册后可看大图
: F' ^( R: j+ E/ Z+ Z, \3 x) L5 I
                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。# E  D+ s2 {4 m" i) m
1 d* a& f1 p$ I" J
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!

5 G/ o( N  I3 W$ B# p2 G
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;
                                }
                        }
                }

; p' ^) ^+ k: ]" k* P5 }6 M8 E
        }
        UF_terminate();       
        return isTangent;
}
8 p) M- I3 [+ L0 p+ c- j
( j( ?) G& L5 J7 H. X2 B

8 l7 P, G0 N7 x) B2 G7 f* u( \3 p) |. ~8 r2 w" J$ o- n9 B

8 i- s9 Y; B+ _  h8 J, Z                               
登录/注册后可看大图
: k$ I" F* R1 S7 f6 o5 S. P

+ k; p3 b5 W# V/ q5 g$ W6 G                               
登录/注册后可看大图
END
PLM之家plmhome

" _' x; k9 g( n# K                               
登录/注册后可看大图
7 R7 Q7 ]" z% e
▲长按二维码“识别”关注
: `+ y0 }/ C2 q3 b, C4 A5 n

4 P2 [- j- r$ T# m[mw_shl_code=cpp,true]
# U5 U2 V. Y( ?& n; n9 P5 b; Z5 e/ Q" P+ @6 @
8 {$ X# ~* y& j6 `5 f) W
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)
9 E3 n# R; o/ c+ `2 p$ _{; m+ q9 [/ b5 f
% n4 w, m0 n% Z3 C
        bool isTangent = false;
  O/ p* ~$ G) a# ?        int count = 0;
' l% r& X' P3 N7 f        std::vector<Face *> boundaryFaces1(0);
3 z: F, `9 b  E' G* p% @        FaceTangentRule *faceTangentRule1;
$ X, P& \" d2 B; s" W        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);( ~9 v6 c& |# A  y! P: A4 m0 g
        ScCollector *scCollector1;
9 G' m4 }% c0 `1 }$ D8 D) |$ \        scCollector1 = workPart->ScCollectors()->CreateCollector();
3 _" t& l& @5 \& F: ^1 q        std::vector<SelectionIntentRule *> rules1(1);  {- G+ r: v" W4 }0 |7 ]
        rules1[0] = faceTangentRule1;5 y" \9 k+ H, }; F: U
        scCollector1->ReplaceRules(rules1, false);- F: L$ C- r0 I& M# {
        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
, l  \" t. P& D$ s" n1 S+ J        delete faceTangentRule1;  f3 ~) D! {6 L6 u; p: l- [
        
0 C: J+ o6 \6 R: z' U5 }        if (theFaces.empty())4 Z" |- K# ?5 a) x% C
        {6 X- f$ Q3 f( N' `1 @7 }6 z
                isTangent = false;
  E  J, p7 i8 N) t# f0 G        }& ?/ o, i8 v1 e/ G! f9 `  G% }
        else4 z+ q) w' i" ?1 b% c8 O
        {+ L7 e# o# @$ P
                for (int i  =0 ; i < theFaces.size();i++)5 ]% H% _6 g# F* o
                {
$ g$ T. d9 a2 H: `                        if (face2 == theFaces.at(i))- H' x; |2 M/ l6 G: s$ r
                        {
) z, l; I. k: e. ?9 e                                isTangent = true;! \" e0 F0 ^& p2 r6 D4 t' w! B
                                break;3 G2 ]* O' z2 \9 A
                        }( h5 ~3 i- \5 ]! [' h& A6 U
                }
5 C1 N5 E/ O) L3 w
; V" l- D. A% T$ i2 k9 r  z+ H, ]        }1 k& p8 y  t9 T& I1 h6 J
        
( {" y2 c; P- P: p( s/ h        return isTangent;
3 P) R4 F* _  D  Q. @( s& Y9 m: I6 Z/ n' Y1 n$ V/ R- j  G4 H
}[/mw_shl_code]
7 T& N4 F: r: I1 Y3 A" q
$ e: p2 ?; \: M) v4 ]/ h/ ~
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了