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 2327 1

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

admin 楼主

2019-9-15 08:38:30

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

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

x

& T0 X$ A7 r: |NX二次开发源码分享:判断选择的面是否相切
" S+ J2 e8 j5 k. C3 Z1 J3 v
* L# b; K. G# B8 s: W8 U, \& O" `
4 T( M2 R" t! m
8 R0 M) J9 S: d1 v2 g! D$ G! s
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。) r) f- T5 u7 T! J
. x' @+ X9 G7 M$ @5 I
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter/ x3 V  l2 p' {4 R% B  o
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。! w5 U+ N; ]& H1 u# T
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择
    - |" U8 D( l0 r7 |1 y
. @( f; C8 v$ a; P2 ~. E8 A9 I
                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式
    / G" X& j# W+ s; J  `
    8 s3 m9 y  o9 w4 S5 K0 A8 l+ Z
                                   
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式

    + h3 D8 }9 s# b, p

    % T/ Q& B% |" H# U2 I& y                               
    登录/注册后可看大图
    ( N8 S5 S3 F9 g8 r. c: @* L' E+ X  O
; h  o4 P" A% K- I9 c1 A
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
$ X, q; V, g, P3 ?& H6 r5 U+ [

6 j$ G' S( V- ^! [1 h                               
登录/注册后可看大图
; }( d: [1 `5 ?8 t9 |5 ~, z
                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。; L9 D2 h! D2 L! D5 Z

2 Y9 c! G( S; }# K! i$ @6 x; U                               
登录/注册后可看大图
9 d/ N- f1 }/ s  H0 u
                               
登录/注册后可看大图

9 Y6 k& g2 T; i! t/ n: A6 L                               
登录/注册后可看大图

; T: O9 f  {7 F2 T8 M- B5 s* z$ \                               
登录/注册后可看大图
9 @9 i* @4 D/ W4 i1 y
                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。
$ _0 y# L& u' r- \+ r0 n3 h
+ a; {% X. a2 _: E; G3 S4 N
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
: E/ f6 {3 m  |$ g" \3 i# W
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;
                                }
                        }
                }
2 j0 ]0 w2 {- C; W/ ]
        }
        UF_terminate();       
        return isTangent;
}

9 `* q, G9 h& w
+ d) g2 Y8 b: R3 B* J3 ~
  t& s' {/ w" {9 k2 d
5 f' a/ U! o' W! h" o$ g, s. I
1 ~2 q  D* _9 y9 \
                               
登录/注册后可看大图
1 ~- u( E; T2 W/ X
- i) W$ R# D8 V; g* y
                               
登录/注册后可看大图
END
PLM之家plmhome

9 }! w3 x( w4 Y; r6 g: k                               
登录/注册后可看大图
  F2 ~% ?+ i9 i( B: T8 ]
▲长按二维码“识别”关注
& O% A6 h" ~. r9 h0 v/ i8 e

" s6 L8 L$ n" t# @/ M- G[mw_shl_code=cpp,true]6 [5 B1 @) d8 c

7 o; X/ A0 @5 I" K# M4 D& F" o/ k# s) q2 z* l& Z
bool CheckDTS::isTangentFaces(Face *face1 , Face *face2)# j7 m* ~% y* A
{
2 l8 a( D0 K8 Q7 L' O+ ?/ N* E  `' i1 T- U: D
        bool isTangent = false;
# p0 h+ y" J& H& h        int count = 0;
1 z3 h/ O" V) _6 y' i        std::vector<Face *> boundaryFaces1(0);. z3 r- |9 I+ S! X& H+ D) U- S9 l( T+ p
        FaceTangentRule *faceTangentRule1;2 a) I: ~& Z4 s5 ]+ V+ A& G! z
        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);
0 A/ O( D2 ~' L  J        ScCollector *scCollector1;
0 z$ T, k' n& Y. y/ h        scCollector1 = workPart->ScCollectors()->CreateCollector();
0 Q7 P: H, Y( @  P& C$ A4 |        std::vector<SelectionIntentRule *> rules1(1);' _/ v/ L2 ?% o+ K; E5 q
        rules1[0] = faceTangentRule1;
) E1 S( J+ y4 S4 \1 \0 d8 e        scCollector1->ReplaceRules(rules1, false);# x1 d+ I, J# M, ^
        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();" L: x! u. J3 t: i; z5 D* d
        delete faceTangentRule1;6 M% f8 I/ C' ]( n1 M/ L( U
        1 [( |8 d7 A. d: L. s9 `
        if (theFaces.empty())
! }' `1 \/ p  U% _        {* H8 N. [; {9 g- r
                isTangent = false;/ \. `  F" k9 D& Z
        }
0 U0 |3 \" t0 ^% d        else  ]3 ?3 @( }. v" l
        {
/ ]3 h8 z7 `7 p$ [4 m6 t                for (int i  =0 ; i < theFaces.size();i++)
, G7 k6 g8 g; t                {# O. V: \/ x" i
                        if (face2 == theFaces.at(i))) T2 A: N$ V# f5 Y
                        {4 ]! }  M0 s3 g0 G, ]6 C
                                isTangent = true;
  W2 c+ Y  B# R4 ]                                break;: d( S9 r/ ^' I9 L
                        }
7 p6 p) A9 v; ?8 F9 A( k5 b                }
; _' H/ T/ M5 ]0 W+ z0 o. k  p" Z/ W# W) d/ w' y
        }
0 P$ H4 A: _' z( ]- `( ?# h        2 f. ]) `# v% \2 a% }8 v
        return isTangent;  R! p! C( r- k' }: I

" M- W* {8 Y6 z+ H8 P* w9 n}[/mw_shl_code]
, ]" U' z7 b8 D' F1 y& T% q# E8 b' @: E; ^! l
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了