PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
. a7 r9 |; g( P$ F# _, O: P

; \" W+ k' D4 g: H% e9 }" rNX二次开发源码分享: NXOpen C++获取面的面积和周长
0 t* E" n* C7 k6 L
8 Y% a" A3 ]3 s, P  `* X
( G, X2 ]& u# s6 f6 v
6 v' z2 `6 o: d+ k4 U! o& v

! N6 H6 L1 ?. W/ W: w
3 G  ?% w# t/ |6 e" f$ ]+ b[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag), {. r8 b- _0 ^2 K1 P
{& N- k( j6 T$ d+ A2 ~$ q
    char str[256];7 e$ g! z; ]+ [5 C% M# K
        
; O: [) z& Z9 s& r( q2 M7 v    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));) w" |6 ?' M1 N- D5 \) e/ Y. N. s+ g
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));% s) O, _! W/ P# ^- }

5 x2 K! B7 L) \8 B, @    //FaceCollector issue is fixed in NX9
0 S: _6 Y/ s( N& W% o1 }    NXObject *nullNXObject(NULL);! w! {) F7 i! h  O. [/ W: d: r
    MeasureFaceBuilder *measureFaceBuilder1;
1 U4 |, \$ v: h% r9 o" \    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);6 ^  R' V. Q% U! p/ M6 i
        . x3 q) R7 F! \; ]2 t% q  a
    Face *face1 = dynamic_cast<Face *>(face_tag);0 R4 j" d  Z5 ?
    vector<Face *> faces1(1);
- `, p2 }/ t) R" l% H4 q) c& G    faces1[0] = face1;& o8 X. ]6 I. V8 E0 A! p& l( g8 Y( n
    FaceDumbRule *faceDumbRule1;2 U  m1 w' b3 d' c7 O9 h
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
0 `% Q/ H' ~0 I9 G; I   
# `5 z0 c9 G% ?- X! _+ n    std::vector<SelectionIntentRule *> rules1(1);$ |, M- b6 Z1 `6 h
    rules1[0] = faceDumbRule1;
1 k7 A7 v' [6 ]6 A7 f5 g    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
1 R- L$ ~1 \5 [" ]- F" _& u    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();; s- F$ M9 ^7 W% m& u" }

8 c( w* }: K& w2 g- a    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();2 A8 i$ p3 T+ b- K

$ V5 a! i9 d9 b3 i    MeasureFaces *measureFaces1;/ B4 M# v  n9 }: I
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
1 r/ M9 ~) i; K9 f$ S# n
0 I" a7 {! s( |8 w' {3 Y5 r    double face_area = measureFaces1->Area();
9 X; ~: ]' Y3 |) Y6 E) e) W    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);8 c% I4 h4 T& s& Q. U# ~! \  W% o
    print(str);
3 o/ r- Y9 @  U0 J& s* i    5 s% U6 w4 T4 c1 r2 @( ^( m$ z/ H" y
    double face_perimeter = measureFaces1->Perimeter();. {$ c6 l5 Q) v* I7 C
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);$ s0 d& \' W5 E/ c9 Z" J+ e' k4 b+ T
    print(str);
: {% U( ?* H& [' }$ X% C% r7 \8 B% h
) |( k% a" f* [# p- ?    delete measureFaces1;   
* e, G3 }8 Z; `* r, A; E, a3 Q9 H    delete faceDumbRule1;+ y# @0 m# a" ~- ?
    measureFaceBuilder1->Destroy();
3 I% c- M! x$ j# g    return face_area;
2 ^1 D8 M) J) T3 t8 t# U; e/ h}! D1 k# p. \3 T- h
[/mw_shl_code]2 ]7 q0 P  g% y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了