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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x

9 W! [) b& a" T0 O* N9 S" }3 J7 e4 m
NX二次开发源码分享: NXOpen C++获取面的面积和周长! p; r, d  i6 ~4 G0 I
5 C, L3 n% H& N5 C2 b! ]- }# k
8 P0 F3 j6 G# v
" P% L5 z/ M5 l% W

2 a3 J8 c, c1 L7 K% \  d& y5 e' L5 R3 e( |4 Y
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)5 G: x% f! ]/ u& }- u# O
{
" [  S7 T7 j! |8 v% {    char str[256];
+ ?# G  p& h% H6 B        
* h) F0 m! T* p5 ~% A    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
" s, N6 m+ I& w9 B' ~. b- x1 f    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
( T8 p; A. k. i2 s* p0 q# i
: Y/ a  z& c% z" I  c    //FaceCollector issue is fixed in NX92 f4 r4 F. H; t; K' G' C3 f4 H- }, O
    NXObject *nullNXObject(NULL);& J3 v# S, u8 o
    MeasureFaceBuilder *measureFaceBuilder1;1 k! V' [3 S9 K! C- J- F5 L
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);$ Z# I$ K5 B2 I- B: y5 J7 q
        
' t) q6 p7 j/ }4 N9 P: d0 Y    Face *face1 = dynamic_cast<Face *>(face_tag);
7 R7 C# I: ~; i    vector<Face *> faces1(1);6 y/ [: S. Q0 i- K: G4 E
    faces1[0] = face1;
4 f' s9 ~2 H! `8 D4 r9 c6 R) ^    FaceDumbRule *faceDumbRule1;. O. r/ f  D* k0 C* M: d2 ?2 z
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
  ^0 S& w5 ]. e3 U7 p$ y   
$ g. z4 t8 C4 z  ~- u6 H    std::vector<SelectionIntentRule *> rules1(1);
/ N$ T' N) ?9 J0 b8 ^( y: p* ]) {    rules1[0] = faceDumbRule1;
- k$ R  D2 B5 I    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);5 s7 }) v% |- j1 `+ \+ P# ~
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();  s' x- k9 h- z
- ]; ?- m: v; z8 C' R% c- }
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();# u6 O4 d7 {& y
3 B. v, @8 v4 Y! D" k( `( M  H- x
    MeasureFaces *measureFaces1;
! O" V! Z( n: R2 R7 l    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
# `; L# [2 P; w4 N
3 C! @4 c% h8 v: \. h    double face_area = measureFaces1->Area();
) O3 M+ P8 ^! z    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);' W: c2 ?1 M) \& w: i$ ^
    print(str);
2 t0 z& t+ J  d8 {3 N% y7 o, q- h   
% {# U; U! f+ H  u    double face_perimeter = measureFaces1->Perimeter();6 V1 Z6 B0 P6 N) S& C: [; B
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);% @* G9 I* L/ p' {: U' V
    print(str);
$ y3 ]& K5 K. M% x3 I; }/ s2 ~
+ }8 G  g! X) G: _8 g5 z    delete measureFaces1;   * O$ g. l" [) A( J" ]2 u
    delete faceDumbRule1;
6 P  ?9 @; \" k* t    measureFaceBuilder1->Destroy();# H3 g' I+ F) E; I! }5 b  `- D
    return face_area;8 \+ d9 V+ r0 A6 w# [7 d7 |
}# n) Y6 J  j6 o9 V
[/mw_shl_code]) G! s4 S7 C7 B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了