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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
$ b) {2 ^# _4 q6 E" \) ~
; p6 ^9 ]1 h' n
NX二次开发源码分享: NXOpen C++获取面的面积和周长
% M/ }: p- Y7 _1 M* T; U8 m9 k; b( _) |0 Z6 |

$ h* P' Y3 ^- f  i# v" G; X& s' L7 B- F6 t; ~& e0 i* L. z7 o
& f4 b" x: I. I* w) X7 k$ y

/ Y) C; `# J0 I[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
, a6 s0 B% @6 d1 I. \- I/ C{
* A- ^( E' i3 k    char str[256];* H" h1 q. M; {
        
3 z# W& z; [( A1 E    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));) h, h; c4 z$ B* _% @
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));' g4 D: X3 u, m# M" N1 \+ K- t
$ Z; j/ R' |8 L
    //FaceCollector issue is fixed in NX9
) P9 M/ B6 \5 F- t4 u1 V" w% C    NXObject *nullNXObject(NULL);
; |5 [- i; m( Z" ^    MeasureFaceBuilder *measureFaceBuilder1;5 P# k. d9 q8 k% o- j
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);2 f/ V2 Z7 s0 Q5 S2 k
        . R, P& E4 h: a+ \9 a
    Face *face1 = dynamic_cast<Face *>(face_tag);
, b0 p1 b8 Q! j5 L9 U    vector<Face *> faces1(1);
; V6 E1 m9 H9 X- i7 `" {    faces1[0] = face1;
$ E! l8 r) C) Z/ Y    FaceDumbRule *faceDumbRule1;1 _, S$ ?# }$ Z- c
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);* C# f  [  v7 \) D$ M2 h3 B
   
% [, z) `/ [+ K5 P- V% \4 C. O    std::vector<SelectionIntentRule *> rules1(1);
: Q) Y# j, c% X9 _4 i3 q$ B    rules1[0] = faceDumbRule1;
& |* A1 X, e2 [" U! B0 J6 r, U+ ]    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);4 R* |; Y: D* L' s
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();! v; t1 h, \, A% y# n
+ R% u& J) n& B
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
5 g7 X( }9 a, B8 X) W! H& ^) W, Z3 d3 t: f4 ^
    MeasureFaces *measureFaces1;* O* Q+ o3 m+ A9 B9 g. w
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
5 C1 O+ Z. i9 [/ s0 l0 \
( {4 p) V1 p( X" x1 ]% y    double face_area = measureFaces1->Area();6 \: I4 O! m( A4 I; Y+ p  b1 g
    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);; h9 i$ O4 r9 @$ j3 H
    print(str);! ^1 _/ D" B6 X- L. X, a1 _' M$ N1 X
   
4 K9 b2 J* N1 x8 q    double face_perimeter = measureFaces1->Perimeter();
% Y. F1 i6 ^+ O    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);# l( q0 o. D# _( I8 R. F
    print(str);
1 V  U) p. G4 H) d; A1 D4 w2 G
, z$ Q1 c* i7 Y# Y8 r7 v+ G0 v    delete measureFaces1;   $ I( ]9 m+ @# B8 o- p+ Z
    delete faceDumbRule1;
% X8 E) }+ C  d2 _: w6 _- [    measureFaceBuilder1->Destroy();
1 U  m( Z0 ^$ D" E; v5 w    return face_area;
# `( x( ]6 T, y5 ]4 R}, l0 H% E5 Q; [9 c, ?7 q
[/mw_shl_code]
, X& b8 r9 w: u" U: s
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了