PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x

  {. ^& N( j, C' v
4 g) Z7 n  B  ~' ~5 U5 uNX二次开发源码分享: NXOpen C++获取面的面积和周长
/ K2 ?/ J4 L7 `9 v$ {, ?- _) X$ G4 \- K- ]& j1 G/ _. t% _" R

6 F, g: ~# c5 o+ K% k; s
( r1 N+ G" h$ e* p# w8 G
" S: y- I" `+ O7 H# q+ O3 p5 ^

( s8 ]; s! w+ g9 a. p* g; ?+ }, \[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
: A' d$ a- H8 u; N{
+ [3 P- ]& d* _  L) A    char str[256];4 u7 Y! e1 b0 P3 Z
        6 k7 G; r' x  J" l
    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));. b/ Q+ l. x1 j; j
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
# d6 ]" k1 p! S5 M4 T, }7 |& T
# E% g* a0 J) E5 k+ o$ j* B    //FaceCollector issue is fixed in NX9# b  e: P  o4 \( C! ~
    NXObject *nullNXObject(NULL);* M, Z7 X- X. }- [  P
    MeasureFaceBuilder *measureFaceBuilder1;
1 ?2 b% ^4 A4 n% c    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);# i% L+ J4 T; p! _
        6 C; X# l4 m' S4 J! F
    Face *face1 = dynamic_cast<Face *>(face_tag);
2 J  T8 P$ @3 A5 j2 `    vector<Face *> faces1(1);
9 G; T7 k6 R" F0 Y    faces1[0] = face1;
3 E- e" e7 h8 D2 Q7 c' q* A. I    FaceDumbRule *faceDumbRule1;8 V. R5 y' L1 `" R- |
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
/ P: b7 S. n: ^1 N" M   
$ s0 }' \$ @$ ~3 m8 ^6 _    std::vector<SelectionIntentRule *> rules1(1);
# b$ v& v8 x' x3 V    rules1[0] = faceDumbRule1;# Y" J- F: C7 A) m
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
$ ^4 l0 o% n: g0 C8 B    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
( d5 t$ v$ U, O8 j" @! Q% k& Q2 Y: d/ G8 C; ~9 L2 a
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
6 r4 v, ?9 v5 _3 _; D
+ s. R* R& n3 X5 H& s8 w/ e& [    MeasureFaces *measureFaces1;
1 w3 r; g! X9 ~2 ^5 V4 d' [    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);) `$ c$ D* C- l. p6 p4 O

& a& a' I, y" ~. v7 U3 i    double face_area = measureFaces1->Area();: \7 E( p2 w4 `9 r4 ^- {9 f) B
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);9 c' e* ?) n5 L! c. @" S
    print(str);0 _1 L+ r. k  [( l6 h4 b
   
; \1 d4 l! c* E/ D    double face_perimeter = measureFaces1->Perimeter();, g+ t. W( P; U' C; E3 o! l( a
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
" a( M. G8 ?2 ~& b+ }0 q    print(str);+ V$ P3 E+ ^0 _4 z

5 e/ \0 \4 f+ \1 P' j    delete measureFaces1;   ( I( A" p+ n, p3 F, s1 H  S: x, M
    delete faceDumbRule1;! ]0 T% ^$ Q, d4 F* P1 u) J
    measureFaceBuilder1->Destroy();0 {7 X) H! `& d) \* G+ `
    return face_area;' ~, w8 U4 _; l' N  b: f
}
; P  p0 Q) W7 w) s8 f7 B$ h[/mw_shl_code]
- f0 s$ I, Z$ B! \% G9 ]5 _
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了