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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
2 q3 ^6 A; u* A  s5 K  H0 S

7 `" ]8 w& M9 z& _" F# C: uNX二次开发源码分享: NXOpen C++获取面的面积和周长4 a! W6 i3 Y: H4 N: v% t) ]
! X1 R6 e- u. }6 e0 O3 A

: t3 h' E/ J8 f4 Q$ D  e* ~1 @$ K6 p& y% y$ b0 ^
' U+ N1 k; ^+ g: v" D. L8 q0 k
% F  x0 v+ T! D' ], x
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)' i" V% `& y: V
{
0 D) G: }8 B0 r" ?" T    char str[256];
! M! A9 I# D0 h" v% w8 L        
. u; A4 A# R8 `0 P& M; T/ X5 a    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
4 ]6 J# W: Y! i. q* y0 Z    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));4 \+ ?2 @& S' W- w! B

" u9 a# C( G+ y    //FaceCollector issue is fixed in NX9  J: e% i- |% |. r
    NXObject *nullNXObject(NULL);! c$ N: v2 Y$ @" t; C' Z
    MeasureFaceBuilder *measureFaceBuilder1;
5 v3 C' {, C, P    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);% w0 {) v4 O3 K# g6 b) s+ K
        & r1 Q# n" d- m+ b* _0 k) L
    Face *face1 = dynamic_cast<Face *>(face_tag);
2 A% [. A( L* T) v* m: ?  o  e/ Q* M2 k    vector<Face *> faces1(1);
, R, M, m! G  d    faces1[0] = face1;
' M: X: b5 R1 V3 r7 M! N9 ^    FaceDumbRule *faceDumbRule1;! n( W8 e/ w& x4 P2 A
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);) o# a6 V, D8 [3 e  h" z9 `; ?
   
. k0 A3 t% ]9 W4 I" J/ B    std::vector<SelectionIntentRule *> rules1(1);
; {3 _0 z; V1 R  W2 @1 Y    rules1[0] = faceDumbRule1;
) f+ K) a0 B/ ~+ Q    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
9 y* a3 V+ q3 Y; p1 ~    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
/ Z4 V! Z5 I7 w% o
9 j, v1 S) L; L9 n# {  Z* a) e8 I    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();% y9 l* B4 h' Z# }$ A0 O+ F% d' [
: w0 F5 d' r) F+ p6 n4 N% w
    MeasureFaces *measureFaces1;) y' D/ v, B( N0 j
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);3 I% {; W" T& O) N
7 x/ J( d# T( Z" |2 x: ^
    double face_area = measureFaces1->Area();
7 u  W- M! [  p- r. v5 m1 |9 s    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
! D1 {( v* h* H: X( b, ^    print(str);
/ T& @5 V) Z% ?, L2 ^1 x   
, ~2 a: i2 Y+ }, i$ M1 I    double face_perimeter = measureFaces1->Perimeter();5 ]3 y5 w0 `) j0 w% X" M1 q5 K9 ?
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);/ y: r7 d8 Q5 h% y6 B" Q
    print(str);
* f. j7 s: J: c
: D4 E4 P& K  h, o2 L# S6 @, d    delete measureFaces1;   ' V( }7 M5 s+ L
    delete faceDumbRule1;
$ p. X* W# J7 K" J# @: \    measureFaceBuilder1->Destroy();, x) A5 ^: t1 ^# Y; C9 S
    return face_area;
# e- A- k3 ]# e7 B# _+ k}
; U3 p0 \. |; Y! f; r7 V[/mw_shl_code]8 G3 n; q( \' k; Z! }/ t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了