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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:19:35

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

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

x

  c6 C9 u' L* E& s1 y3 n6 C' ?: [0 w5 K- t& Z7 I
NX二次开发源码分享: NXOpen C++获取面的面积和周长- [3 y+ x. p6 k& Z

' ~( o- `( G6 M6 Z4 ?
3 D) R9 ^$ w& e$ q/ {
- Z9 x5 O* K4 G( _: @
! @# f9 h5 b: I7 `& y% i

  F/ O6 V% R" w[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)$ h' U3 K! _* |8 ~2 m% `
{; I8 D: S5 M6 T8 h
    char str[256];% w1 B4 m2 }$ h4 ]2 J( w2 V
        
' G6 W; J0 j% t& U$ m    Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
+ T$ r% k8 g# H8 p! L    Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));% g$ |1 B* X( B
. E3 Y: `& x. t" |
    //FaceCollector issue is fixed in NX9
. ]- w! U" S6 S3 \& o- K    NXObject *nullNXObject(NULL);4 C, m' ?: n1 Z  r0 p8 G
    MeasureFaceBuilder *measureFaceBuilder1;* A2 _) l' h0 F. b
    measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
( e4 h9 T0 z1 C, M        
3 `7 M; y  {* P" _8 V5 W    Face *face1 = dynamic_cast<Face *>(face_tag);
. o' y# W2 Z& q/ P3 w  s    vector<Face *> faces1(1);" t2 E  M  w# Z+ S5 W+ V( h
    faces1[0] = face1;
2 {. o3 H& D) T; N# }  T' S    FaceDumbRule *faceDumbRule1;
) h& {5 ]7 E% D: T( d    faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);+ e& L7 i( R& X# y
    / f0 ^, M0 l% ?5 R! e
    std::vector<SelectionIntentRule *> rules1(1);
5 u0 W/ F* u6 q    rules1[0] = faceDumbRule1;+ {. L& o- `8 X% f, s3 M+ x( J
    measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);$ U. j2 f( s3 _4 Y
    NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();: h" k  t4 H6 b  y5 i/ p) H$ C
. m0 v. C+ ]8 H3 M: ?. e8 S
    NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();/ H& C& u7 y, c- @8 G
* T  i5 x8 C* [; }( n: |; s
    MeasureFaces *measureFaces1;. j9 p' F& ^2 d
    measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
/ F* i% L8 R: D# S( p8 ], ]/ v" p4 \" j. H8 q
    double face_area = measureFaces1->Area();
1 L5 T$ A% P3 V$ K8 P    sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);! L2 ?( j2 r8 P+ m$ ~/ K
    print(str);
' ?) n8 k9 Z0 k# p- R   
. h2 [6 \- J/ D& T    double face_perimeter = measureFaces1->Perimeter();6 R* r# h4 Z! ?  c+ I- ~4 a
    sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
& C/ V4 k- J6 e    print(str);1 \, s6 N( O- \0 S- `
# D9 o# Z$ k: ?' \6 r1 H
    delete measureFaces1;   3 |- p7 ]! g+ c0 R' O
    delete faceDumbRule1;
% m0 r3 k6 \  Q0 @6 R0 j    measureFaceBuilder1->Destroy();2 D- |' f+ z- P3 R! u1 l
    return face_area;: A! i3 U8 W8 D5 T' x" S, v3 n( A9 |
}
0 |" _1 Y$ B' k; V" M' o[/mw_shl_code]
) l7 a3 q- _6 [
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了