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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
0 f6 X% q: I, m/ q: }
! L: L- `, k) a. y
NX二次开发源码分享: NXOpen C++获取面的面积和周长
/ g5 c6 X$ h3 O* m' G, ~/ k# D! _; Z

0 o. O. C2 G! V1 q% d
# K' g' m- a+ i. ~

* c8 w& R( a+ m6 l4 d# N6 F4 r/ ~* X3 h8 t% j- i- z9 {4 ]
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag); b2 C7 N) _# r9 Y# L
{
- r3 J. s4 C6 L9 O% X$ c    char str[256];8 d$ ~4 v5 b/ \$ o1 E, C
        
2 ^2 U- Z4 ]* Q6 u; E    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
$ h3 \1 Q+ p! h    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
6 j% c( l5 G7 A" j9 _5 i! T4 P3 x
& @0 r; y" b- F  ]( k9 n    //FaceCollector issue is fixed in NX9
& r" W; a8 T0 Y" B. K2 I    NXObject *nullNXObject(NULL);: s! M8 W  {4 M% Q+ I: @" Q
    MeasureFaceBuilder *measureFaceBuilder1;
  ~7 G8 I" f/ Z  T    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);: d! P) H% ~# ~
        ( t% L+ e0 i# s# Q* @
    Face *face1 = dynamic_cast<Face *>(face_tag);. h. m) N5 b/ U7 D. y
    vector<Face *> faces1(1);8 N2 `0 V& t: U" u1 ^8 T! J
    faces1[0] = face1;& d  ~2 p: v2 ^' G
    FaceDumbRule *faceDumbRule1;8 I- X% |2 \9 }5 k6 e& W$ S3 A8 n) |
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);: J$ q7 J7 z9 g1 H
    0 ?7 F, R4 @' p& {; ?
    std::vector<SelectionIntentRule *> rules1(1);
9 ?7 E9 w& |- N: ~    rules1[0] = faceDumbRule1;8 v0 l- u8 }2 S$ o" P$ k
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);: `/ h7 N3 Y+ o+ b: X, j& }
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();# @" c+ V9 y8 \8 O7 S

6 U$ |: y- ]6 B4 F    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();( H2 U2 V) t* o  Y
- F$ G2 G9 t, Y4 w1 z$ ]  |
    MeasureFaces *measureFaces1;
+ q  J- f4 Z+ {, D- f: S% X# T' ^    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);$ d2 v6 F$ G* f" V) `

2 y! y+ `' B  }    double face_area = measureFaces1->Area();' |; C/ z% Z  `; V6 |! m2 a
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);. B0 f8 H# _$ m6 |
    print(str);
& L5 m: Q# u1 ]# d& Y' }- F2 {+ u   
* g- X; S( B1 U3 ?    double face_perimeter = measureFaces1->Perimeter();( a4 k9 Q4 e, {, p, ]+ J' Q6 q8 J
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);* ^3 q, O1 T$ g( c$ Q; @  C% P
    print(str);
2 y, D0 P  E8 w% ?. F
+ R. ~8 F) }1 L  ]! _* {  I) z$ `    delete measureFaces1;   
+ R. n1 d1 S/ U    delete faceDumbRule1;
6 d1 r! M' Q% `; G- R3 `/ ^' s% Q    measureFaceBuilder1->Destroy();
; t) a$ d. v7 x    return face_area;
" q* C6 _8 I% h- R( v( v8 c}
. Z0 s/ O7 ~& c( U7 x  m$ f8 p# Q[/mw_shl_code]. _9 |2 F- U4 j, Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了