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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
) h. w' B1 R5 E: u/ T1 {
& d) h, P2 r( c* x2 ^6 o) R
NX二次开发源码分享: NXOpen C++获取面的面积和周长" a) @' a; p5 N# Z# I! l: t

! x+ X/ F7 Z) E8 Z$ V
* \7 G! G% ^1 ~$ z

8 L& M3 C* t8 a  x) A. Q
8 y, S1 i# Y# }$ O

& C8 @% g8 P1 X, {4 q6 K% g* n2 R[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
3 ~( T8 ^) A' {* [- G* N) W' O{
7 u, o+ E9 m  S7 A5 K5 n' t    char str[256];# o5 A8 E, [5 f& m+ F' N
        
, b4 G  G6 i9 t: R) H    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
( e& T4 o/ E4 U7 j4 E  L    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
9 z0 D9 ~# }' [0 x4 _& P8 L2 l7 o. f: Z& N8 m
    //FaceCollector issue is fixed in NX90 ^( C+ h* ]0 W( `2 M: N
    NXObject *nullNXObject(NULL);
1 g7 a" ~/ e" Q0 K3 q    MeasureFaceBuilder *measureFaceBuilder1;4 h- \  [3 R  y5 @! U! J+ C& L
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
4 E' W  |! R0 U        1 Y/ [* z0 M0 m9 A3 g) ^
    Face *face1 = dynamic_cast<Face *>(face_tag);. o5 i8 ^- {  t2 Y3 M
    vector<Face *> faces1(1);2 w; w( R# ]: [% Y" U
    faces1[0] = face1;
! V" \, G' Y- S+ L$ d# h) w6 L5 s- b    FaceDumbRule *faceDumbRule1;! r. W) r% q$ w
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);* x1 j% {  d' x. B. I2 q
    , Y9 d- C5 B' D% M* p7 A' u
    std::vector<SelectionIntentRule *> rules1(1);' f9 Q$ v+ Q" D# G: M" }$ ^% X
    rules1[0] = faceDumbRule1;
$ Z$ P/ T6 E! I+ A+ @) u    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);, z7 @, ^+ }0 n" }* P+ J$ Q& ~
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
  ?' c) L% U! X3 @3 x7 f
! `2 m6 X5 g( U: i" v8 h8 R+ Z" z: ~0 _    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
) A- _* j! A: s5 o6 P, Q/ W- D" ?& W9 ?/ a0 y1 k
    MeasureFaces *measureFaces1;
) ]  `/ r) |; c4 \+ \  X. D    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
' _+ [# y( h8 t5 Q; _, {* G8 `* p6 v, T% p4 L
# r% [  ^1 j2 L$ g  S' |+ U    double face_area = measureFaces1->Area();+ s- m: P$ E, N+ E6 r! A: g
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
, }5 N! p* K$ L    print(str);
1 i# h3 U% Y! K) v   
+ b* M7 O( k+ f    double face_perimeter = measureFaces1->Perimeter();) l% I$ p3 d  _+ }5 ?, n* O3 L
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
1 P4 A. Z: K% {6 N7 ^0 `# E    print(str);: [% J  ^) @& `+ I0 T. S: f9 R$ x. _

) h6 M3 _" k8 b    delete measureFaces1;   
: |3 {, }1 g! l9 O9 L7 f    delete faceDumbRule1;
5 S) E. Q8 z( o$ I; \    measureFaceBuilder1->Destroy();) t" O7 F/ q; F# C/ `$ j  Z, q
    return face_area;0 m; ?. D8 j# g7 g4 t/ _
}
8 A+ o$ |8 ^) L1 q, C( [7 o- s[/mw_shl_code]
& H& X3 P3 A6 C6 v# I; F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了