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

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

admin 楼主

2019-9-15 08:38:30

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

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

x
% f+ t  z* Q0 a9 V6 H
NX二次开发源码分享:判断选择的面是否相切6 v  b7 y& H  ~* O

& J$ t% T) L/ S$ J( \7 }* J7 k6 r; a
/ ~4 M- h% I, l# Q) x2 T
通常情况下,我们需要通过输入的面获取相关几何关系,如果两个面是否相切,目前并没有直接的方法去处理,如果通过自己去构造一套相切算法或者标准去处理,显然太浪费时间,而且结果是否适合,性能是否ok,都值得考量。5 G2 n3 D; T3 i
. N$ C0 E' ]! X9 X
接下来我们来给大家借用目前强大的选择意图功能,来利用这个特性处理下,其实大部分几何关系都可以捕捉,掌握了这种技巧,其他的选择方式都可以以此类推的进行相关处理。
(1)先看看选择意图 Select Intention中的Selection Filter
+ ]5 u/ E9 H# Z" v
选择意图主要是帮助用户在界面上进行相关对象的选取,比如选择范围,包含有整个装配范围,装配和工作部件范围,仅仅工作部件范围。选择过滤主要是针对当前选择器的选项进行相关类型的过滤,目的是帮助用户快速完成相关内容的选择。; N. ?( w9 K/ g! x" ~
譬如:
  • 当您选择曲线类型时候,NX会提供曲线相关选择
    9 x  {1 \1 Q! f7 I. I
# _$ w6 u4 ]0 _+ O( Z
                               
登录/注册后可看大图
  • 当您选择边对象时候,NX会提供边的相关选择方式

    ! Z6 H  v6 ~6 }( d6 A+ a

    $ {: `- D  w( I% s. j+ z3 [( l                               
    登录/注册后可看大图
  • 当您选择曲面时候,NX会提供曲面的相关选择方式

    # G3 h8 _  }. {* z- m: b
    ( l5 F( V3 w' K/ J* H  o- z! A& ?
                                   
    登录/注册后可看大图
    2 s. Z8 M! Z6 |6 c5 Y4 n
& R4 i! X( H8 F! w9 j4 q4 m% w
(2)选择相切面的效果,如果我们选中图示高亮部分的面,通过Tangent Faces,系统会自动获取所有和这个面相切的面,并进行高亮
( v. n8 U) h% u4 y( A

) v& |" u! p! ?                               
登录/注册后可看大图

+ F# I6 a5 H) g                               
登录/注册后可看大图
(3)代码中思路就简单了,输入的面获取很多相切面,只要要检查的面在获取的面中就够了吗? 显然还需要一个条件,就是两个面之间要有公共边,也就是说是相邻的。以下的集中测试结果,高亮的面是我们要判断之间是否相切的面。; X3 ^5 \$ b, T, x: F# v3 P

% T6 f, s) r! o9 l4 |  @                               
登录/注册后可看大图
" p, J+ `9 t& k0 ~0 p
                               
登录/注册后可看大图

8 B' x8 X# K- \/ d                               
登录/注册后可看大图

& }5 D! w2 E- B5 P' _7 K                               
登录/注册后可看大图

9 ]: O1 j8 |& Q# N, T  d7 u                               
登录/注册后可看大图
(4)这种方式是非常高可用的,如何通过选择的面快速获取Slot faces,获取Boss Faces等等都值得使用。传统的做法,可能去遍历所有的面,通过面的法相方向,边的关系等进行处理,如果合理使用现有的NX提供的方式,可见更加快捷方便。; z/ L; Z, E# |: i. X  U9 i

+ T: ~+ m% f3 C4 {2 b7 z4 V
最后把这段代码提供上来,仅供参考!
PLM之家NX二次开发板块,提供了很多源码分享,感兴趣可以常去看看哦!也欢迎大家发帖,提供好的案例分享。送人玫瑰,手有余香!
# x9 L4 r- P5 B  z) |
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;
                                }
                        }
                }

