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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x
: L" N# O- \/ R

' x7 l# m3 n! X2 sNX二次开发源码分享: NXOpen C++获取面的面积和周长; G: q" z3 [. S: x& s7 {% U) `

7 O" A- `$ _( G9 N/ I+ T& r
5 d& P. G; |7 H
9 a$ `% y+ U) D/ L

8 \1 t7 d3 \. f0 s9 U5 Y5 @1 ~7 G
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
4 ]* ]4 Z& i3 ~$ P# U6 r{
9 E+ ]: b( `+ k    char str[256];
. `8 o  [; \  Z; Y5 u        + q  T  Y* [" }7 Z) z! e  E' x1 e
    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));$ ?; i( |9 y' g& y% T
    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
9 b2 I3 Z* y6 L6 g9 K% `4 ?$ q6 M" J0 a8 G1 n
    //FaceCollector issue is fixed in NX91 L, O7 G2 J7 j, N2 k
    NXObject *nullNXObject(NULL);$ n/ t) U0 M4 `) w. t5 U* W
    MeasureFaceBuilder *measureFaceBuilder1;0 D' J' X9 n/ e% P2 M& h" ~$ f
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
; M9 ]9 U/ O- L. L3 u        
5 x0 Z8 v. v; Z; |2 z5 l    Face *face1 = dynamic_cast<Face *>(face_tag);
' u$ g7 z, G; y) k" `6 q* \/ r& C+ I& c    vector<Face *> faces1(1);- v" t2 U! q' l' m
    faces1[0] = face1;1 ^  o4 c' B) U9 f: I' E" D' N5 J
    FaceDumbRule *faceDumbRule1;. C: B: ^- T' L
    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);/ y  B' X" T% H, t4 \
    + x/ c" \" z& }+ e& z
    std::vector<SelectionIntentRule *> rules1(1);8 @; [4 q/ e+ p; C1 M
    rules1[0] = faceDumbRule1;- {6 w. e( b6 }! r
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);% h& k% I3 j6 l# q; \
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
) t/ g' u5 R' ^* A4 c$ K
" B# m5 h8 i  a( x; B1 A    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();4 w3 z& M  x/ ^: E8 X) x

3 N! o: Y3 `6 b7 g    MeasureFaces *measureFaces1;
- w$ t" Z. r+ U$ T* q: r: W, _    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);" P/ q& A9 [, m* U

6 u  I0 L8 P% ?: t    double face_area = measureFaces1->Area();
0 E8 _' V5 n% L+ x    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);7 ~  d6 W4 }9 |, x- k4 a0 T1 S, G
    print(str);$ {0 k' w" K1 [3 x
    1 z% n& `! L% X( j
    double face_perimeter = measureFaces1->Perimeter();: s% Q; W& F0 d5 M
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
' D% E! C& f9 x! g% @    print(str);
9 ?6 R  e9 s& M: w2 x% p; ]9 s$ F9 x! _$ D
    delete measureFaces1;   
; W4 e5 K/ Q0 O& |    delete faceDumbRule1;, n3 r! A6 \9 w) h3 c+ r
    measureFaceBuilder1->Destroy();
4 m# u1 T! j, Z" p( I+ P    return face_area;6 U* |( j5 K7 E4 t) ?- W
}. _) R% M  |% V$ }4 v% M0 N8 v6 P
[/mw_shl_code]
; z9 ?2 d8 u9 P
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了