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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
1 B4 H' Y" F  ?1 Y3 g
5 a  J$ G$ m3 _* B( G3 s
NX二次开发源码分享: NXOpen C++获取面的面积和周长
4 \2 e/ X$ m5 w) K
6 J) L: [; h  Z+ y# P$ U# s

2 _) D* C% x  q( L0 s8 [6 p7 t+ p& z+ H& q# J* [
' a$ M) I9 F% J/ r
+ e. j3 y: Y% Z9 _
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
- b; q( M$ j1 L& g% u' f8 z{& E0 W( ^6 }" |- u, [7 U3 m4 }% i3 y
    char str[256];( S, {. R4 L/ c& ?, X9 W" _0 F
        
9 e) k% H0 {) w    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));' O7 ~$ x1 n7 _6 `1 D  C: L6 l
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
. O' N4 |  s$ T# h
# G" ]; t: F* _5 {  h' t    //FaceCollector issue is fixed in NX9
8 S. B( y! r1 `3 x    NXObject *nullNXObject(NULL);' o) P, f3 c  R6 l
    MeasureFaceBuilder *measureFaceBuilder1;. h7 J4 U6 Y* O' t4 ]' ]
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
+ R: p# A( Z! t1 _8 P        
( d2 Q8 E" ]. c  g    Face *face1 = dynamic_cast<Face *>(face_tag);% X1 z$ Y4 P6 n7 G* F
    vector<Face *> faces1(1);
6 {2 l1 a; p: a, f8 K0 o1 Z    faces1[0] = face1;$ {+ w* {5 `. X$ q
    FaceDumbRule *faceDumbRule1;$ B3 p2 @# S; F' `: O: u$ [, f
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
$ R5 ^! p6 w  |    " H$ t" O1 T% B+ ]: v; L
    std::vector<SelectionIntentRule *> rules1(1);
) I+ l* O# H( B. f2 o. v5 v    rules1[0] = faceDumbRule1;
+ D, i! ~3 S* ?$ V( }6 D    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);: T3 P* U3 m" O1 N' w+ G& r% @5 x
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();' B! j. q9 {' V
0 S0 o9 K/ n* I1 G
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
6 A: s$ q: l3 ^* q* a5 O7 @; J0 _3 h' p; H
    MeasureFaces *measureFaces1;8 Z( \+ S  z4 f$ \" o
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);5 N! {6 r6 o& I* G5 d2 \! }
0 d7 f. `" \7 [, U
    double face_area = measureFaces1->Area();& I& d+ r$ q: _6 h$ f. b
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);, p7 ?- E' q2 u' s8 E3 A; ]; ^
    print(str);1 ^; u! J& W9 p) c6 h4 U3 ?) u
    ! `9 Y. Y; b' u6 _, v
    double face_perimeter = measureFaces1->Perimeter();; G' v# n5 u- u$ N
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);( ]7 b# A5 X: R: x& @
    print(str);1 A0 z4 X# |5 H  ]& r
$ o9 r; W# X7 _1 y  A& x5 x
    delete measureFaces1;   
7 ^  R7 [1 H1 T6 j+ A( a; q, U    delete faceDumbRule1;, }# o: T% t+ R% O, m' Q
    measureFaceBuilder1->Destroy();
( y1 N# X& D' I6 T5 X9 R    return face_area;
. X% t( x- j% t0 i}
7 a% a5 ?/ v$ h) H' m# N5 m[/mw_shl_code]
( \2 X9 \4 v& |5 S! 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二次开发专题模块培训报名开始啦

    我知道了