PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:38:30

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

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

x

/ H; d. r; e6 b) v& _6 i8 f, e6 y" `NX二次开发源码分享:判断选择的面是否相切2 ]3 v. A8 Z" r; s( M, t* M: M) I
1 N# z* z) i& t$ m, X, a# [: p

  c0 u5 e( r; T

+ ]5 s) _6 F. L1 o/ i
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。
3 ?* R1 K& G9 o- P

- k3 s) f- N/ C3 p2 T* v& d2 C1 c
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
  j' n$ O$ J) t; C. ]$ `( I1 o. S
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。
. s+ p+ Z6 O) ]( i' T
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择

    " e# J' D) g1 H7 @

5 Y2 ^7 L. ^9 o0 q                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式
    " u  C/ ~) v. l2 r5 j6 v
    7 G" j! ^% F7 s
                                   
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式

    , N$ P- F* ~- I
    ! J) Y3 g% f$ C; Q
                                   
    登录/注册后可看大图
    9 z: G1 [; B; [8 n; c9 y

  W& [- i! k2 O* x) Y( C9 e
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮( u( r8 y# N$ n6 I6 a3 l
, T: K4 p9 t0 B  Y* h) J' R
                               
登录/注册后可看大图
! y; q$ {6 S2 V& J
                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。
7 }2 ^* ~/ \7 Q& X$ h& b+ p# w- o
6 N8 n, b$ N" w. T6 z& }* l4 \3 T9 L
                               
登录/注册后可看大图
/ ]1 b6 ^" [3 [; T3 m- L: ~
                               
登录/注册后可看大图

* s" b) G; j& ]  x3 [( R2 n8 w9 K                               
登录/注册后可看大图

- B! c! ~. ?" ^- r2 ~3 ~, x                               
登录/注册后可看大图

5 E2 j. C" ?7 C4 @: |' k+ A% i- g, D                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
, M+ e  L( y# I4 s; Q" L

7 m) S, z* E) R9 ^8 W
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!

) f3 M) s" P) s- X, l7 `4 Y3 T
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;
                                }
                        }
                }

, Y, X& J: O: O; x0 R' f
        }
        UF_terminate();       
        return isTangent;
}
; h0 e. M/ [- _/ g7 m- _

; y+ a& \! T: F$ E1 M
% V) t8 \$ ]# ~5 a6 t& v3 F: ^; S. Y& c0 N+ l" ?
5 u8 T1 Y: S- B; o6 y; J
                               
登录/注册后可看大图
" }* H3 b/ h4 U  b( d; ~

6 d4 [! r, u& L' t- Q                               
登录/注册后可看大图
END
PLM之家plmhome

0 E' Q. Y  L" e4 P' ]* z5 M                               
登录/注册后可看大图
3 A4 \# x* P/ _" K5 N
▲长按二维码“识别”关注

. s  O1 k2 u' N/ \, f! C$ q. ^
: A7 L4 n! D3 |, Z4 e, t8 T- j$ i[mw_shl_code=cpp,true]+ D) V  `5 M& E% u' |# y# l
) R& Z1 C) m) M
2 ^8 v9 T& _' l7 P2 Z
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)2 w2 o$ K/ L* f" m* j) j- I
{
3 V* ?' z! z" D$ W2 j9 j& P$ F. X- }7 @$ Q
        bool isTangent = false;
3 K/ T0 `; X  Z2 t; y2 F        int count = 0;
" x) @4 w7 L6 V. b9 E        std::vector<Face *> boundaryFaces1(0);' V7 f% @5 f9 o! B9 `
        FaceTangentRule *faceTangentRule1;$ v( h( b0 ^  m9 h4 ^1 P
        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
1 Z( E" r) N6 }" o& ?& p" @        ScCollector *scCollector1;7 f+ A1 ]. A# s4 O) I
        scCollector1 = workPart->ScCollectors()->CreateCollector();
3 O* D4 z+ D* K+ q7 n0 ?' N" \        std::vector<SelectionIntentRule *> rules1(1);
  y! i% L$ v+ c! o2 u        rules1[0] = faceTangentRule1;
2 m! F  g% O- F( l: ]/ w3 b2 G        scCollector1->ReplaceRules(rules1, false);
" c, o# [0 k! j4 ?8 s% j; Q        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();
; L6 Q3 h1 A" O9 i, r0 g7 x# k1 j! m        delete faceTangentRule1;
4 G) J6 k# m* c; v        / T) n0 b( |1 {/ y( |* S+ R
        if (theFaces.empty())
' P. ^# H" W* I        {
* J; r. |! _# m! S* b( Q% b5 g                isTangent = false;4 ?; L4 M: U- ?. D4 b! s6 T; b
        }$ F' x+ A% V9 W9 Y2 [3 {/ {  l9 {/ u
        else: {$ ]# T" q8 r: E. r5 m3 g( a
        {4 V3 n% w4 K- h. Q. c2 u
                for (int i  =0 ; i < theFaces.size();i++)+ }1 f. l% g. }/ I1 X
                {
8 a3 a: j! ?/ q) V& ?7 c+ f) ~                        if (face2 == theFaces.at(i))$ d+ [8 T7 B# [8 C8 b: [  C
                        {. E% F8 @8 j! h7 p7 @. j6 _8 G1 e
                                isTangent = true;( U, T8 O9 k% `; m. Y' }
                                break;
: i+ m, f) G2 H, Z( _8 O                        }/ [3 P+ E: H$ b: y% f2 S# }
                }3 s8 ?7 D; B, D+ e0 Y. L

0 t7 K+ _7 p/ x- K, U$ B4 C+ m        }# d$ B8 v" w& p2 R* O
        ! R% @2 P8 d3 X: t/ _  s
        return isTangent;
' W6 Z: o1 \) N3 r
8 M& t* A. M/ _}[/mw_shl_code]
( V, a4 V4 C$ }+ H- `$ `. I
& _6 ]0 d( I( S# u# A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了