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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x

4 |" ?! D% U4 w; {/ o
6 h. U/ l2 J5 }8 o( NNX二次开发源码分享: NXOpen C++获取面的面积和周长
8 o9 v: U! A! [! @, L$ y% {9 s7 n: g5 }& y+ i

4 K# B! j, j! y9 }7 D7 s  `' y2 N9 S5 X% S

* k5 v: l% y+ g7 K( l0 S& v8 i# [. G: F6 Y
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)7 d5 u7 m; f8 t! P% ?- C) y1 \( @
{
8 t# S% R) Y& K: W+ W# z+ g    char str[256];
4 F0 C/ Z4 ^, J$ ^, ~7 O        
- g- r& U  l# P( Z( u+ r, f" O    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
& U& p: A" {0 _    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));8 N* w* P) P9 B2 v  s4 t

% P7 B- C' S' ]    //FaceCollector issue is fixed in NX94 Z" `! j; g, x1 n: n+ V
    NXObject *nullNXObject(NULL);
3 g+ i" t2 b8 D7 Y# n/ H    MeasureFaceBuilder *measureFaceBuilder1;
" z; B/ l7 r* S, h6 s% m    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);- d% o; k( c2 V  z# F$ q
        # \# \# M% w/ I0 g, t) e
    Face *face1 = dynamic_cast<Face *>(face_tag);
, s$ ?$ S. r; i- E    vector<Face *> faces1(1);
/ e9 T1 ?8 b. S4 }2 f: ^    faces1[0] = face1;& D( L2 I5 `7 w2 |1 _
    FaceDumbRule *faceDumbRule1;$ F4 U3 S: E8 `- }7 K' O( D; O
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);  O: f3 o* H5 [' w- M1 A
   
5 C# d# C# B* u/ O8 }- {% p    std::vector<SelectionIntentRule *> rules1(1);: j. R* n# t, V4 e
    rules1[0] = faceDumbRule1;4 O( v8 Z& Q& R: |
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);' Y* C- t5 @8 ^$ v: w# o6 Z
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
: E  `* C+ g; E. o  P) I' m* j7 {/ g
$ q. Q7 s. ^- T( N$ o: x    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
! h. v" i: {( s: y( b$ Y
+ k2 y9 \: k4 r+ j3 M    MeasureFaces *measureFaces1;0 u7 R+ G) z2 }" n
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
5 Z4 _3 g# m8 N0 C& v- Y9 F. K1 m- w
    double face_area = measureFaces1->Area();! ^) G( \9 ^, c3 y
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
4 `" N8 ^4 ^/ q) C8 N    print(str);
  o# \! J2 ^" X8 }3 @& V4 C    - {0 M  Q) Y1 p+ x# h
    double face_perimeter = measureFaces1->Perimeter();
! L1 Z. q& a5 B/ z# @5 Q) W0 _0 a. f    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
) r+ J& A! k3 m* ?" j; a) r; P    print(str);  m( P! ^' D* c% b/ u% c% G

% W+ v; l# z9 \, L1 m, g    delete measureFaces1;   
7 _% X" ]% l+ ?2 O) T    delete faceDumbRule1;
4 z1 G5 }4 S% O8 V- Y    measureFaceBuilder1->Destroy();
% U& f) D7 V; {: w, H* f/ h  t, p7 k    return face_area;. O) D: q" X4 m3 m9 d
}
1 z1 Z; ?  l, J, Y) J- y5 V[/mw_shl_code]
/ k+ D, J. z: g) w( ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了