PLM之家PLMHome-工业软件与AI结合践行者

[二次开发源码] NX二次开发源码分享: NXOpen C++获取面的面积和周长

[复制链接]

2018-9-11 21:23:07 4405 1

admin 发表于 2018-8-23 08:19:35 |阅读模式

admin 楼主

2018-8-23 08:19:35

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

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

x
% y2 I4 S5 R, j9 `. |
3 j- z" Z; @& u
NX二次开发源码分享: NXOpen C++获取面的面积和周长
0 ^+ {- r% i; l) P+ S$ q
* {- C+ p2 P5 F( m1 L/ _

2 j. s) p! R: W4 G9 u7 T! j* e
$ ~; t6 H9 ~6 u% X
. o; O: n' A) V/ I( J/ g
; [" V( L8 H/ `& X* C% Q
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
$ ~( C; W& l- r{' q7 h" |& Q3 J: ], _; `
    char str[256];
) h# H" \7 l) ]8 G        # _. M* m+ Q7 v% P
    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
! Z7 H5 `+ u" {# b4 Y) U    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
5 [% _2 Z# w: G7 f' x7 T6 H5 T3 ~  U. X) g! ?, u. W3 h/ h' O
    //FaceCollector issue is fixed in NX9/ x& j& L, _: P; x* Z
    NXObject *nullNXObject(NULL);
+ V9 Q$ k6 ?2 Q* z! Y+ b    MeasureFaceBuilder *measureFaceBuilder1;
; V9 n" t" p0 x2 }  |1 c. V% |    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
7 U0 x7 M: E6 X( I/ ^3 o        
: o; y6 W+ U5 K+ z1 ^    Face *face1 = dynamic_cast<Face *>(face_tag);7 k! N0 J& Q8 D: ~+ }6 ?" }
    vector<Face *> faces1(1);
. m5 x7 F8 B7 b" y6 R1 w3 f& b    faces1[0] = face1;
% n" `9 _: u7 t: ]) j" y% R3 \9 U    FaceDumbRule *faceDumbRule1;! ~! v4 c6 z# Y  _4 U
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
8 l" A/ W/ M5 @3 O6 M5 v    " p* U; j7 K" P1 s8 W" k9 Q
    std::vector<SelectionIntentRule *> rules1(1);  T& w) h$ M- t# F
    rules1[0] = faceDumbRule1;
, ^5 Q! h* n; V2 O0 E5 H! C- L    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
$ ^% v( ~0 g- E1 E8 u    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();! {' j9 c7 P1 k. x( L0 z9 Z

7 j3 T' ?1 ^1 P! E    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();* p8 `$ S4 i: J9 w! Q% p# I
$ q1 D3 ?4 x& p; O% l
    MeasureFaces *measureFaces1;
( k5 r; j2 N6 W% t" f4 y    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
1 M9 @/ v: T0 _& X; s( G7 K5 d9 S5 z8 K1 j6 r. x, ~
    double face_area = measureFaces1->Area();3 e, n  \5 u8 `+ P: n
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);1 |) B& ^% q& ?, n' s/ ^; ^$ J3 X; U
    print(str);0 }. |3 V9 z& V* e1 s, p
   
! X: r/ l. C9 Y  T/ N' f5 u    double face_perimeter = measureFaces1->Perimeter();
% G% z1 A6 G( b+ E2 M) G# F, \    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
* \- V: y( i' y) K5 l' [$ Y    print(str);
* g2 K; }. O2 O( {- E) ~: m
" g: l9 L1 {3 `2 V/ N7 }    delete measureFaces1;   $ G2 ~$ C! D- c% {! `
    delete faceDumbRule1;
0 q1 s+ K' F& [$ J    measureFaceBuilder1->Destroy();
; M: @- ]* b5 m; {    return face_area;
# h. e, h2 P5 e' p+ q}
- M1 q/ A9 {' m. i! a: u" R: X8 E[/mw_shl_code]: D5 n! T% r7 G0 [2 n. }
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

rkc_555 发表于 2018-9-11 21:23:07

rkc_555 沙发

2018-9-11 21:23:07

这个方法我试过了,我8.5的版本好像不行,计算的面积为0,可以直接创建measureFaces对象,用另一个重载函数,只要两行代码就能计算出面积
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了