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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
+ k; X) M% g2 m& v& S

' `9 u: R% ]( |: kNX二次开发源码分享: NXOpen C++获取面的面积和周长
& m' _. a- ~" S1 m/ @% \' c2 R7 `$ m  _6 [- v+ A

+ ?1 K3 m) e' _9 y1 h5 _2 ]' W9 e8 d  _4 [5 }1 h' \7 s! f
7 ^9 m0 [5 x3 p
% g) B0 S! ~- [, Z- T) D1 G( z
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
' q9 p" `  e. i4 N{# D, a/ `: q- k* q0 p
    char str[256];
  f7 \6 l1 l" J# M7 C        
2 f2 ~; ]% ]" \    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));4 W" L4 r+ f% Y( G
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));0 C4 P( a: g2 a8 U8 d1 ~5 Y9 B
& |) Z% P& q: [4 P8 S2 W0 a
    //FaceCollector issue is fixed in NX9
/ Q; _! ^' Y" d    NXObject *nullNXObject(NULL);
2 x8 W% ^5 x- D7 o+ _, S6 U    MeasureFaceBuilder *measureFaceBuilder1;/ s2 N) J1 K% w$ D* F5 q/ v6 u
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
/ f' n, ]. h0 P% b- Z7 F5 y  J        ; f+ C4 p6 V- d9 t: |% |" C$ Y
    Face *face1 = dynamic_cast<Face *>(face_tag);* ^9 \9 T% Q" U' d9 k
    vector<Face *> faces1(1);5 a& o. _" W1 Q; j% v, W- y
    faces1[0] = face1;+ B9 J( ^9 e5 o0 Y
    FaceDumbRule *faceDumbRule1;
5 ^5 u- K* n8 ^0 B7 u    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);+ x0 J9 B1 y2 v5 I' l2 t+ g
   
2 D0 O( j" l, j    std::vector<SelectionIntentRule *> rules1(1);! ]/ v/ q& J4 J& r+ t0 a" j
    rules1[0] = faceDumbRule1;( j7 h; {, m$ X. \7 B5 F3 F
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);6 j  W+ A6 V: X0 G' f) p; }; \* P1 i
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();8 P3 o3 A( s# n1 w

( O  L) W9 ^$ a! e! w- q# N$ ^- H    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
' Y$ m1 d: Q+ X+ a. r" U& O
5 g6 w, S, v" c! Y( n1 X4 e    MeasureFaces *measureFaces1;: z7 Y$ m9 V; F: R; a
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
5 l9 I3 _6 f" {; t* n6 r6 _+ E) p9 Q1 i
    double face_area = measureFaces1->Area();# W" L/ r" p( C" {. J; r
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);7 `; J3 e4 N. g6 O2 `: u
    print(str);4 f. y5 t# e* j4 ^1 p
   
5 ]1 ?- ?! C: b3 b9 T. [' g    double face_perimeter = measureFaces1->Perimeter();  u/ U: u1 E- M% s8 c! X$ D
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);' I# L$ y$ Y1 h8 c9 B
    print(str);9 k+ n; V8 E' |* S0 Q5 h: A
8 W8 `4 ^. T5 u& n, R; G; {
    delete measureFaces1;   
4 k2 F# D5 s( E) R- e& w; L    delete faceDumbRule1;
: [" d' i- {* u' d- J0 S  o    measureFaceBuilder1->Destroy();
9 E* r( @& e+ n/ ?3 L    return face_area;( _4 p, B( L$ r6 U5 B
}
* i" D: q: J$ ?) o[/mw_shl_code]( G6 c1 g+ }/ n0 j4 o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了