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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
3 E, X& l( ?: z' {( _

) w" w0 c1 R' H0 cNX二次开发源码分享: NXOpen C++获取面的面积和周长
+ M7 F" I8 H8 J2 N  t! l. J" a
. M- a# k& B" i7 |, U0 W
- ]2 }9 p& v; [" e

- \! f9 b) `. L. N, Q
$ s1 B! W, O0 P3 J4 N( Q

! f9 ?1 l/ E4 x* y0 ~/ h[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
5 c! w1 P2 A4 y4 u6 a) @{
! x$ ^" V# u/ l6 U    char str[256];
, S2 c6 c0 r6 c: |$ N8 X, N: q1 s        
3 X, C& e$ I9 P' M  D. D    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
+ g( u3 {$ m! J4 m! V    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
, t5 T. t. J  @8 |
9 z9 S1 @. L. O: G  c9 s    //FaceCollector issue is fixed in NX9% \) J8 j1 q! @  c5 t. e2 q3 c9 ?3 b
    NXObject *nullNXObject(NULL);
; Y1 u8 K) n; b! E) n: z    MeasureFaceBuilder *measureFaceBuilder1;: q* h8 E/ v$ e+ s4 X* ~
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);8 T- U1 s. k$ ]3 c" h0 _5 N
        7 S0 P4 `7 V* t7 i5 l; v- k
    Face *face1 = dynamic_cast<Face *>(face_tag);1 I  G- m+ P* A
    vector<Face *> faces1(1);
9 v6 n" t1 D" L7 _1 [; y6 P    faces1[0] = face1;
  x; V4 G: K  V; B! F/ N' G+ I    FaceDumbRule *faceDumbRule1;5 @# S5 B" h# y) w  m
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
# {) r: `/ o, M% L    2 s  c3 h  d4 u2 g, i- w- s
    std::vector<SelectionIntentRule *> rules1(1);
+ k' X' V1 L6 s: P7 H$ q    rules1[0] = faceDumbRule1;
1 K1 H) s5 B2 |! ^4 v* h    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);! J' d3 ?! N' E  P1 G) L( w: V
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
; C: z. V; E2 C3 h4 W% _
* f' g( l) Q- `! W2 ^2 X. H* B    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();0 x2 q! C' e( |) E8 @/ x' m

8 N& Q5 W- \8 B4 e    MeasureFaces *measureFaces1;
0 [/ C2 x/ [3 d+ a- o( w' |    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);# g4 b; i: `) m3 c8 W8 r: Y) z& `
6 w/ Q- F. F+ v
    double face_area = measureFaces1->Area();# x6 s+ k$ r9 \9 ^, O0 b
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);* Y6 ?3 n$ l) ~2 g6 s3 w$ W1 b
    print(str);
- `" c8 j: M$ f1 |) g- B   
9 f2 ]1 d- d7 d6 `6 j    double face_perimeter = measureFaces1->Perimeter();$ a0 x8 W- Z( c- p0 U( h
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);# V2 U# s/ w) f) ]9 B' |# c  e* F
    print(str);" d' k& v1 r8 t
# O+ Z+ o0 u! k5 \9 w. t( Z
    delete measureFaces1;   4 w  z, q% M3 {8 i
    delete faceDumbRule1;, ]4 d  i8 z, q( v1 Y
    measureFaceBuilder1->Destroy();
5 ]9 ?' W2 Z  {! X$ K8 ~    return face_area;* V) W: w3 \5 i- q- ?$ Y; T
}
/ V6 h: H% b1 H! o[/mw_shl_code]
0 w. A7 V) C6 C
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了