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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
, ]1 o0 p0 ^, F2 n4 V* n. |
( X3 b* [4 Z4 Q/ g
NX二次开发源码分享: NXOpen C++获取面的面积和周长
; I+ m1 \* E3 }* t
: c! F! ?  j/ p" Q- C; ]! h
2 e# N3 W- M( f" h7 R. w( D. E

( `4 m: E6 m' J1 |
: _3 X+ @) R, \5 I
& x' Y4 d% [- b' H: {# e( T" p
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)' J7 B4 k. S- l6 D* G
{
0 O6 ], r% D. W    char str[256];
3 C+ y6 v) m; N3 t        
+ _* L1 [0 |7 ?# c9 L% V, P/ ]    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
, @2 \. M+ u% N5 S( l: f    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
* K4 C' s0 a" u
$ [* E9 h' g! L2 Z    //FaceCollector issue is fixed in NX9
( x$ h  C& t8 y6 o$ o( p1 ?    NXObject *nullNXObject(NULL);
8 ~) Y' o0 l0 i3 P, @    MeasureFaceBuilder *measureFaceBuilder1;
0 p' e" i7 h5 F4 u# m9 q( m0 v; L    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
9 c" R6 D3 q& X: O        ( A. ?6 A1 j& E4 L6 L9 A$ v" a
    Face *face1 = dynamic_cast<Face *>(face_tag);( d: C. m8 M; D* B
    vector<Face *> faces1(1);6 u2 L1 j( u/ J4 J# d4 z+ p
    faces1[0] = face1;
- |7 F/ z1 y; t  S9 \/ c    FaceDumbRule *faceDumbRule1;" w4 A. c5 z1 u8 V8 I. @
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);. p) N1 F8 O( ?6 o
      W, E2 o: l  j! ?6 P4 I
    std::vector<SelectionIntentRule *> rules1(1);# J" A$ r" x9 R" I2 |$ E3 C
    rules1[0] = faceDumbRule1;5 q! Q" s0 |, ?- |% J
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);" M; T3 }2 l/ S* m( ]2 i
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
# |$ _$ s- v* c" z" u/ o" _8 U# j! Z; r+ @" c5 T
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();2 d5 P) E# d) w) I, l

( v- d2 |0 z; |) G$ B    MeasureFaces *measureFaces1;$ v9 I+ H2 D6 k! |7 H$ _5 _: u
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
3 C+ Y7 b$ m: S5 n. r8 F
  k) [9 p& Z% c# x    double face_area = measureFaces1->Area();. `" o" j/ V: P& E9 ?& n  k) |1 m
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);2 ]. z- J  p' f. j: k
    print(str);
. h7 p4 d) p$ G    2 Y) `# u+ |9 K; d( {/ j
    double face_perimeter = measureFaces1->Perimeter();
/ u/ H# Y7 v- T4 A& ]6 S3 [    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);" e  y8 }/ f) ~+ u& @' M$ O+ N
    print(str);  O. g- @+ L/ S, k# k
" W: O( i* `$ R$ A
    delete measureFaces1;   1 V- \$ d3 J' d
    delete faceDumbRule1;3 z% X' Z, O: |% Z
    measureFaceBuilder1->Destroy();! [5 u- ]% H4 c7 Y; R7 @
    return face_area;5 `# p7 U# v  a, z- K" s
}
. ?, N9 i* X" m- B7 F[/mw_shl_code]4 ?5 E  i( [. C( a# k! g+ j
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了