查看: 4690|回复: 1

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

[复制链接]

6

主题

4

回帖

60

积分

管理员

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

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

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

×

" Z; ~! e, I3 m: V$ ~: o6 T5 A: _- ]9 J. B
NX二次开发源码分享: NXOpen C++获取面的面积和周长( }- `$ ^$ R0 Y! P& Y

" ~$ R' ]" F: d
  ?8 h/ J% v. l2 u; W

; B, j. l. p+ f! x6 k- K3 V

# F. K$ ]' j+ f3 x: T8 y* c4 A- n( V; O: e9 m- c, s
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)8 Q; g, R* w5 v! @
{" R; ?/ M8 m0 o. p& k* G
    char str[256];
! y; i5 `% ?0 C( j9 p' K        / j" a9 N9 B4 y
    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
1 @, C+ p' G; W  N: R    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
! z1 ^0 e, |; }: z
# D7 O' H$ @4 k" h- C9 T- W; ~    //FaceCollector issue is fixed in NX9
: G+ B( q# n9 r5 ]. I    NXObject *nullNXObject(NULL);
# K- t$ v6 C* b0 c$ C& X    MeasureFaceBuilder *measureFaceBuilder1;
$ x% T# L: H8 v! o: q    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
7 I4 @2 T7 G7 W3 t( r: F/ m        
* E. i( \% J" k- Y! D* ^    Face *face1 = dynamic_cast<Face *>(face_tag);) y7 b* r0 W, R7 {
    vector<Face *> faces1(1);
7 t1 J" q6 K9 H% |' k9 T    faces1[0] = face1;0 Y- R5 {9 W# S9 X7 _) N1 M
    FaceDumbRule *faceDumbRule1;2 G2 p/ Y4 j! \/ H
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);2 `1 g7 |& S9 l% ?
   
3 y0 _! f$ b2 `/ h5 ^3 O- {; y* x    std::vector<SelectionIntentRule *> rules1(1);# k; [6 T# ], D' x- Q
    rules1[0] = faceDumbRule1;
& v9 u1 x0 f! a5 T    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);# x: i$ u) U6 j% m* {6 b
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();3 R1 T1 L) a5 i. P3 d1 o1 d
4 P% L5 z  `2 b1 ?' {5 A; _
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();# W. Q& n; ^) I6 X1 A$ G. @  s

/ y' U. q9 t  n9 B  U    MeasureFaces *measureFaces1;
2 A, |+ e' W5 @) ^# A0 c( P3 {    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);/ c' \. e: A$ R& {5 H: ^, C
* B4 {8 ?& A% Q: N6 j& L# u
    double face_area = measureFaces1->Area();
' z8 `- R5 j+ C8 _    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
- c5 x2 P7 W7 `3 h& A    print(str);
# e2 v3 ?) Q' l! z+ c: ?2 V# w    8 f( C7 i- K1 \6 T* r
    double face_perimeter = measureFaces1->Perimeter();
8 k! ?% H! [. N5 c% j$ H+ n    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);5 ?' O8 Q* e* r% w* V3 F
    print(str);
) P3 z1 g7 Y& H6 ]# H& J+ K& Q
$ K: `. E2 Q, j* u, l: m    delete measureFaces1;   
1 n4 I9 e: t. c; J; \4 k    delete faceDumbRule1;+ C* y5 O3 |5 U, y2 S
    measureFaceBuilder1->Destroy();- t' v/ ~1 C9 `& ?
    return face_area;% @! }6 `8 f4 n7 n  ]$ m
}
$ ?$ I/ m, X5 Y6 A* W[/mw_shl_code]' L( ]5 g. V* s( F7 g
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

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
回复 支持 反对

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部