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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x

$ T) G* n$ f$ D1 P, \4 O* E# ]
! H  }1 e2 J1 ?' O! LNX二次开发源码分享: NXOpen C++获取面的面积和周长
" p: `  P9 V! S) q$ [/ ^  L) r% B/ }$ B( O
! f! y6 J. r6 P1 z: V% j) y' D. ]
+ J" K5 g* ^' t8 p6 r( |
# o$ T+ t/ h$ }
3 V& I0 I% _$ E$ s9 i
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)6 b& T; H& C# X
{) ]6 n2 f, N( \9 O$ u7 x0 l2 N
    char str[256];8 q: i7 m: h# y2 v9 s
        
0 V, Y) j- ]1 J7 u. E/ Z2 S    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
3 s6 G3 F& c1 f4 J" i( r. _1 B    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));- b) F2 E( {7 o% ]+ C6 H

7 r! @* E, `9 u& {, n8 G; ?    //FaceCollector issue is fixed in NX9
. L5 {$ c8 r$ c* i$ ^    NXObject *nullNXObject(NULL);
0 p" a2 M8 r9 Q/ I5 ~  O9 f* ?1 \, L    MeasureFaceBuilder *measureFaceBuilder1;, t7 E! F1 a0 M1 t/ t( ~( a1 d1 H
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);, p9 E! Q$ q' ~/ ~4 J5 z! K* j6 s5 N
        ' X9 `5 W$ [  S& x" I; E1 P" G; H
    Face *face1 = dynamic_cast<Face *>(face_tag);0 ?# z! h2 H4 D6 B4 E* R# R
    vector<Face *> faces1(1);
' _$ v- C9 i6 y* ^, _$ l3 y    faces1[0] = face1;' A. P& J4 k) e9 \5 H2 B/ j3 e
    FaceDumbRule *faceDumbRule1;: L6 ?7 p, v! r  M+ @
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);4 A7 s, S' o9 ^0 `; v
    - t- h) B% m/ A: ~* _( a
    std::vector<SelectionIntentRule *> rules1(1);
) ?) I( s/ Z; p9 w, O: E    rules1[0] = faceDumbRule1;
' M1 M# ]. C) W  E! D    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
: O- G# Q3 {' P    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();+ B  n9 U' I. w

% ]/ `' J" J. _, R, M    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
* I& i$ y1 Z3 R* d' m& `# y
  O, C! d' o6 w) m2 y- ]    MeasureFaces *measureFaces1;# z' y" Y5 o( N# |- ?% ~
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);8 n% H4 K- p3 \+ T
4 h! b( k: @6 E; `% k
    double face_area = measureFaces1->Area();$ j. ^' W& w) ]6 l/ G
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
$ F3 l$ c3 n; F  r; A4 x0 [    print(str);
" J& Q4 p% e! ?: U$ E  U- u) q3 b% H   
: P" _/ G+ z/ I3 J; O* o! J2 |. m& I    double face_perimeter = measureFaces1->Perimeter();2 x& J9 a% ~& E" {1 I; W# x9 ~6 O& U
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
- D4 p: Z5 v- Q3 [    print(str);4 M3 s$ h5 N% v; c/ h; C" \
7 b6 e; E8 ?8 p# m
    delete measureFaces1;   , d9 [' M" I4 t- n. a
    delete faceDumbRule1;6 Q# q+ C% s1 M7 _
    measureFaceBuilder1->Destroy();2 l; _" o. s, p  @. _+ p
    return face_area;
: D# \  K& W+ \}
8 H1 K4 q6 B7 v/ N2 p" V[/mw_shl_code]
5 z4 v' I& Q( n1 @8 s5 [/ Y3 B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了