PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
$ d$ M8 L( j( ]9 r/ a
) n+ x- G: s7 q& B8 ?
NX二次开发源码分享: NXOpen C++获取面的面积和周长: q% R# _# P) [1 t
! _( W. W$ D2 n- V7 ?0 {4 r
6 m, l) |. `( S$ H5 N+ B

" h1 \+ p8 B2 E: s& U
: ?' J- @! _7 i" _; d/ l. y
7 j& ~7 q, j' s$ z) U/ R" e5 L
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)* _9 [$ J1 ]# b0 I8 y4 ?
{
9 ~  g/ b! I: C, M    char str[256];
" y" g' f% j5 o  m0 W& V' g" \5 Z        8 y; |3 |+ _( d: c4 b6 @7 ]
    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));- W, G* g2 ], K- F( \
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));4 u4 u: ]! `. T5 S& ~. |% L
4 M. O( n1 I& E0 ^3 e2 e9 m; n# j, M
    //FaceCollector issue is fixed in NX9; o9 O. {: B# C; }3 x
    NXObject *nullNXObject(NULL);
) s, q# M  Q: C- \8 }    MeasureFaceBuilder *measureFaceBuilder1;( w( M( y3 M- h+ e' l! ~/ N: X
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);" a" H5 i/ U! E2 }
        
6 l7 \- A, i: t* n# \! p7 U9 o    Face *face1 = dynamic_cast<Face *>(face_tag);
  K/ D6 \  O, S3 H: ~8 E2 v    vector<Face *> faces1(1);% X* c' |) V% W
    faces1[0] = face1;
: J$ }* ]- m2 T, N    FaceDumbRule *faceDumbRule1;: z1 i4 }) y* l% {
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);8 A5 N' v4 q2 G* M$ m4 q1 e( e
    3 o: \% c! h  K6 s5 r* M9 n
    std::vector<SelectionIntentRule *> rules1(1);
$ H/ a1 Z8 E; x6 L9 I    rules1[0] = faceDumbRule1;8 n$ h0 z- b) M9 m
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
0 i  b6 u. T# C/ d& o6 [    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();! N9 h8 c3 U, C
3 g, o# L7 C5 ^$ i
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
2 k& p1 h, D; D: r1 T8 z) p0 S: M4 H1 x5 `
    MeasureFaces *measureFaces1;+ Y! _1 K) J6 }/ L  T/ c/ i! Q
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);. h; A0 T4 ^- u

1 y% X+ ~# U5 ^) I, s7 r4 \& \    double face_area = measureFaces1->Area();
1 ~' O. D# a- j8 G" f    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);* e# \3 X6 Y* K! d7 b  ]
    print(str);# i) u+ f( m% c! e) X3 U
   
5 }# O% R  |4 X1 p2 Q9 |    double face_perimeter = measureFaces1->Perimeter();
+ g/ s0 M7 ^3 W+ y    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);- O, }% L  R/ u8 r" c
    print(str);
3 m. p2 o! u" b+ z, H* f
; r5 V. B/ T/ F+ Q0 X; R" {# P    delete measureFaces1;   . U" _9 I3 t% \
    delete faceDumbRule1;
7 M; m& U' P! t, {* D# c. d$ N    measureFaceBuilder1->Destroy();& V; Q) I( C8 G5 ~' ?8 t
    return face_area;
$ L: k% ]1 n: {9 Q) M# L}
8 ~, S8 k0 s! m9 e7 k  x[/mw_shl_code]" ]3 D) A& P5 K6 ]2 W/ A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了