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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82170
QQ
发表于 2018-8-23 08:19:35 | 显示全部楼层 |阅读模式

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

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

x

* L- D+ B: r) a
7 j8 H4 I6 A% D0 ]% ]NX二次开发源码分享: NXOpen C++获取面的面积和周长
. l$ C$ `. _5 \% Z& ~6 ^0 s9 S: G5 V  I, S% D4 y

1 ~6 M! |9 X1 s/ C, ]; }* _% c! O/ Z% u
) f1 V! N4 u" _
" [5 U. ~8 ~' s: T/ e8 d
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)0 ^8 R/ J% Y" R' S: M
{- I2 x2 C- R* L
    char str[256];$ ^$ t$ j7 Y/ Q) j+ R* s% d
        
2 m! ^9 {1 G$ |8 O& ?# d    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
) Z3 N* R" t) G/ K  S* `    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
7 k; o+ g! \8 Q4 H! r* v5 P4 t/ \- n
    //FaceCollector issue is fixed in NX9( r7 B( f( e5 h/ Z! R6 K% r
    NXObject *nullNXObject(NULL);
0 x: }( U" g8 B' Z# r0 n& w+ o2 J    MeasureFaceBuilder *measureFaceBuilder1;
5 `% O* m7 J2 @+ `  C! q6 P    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);/ D; u+ j, n% T. E' ]* E' T- ~, J
        . n2 k. @0 R$ K- H
    Face *face1 = dynamic_cast<Face *>(face_tag);; e- t' a- V  j8 ~' x
    vector<Face *> faces1(1);
& a) H7 l/ W% s    faces1[0] = face1;
* q, z9 Q" G' _3 o    FaceDumbRule *faceDumbRule1;* w, f) z9 I' b0 }* w3 ^  R3 z8 @
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
2 t0 R8 z  x4 f+ G" G   
$ h5 d0 g! T% ]3 m( L8 C    std::vector<SelectionIntentRule *> rules1(1);5 @/ w8 \0 n4 \4 M- O9 d
    rules1[0] = faceDumbRule1;
/ J0 I: q9 b7 I& b- R1 W! G' d" S    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);* Q9 u3 N1 M- y1 P
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();1 a  h1 B5 R, t! G, Y8 R! v
. ~! [) ]  R9 d# o
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();/ I2 ]* y8 W: \7 O* r4 M

. |7 W) u; F8 F! c    MeasureFaces *measureFaces1;
3 v# N5 n4 a( V. J' Z    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);5 a3 S- _# ^: }& {  R+ X2 y
$ ^6 }# {' M$ Y* l
    double face_area = measureFaces1->Area();3 \0 d( C# V# I8 t- o1 c
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);1 ]" v: y% W: s" V
    print(str);
$ l+ Q: b+ q" g; v; v! N   
/ d* s. O1 ^" k    double face_perimeter = measureFaces1->Perimeter();
( S# k% d- I3 \, Q" g# o    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
- L! o$ f9 k9 T9 C* o  p    print(str);
0 ~$ I5 o. i7 t! N, O6 W
" z, F* A  I6 E$ m! b    delete measureFaces1;   
3 K7 k/ P; M0 }0 P6 f  `/ i    delete faceDumbRule1;, |0 i1 g0 W$ l. J/ p( s
    measureFaceBuilder1->Destroy();
6 B( j; {4 f/ E6 T3 h    return face_area;
3 z% Z5 g* b6 L9 S) X( t}
4 I' q$ r* p& [9 ^5 j  `[/mw_shl_code]' u* d+ H8 i. c
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

7

主题

58

回帖

866

积分

高级会员

积分
866
发表于 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.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了