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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
( N( }6 b) o. \1 j$ R2 o

, |; i- I9 x& U+ \7 MNX二次开发源码分享: NXOpen C++获取面的面积和周长
4 e% Z$ {) }8 D: ]
8 X2 ~' [5 B5 H' d5 S
9 t2 [. c5 o/ C7 v- V# m
/ b2 K6 y) w) s3 q# S* o1 I! ~
, ^* Q. m3 }/ g; n* ?) z- O

" `; i# t/ V1 h. i# n% j7 L( T[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
( n" ]5 E& D& D# E3 U, c: _7 u{
: J& O( r2 a& h. y; O7 n" o    char str[256];$ ^; Z* Y7 Q7 F, u; z; |
        
, s3 D$ [; Y8 E& v" B    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));, [2 i1 E1 p: }, E7 _7 l% B
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
5 f2 T) ]! H* Y
7 z- f( }9 x$ ~* F    //FaceCollector issue is fixed in NX90 a& p( b$ I$ q4 x: x) K5 Z9 I
    NXObject *nullNXObject(NULL);5 }  E. d4 y, k) {7 S
    MeasureFaceBuilder *measureFaceBuilder1;5 X' X2 M& T- ]5 i) e
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);  d* h& O, P/ W# M4 X- f6 v, ^
        
* h- ~  w' p' v: E$ N! o    Face *face1 = dynamic_cast<Face *>(face_tag);8 r! @! |4 x* Q- A/ z
    vector<Face *> faces1(1);0 K4 f  L! R6 m
    faces1[0] = face1;
1 i4 n# w. O( v5 F( K3 b* F: i) {+ N    FaceDumbRule *faceDumbRule1;# B$ _* z# w/ @( P) W+ w
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);* l  I! J% G/ q3 p) H
    ; K7 p, i4 R/ i1 t  e% d
    std::vector<SelectionIntentRule *> rules1(1);- m3 h  r# n3 v& Z" @4 l
    rules1[0] = faceDumbRule1;, t  }0 h% V8 W8 l
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);+ O: O$ L' M) n6 H
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();  u8 j. g8 ~0 L
* J- h# p( t) G2 M+ i
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
! n' n* D0 N2 B9 ~+ j; N- T  O# J2 E6 g
    MeasureFaces *measureFaces1;+ v/ r6 g* L( j$ w/ t! @3 h
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
4 ?& \% T9 ^" r0 g
' H- D1 Y* p5 P( g* E7 l    double face_area = measureFaces1->Area();
' s+ J/ c- V% f; u& P3 t1 e) |" \- n    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
" s# [3 x' o2 m0 f" o/ u5 r    print(str);
6 X& g( y6 c  ^' g( e% A   
: Z: D/ \+ T1 b    double face_perimeter = measureFaces1->Perimeter();
. q# z5 _8 U5 Z8 i- D4 F5 H) r5 w    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
1 G3 @2 O( R' Y* z: {1 x9 @/ {    print(str);( r+ G/ L' H3 r  ?3 }- E9 {8 H! Z
3 E/ S. B( Z9 P/ k# O) L% x9 ]' |
    delete measureFaces1;   ( h! q0 X( c, n
    delete faceDumbRule1;
5 n5 l5 y6 _$ }3 H0 T    measureFaceBuilder1->Destroy();
, m+ A% r1 E* z! W' J    return face_area;$ C. ^( R+ `) }( V4 O
}
5 {1 @7 X. A, M' x" @  |; c& |* F[/mw_shl_code]% J. h% V% L) s+ N3 X5 f- d
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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二次开发专题模块培训报名开始啦

    我知道了