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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
- ^5 m0 |; s* o

; Y# }0 x* f; f1 U0 WNX二次开发源码分享: NXOpen C++获取面的面积和周长
2 A' L; ]. P# a5 \/ X& I
/ g( f3 i% ^# F3 b0 t3 ]$ U2 ?+ I

5 ?* D: K; q3 ]. Z7 B7 X4 |
! W$ t: r5 H1 X& W2 I. x

, n: [% ?$ g. s) A* x+ o: o" Y8 o6 R& X0 Q; M
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
  A2 w' Y( T7 j+ \- V& @{* b' h3 W8 q# v1 f& T9 n
    char str[256];
  q, r  W9 }! g; q        $ A& d- W/ [! w8 I1 p6 Z
    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));4 b6 ]# _. k, u9 o# U
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
) D. T1 x$ B0 {8 Q6 b- A5 x! n
# C9 b& T% B$ I' Z/ |. ]4 [    //FaceCollector issue is fixed in NX9
% r. h- B3 }5 p, @1 R# Y    NXObject *nullNXObject(NULL);
: }7 D: p: `# b8 E# Y    MeasureFaceBuilder *measureFaceBuilder1;! [  j' M2 R; A
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);4 m9 |, M* O# l% }. Y
        
! h2 B" F% J" s! D- I5 ?' K    Face *face1 = dynamic_cast<Face *>(face_tag);
1 w3 p' i. N7 C9 M    vector<Face *> faces1(1);
/ ~" Y/ ^2 f* _5 _( t2 a    faces1[0] = face1;3 V6 f7 o  L3 r2 m, J6 i
    FaceDumbRule *faceDumbRule1;+ F  a( U, y5 C0 [' a% H
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);0 V, p) J  \, C; c* [
    7 t* z" w; m% x; _5 N7 i* k4 x0 R
    std::vector<SelectionIntentRule *> rules1(1);
9 f  X/ ]7 N5 D, T" I, l    rules1[0] = faceDumbRule1;% k8 `4 h" q) q1 N7 G
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
) t6 F6 D4 Q( C' d% F( T    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();; n+ v( \/ Q: }- p, C& N

) D" v' D  G# p/ Z/ e9 K  r- ?    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
% N" S; b, z# q$ `8 V
: m' c& j, z6 f2 @    MeasureFaces *measureFaces1;
+ R- S/ t& f6 G9 n/ E    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);( p7 c" |1 ?; N" U

/ k8 x5 ]+ k. W9 ^+ c    double face_area = measureFaces1->Area();
9 b- b7 {. E& q5 I- g& C    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);5 I) t! e* _, w
    print(str);
) D- K/ x6 |& D' R   
/ I2 x8 x7 m6 j" w0 k& u: d    double face_perimeter = measureFaces1->Perimeter();
3 g* |& ]/ O3 y; |6 s    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);) ~8 q0 D6 X" d
    print(str);. j- ~: |7 W- E! k
! W/ |* j# I- x2 u
    delete measureFaces1;   ' i* P( R) o. M6 y
    delete faceDumbRule1;
& N9 b2 U* g2 o+ R9 \, I- C    measureFaceBuilder1->Destroy();
2 g8 _6 G! B# m8 I) o- \    return face_area;
* d6 y% i; E- @7 Y3 p& c2 l}
9 F. ^# M7 C' K* k- u  m8 S  [[/mw_shl_code]4 H' ?4 t! z* v3 W+ w& w8 K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了