PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2018-8-23 08:19:35 | 显示全部楼层 |阅读模式

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

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

x
9 u/ A) ?: A7 d/ G

1 L; |$ o% K7 @3 y6 @$ kNX二次开发源码分享: NXOpen C++获取面的面积和周长
/ s+ i% N" b' M- ~0 K. f  \
. x6 K4 ?% `3 [+ k
9 D8 c# v+ }; H1 ~% K" {
8 Q0 h! x3 H& T5 Z9 d7 D

* f; G1 z% n" n( W. q
3 K% O9 R, k# n% J[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag). B1 _2 F7 S: j1 W: K, b
{9 Q# v' a, l' ]' e. W, M) t
    char str[256];
; r8 S) P' ]9 c! y& f        , B( B2 x) s. `1 B+ `1 V/ B" g
    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
7 }9 L/ J, [" N- i    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));* v8 a- _2 f5 t3 x6 u  G6 b

. l2 H7 L" ^) o! x5 Z' b    //FaceCollector issue is fixed in NX9
  B. m- ^( l6 J) L1 n1 O    NXObject *nullNXObject(NULL);
; G; l& q6 v/ j. Z& t    MeasureFaceBuilder *measureFaceBuilder1;
( A( o$ J4 c, R4 t7 N; K( ~% Q    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);& y/ h. y- L& ^, V+ b! e
        
8 d6 Z% c1 m( g% _# g& y    Face *face1 = dynamic_cast<Face *>(face_tag);
& _9 M5 a  `$ Z$ n0 B    vector<Face *> faces1(1);
. R2 v6 _+ C9 J1 }) ?0 @, ~    faces1[0] = face1;# i6 h, N( |1 R5 F2 H' ~- @! J4 Y( Y
    FaceDumbRule *faceDumbRule1;
$ ?, B( T0 g& i, g7 C$ H; [0 I    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
: q1 S5 L  i, U    ' T4 }1 O. b/ [0 t
    std::vector<SelectionIntentRule *> rules1(1);: \( }8 f: O9 b0 G6 e! x
    rules1[0] = faceDumbRule1;1 M5 D3 {. l9 `; i3 P# k! ~6 c
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
. l' x3 Y( {! u, E: B$ `    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
1 B. f; l1 w; y5 O" `4 `! ]% C1 R& e3 l  g* b
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();0 m/ D4 X6 ]1 ~$ }$ B* v8 c. o

4 \# |, ^; w" ^8 S  p& X    MeasureFaces *measureFaces1;  |: L; p% y$ n1 ~
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);. j# M  z; f' q& f% u4 F6 q

- i+ {7 G+ s* |7 }4 A    double face_area = measureFaces1->Area();2 X- c2 J# D8 j% u3 k
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
9 h" g1 ^  P* J8 ]; q    print(str);
7 u4 D- M# P) S. P   
& f* F6 A7 j: z    double face_perimeter = measureFaces1->Perimeter();
) w9 K  t6 _; O! H/ O" k2 N! p# P    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);" H) T' W. x# I2 C) L: ]
    print(str);
; c$ j6 v. e7 v- m+ r6 }, \( Q$ m1 F' G  G
    delete measureFaces1;   
/ Q3 z: T9 ~! T1 M    delete faceDumbRule1;% _/ ~% T! _( B
    measureFaceBuilder1->Destroy();
7 W/ }; g' T- h. n    return face_area;  l9 Y/ _8 G. M0 R: k6 h
}
8 t' j9 N: R* m1 ?) f8 }[/mw_shl_code]
$ m. o9 E2 Y( v5 A
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

7

主题

58

回帖

866

积分

高级会员

积分
866
发表于 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.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了