! V9 H1 F  a3 A9 x+ q; y
        }
        UF_terminate();       
        return isTangent;
}

6 N( c' S1 z; T# I, b9 |9 V" L* n8 I. i
: i+ K0 W, H" O

4 P- c1 h- X% F& x% c; t

  p. r( N9 I5 R0 _0 X( s                               
登录/注册后可看大图
/ H- l  n( V) S& i  ]# R: Q) e3 [

( p" y1 B9 ?' p& |                               
登录/注册后可看大图
END
PLM之家plmhome

; N% r6 b! t0 C7 y3 I6 @9 _                               
登录/注册后可看大图
- _7 K4 Q% s6 Q& \5 b) z9 g& U
▲长按二维码“识别”关注

4 \+ q! ?* {1 n( L3 F, b  V
2 B! N6 O5 R7 _! g6 _+ h" }[mw_shl_code=cpp,true]
0 M. S. i' l, K7 T) J$ V$ i. [! L8 n0 D, t; Y+ U9 U

  c4 }, A  t4 Y7 s; \! r) h1 I) j% Ibool CheckDTS::isTangentFaces(Face *face1 , Face *face2)$ `; g  j6 S* I% x+ j9 `
{) i" ]" a0 f  {! o

6 ?9 I( F) p- \# [- p2 F2 W        bool isTangent = false;
! Z: h8 ^- x2 K! h        int count = 0;; @0 \) H' G6 U- `
        std::vector<Face *> boundaryFaces1(0);4 t/ [# O/ r, S; c8 o5 J- }
        FaceTangentRule *faceTangentRule1;. W* L2 [9 h. _
        faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1);8 F; S; ]6 h0 [
        ScCollector *scCollector1;
* o1 d- q  Q0 C4 x) L; c/ c+ ?; ]        scCollector1 = workPart->ScCollectors()->CreateCollector();0 w# x: j' Z0 z
        std::vector<SelectionIntentRule *> rules1(1);
* k3 @# I# S& |- @& Z; D        rules1[0] = faceTangentRule1;
( J; Q) Q0 M6 e% a. O; M        scCollector1->ReplaceRules(rules1, false);
% T( s6 \8 N* [; J- x* H/ k$ x        std::vector<TaggedObject *> theFaces = scCollector1->GetObjects();" [) }8 n* T, |( B1 m/ J7 e8 S
        delete faceTangentRule1;5 R$ K) A1 k6 q3 d6 B, j) I/ o
        ( L# b# b8 O/ t' k  M: b/ {
        if (theFaces.empty())& n# v$ p, F0 G$ {8 p
        {" g6 S& A, Q' ]0 y$ b
                isTangent = false;
0 n. F% r2 S% t& v7 V* r        }( ^$ V# Y3 }+ |% R  P1 Q4 e
        else9 @# q) I: d' h. ~4 |
        {
2 ~4 f3 ^* y( L& M" d6 o( Z% S, ]                for (int i  =0 ; i < theFaces.size();i++)
! l. e* k9 G& U- f7 J5 I                {# G' ?$ w7 e- P
                        if (face2 == theFaces.at(i))
) m( E* N9 r' k! [. ]: t                        {
6 G* x6 h: o' b8 k. X! q- }" l                                isTangent = true;
7 `6 K( k4 L* ~3 I( \* k( x" C                                break;
7 P' a# P4 @: p% r- O$ \* j+ a9 k                        }
$ v' c4 Z; @  @, z4 U: \                }
+ I% L% G* W4 z" q$ u0 e3 }( e3 @/ S/ @% |# y4 O  T" L# O. n: ~
        }
9 m. [5 s0 N0 m- {) R        
, L/ |" E3 G% l& A' [        return isTangent;8 i3 l  w: e4 l9 ~0 x

4 b1 o$ ^* Z4 h! ~}[/mw_shl_code]# \5 w* J# ]* n0 ]1 k' n) D! K0 O
% T$ i# |+ j+ h5 k" S2 B) S5 P' o3 [
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了