|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
( N( }6 b) o. \1 j$ R2 o
, |; i- I9 x& U+ \7 MNX二次开发源码分享: NXOpen C++获取面的面积和周长
4 e% Z$ {) }8 D: ]
8 X2 ~' [5 B5 H' d5 S9 t2 [. c5 o/ C7 v- V# m
/ b2 K6 y) w) s3 q# S* o1 I! ~
, ^* Q. m3 }/ g; n* ?) z- O
" `; i# t/ V1 h. i# n% j7 L( T[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
( n" ]5 E& D& D# E3 U, c: _7 u{
: J& O( r2 a& h. y; O7 n" o char str[256];$ ^; Z* Y7 Q7 F, u; z; |
, s3 D$ [; Y8 E& v" B Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));, [2 i1 E1 p: }, E7 _7 l% B
Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
5 f2 T) ]! H* Y
7 z- f( }9 x$ ~* F //FaceCollector issue is fixed in NX90 a& p( b$ I$ q4 x: x) K5 Z9 I
NXObject *nullNXObject(NULL);5 } E. d4 y, k) {7 S
MeasureFaceBuilder *measureFaceBuilder1;5 X' X2 M& T- ]5 i) e
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject); d* h& O, P/ W# M4 X- f6 v, ^
* h- ~ w' p' v: E$ N! o Face *face1 = dynamic_cast<Face *>(face_tag);8 r! @! |4 x* Q- A/ z
vector<Face *> faces1(1);0 K4 f L! R6 m
faces1[0] = face1;
1 i4 n# w. O( v5 F( K3 b* F: i) {+ N FaceDumbRule *faceDumbRule1;# B$ _* z# w/ @( P) W+ w
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);* l I! J% G/ q3 p) H
; K7 p, i4 R/ i1 t e% d
std::vector<SelectionIntentRule *> rules1(1);- m3 h r# n3 v& Z" @4 l
rules1[0] = faceDumbRule1;, t }0 h% V8 W8 l
measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);+ O: O$ L' M) n6 H
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit(); u8 j. g8 ~0 L
* J- h# p( t) G2 M+ i
NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
! n' n* D0 N2 B9 ~+ j; N- T O# J2 E6 g
MeasureFaces *measureFaces1;+ v/ r6 g* L( j$ w/ t! @3 h
measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
4 ?& \% T9 ^" r0 g
' H- D1 Y* p5 P( g* E7 l double face_area = measureFaces1->Area();
' s+ J/ c- V% f; u& P3 t1 e) |" \- n sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
" s# [3 x' o2 m0 f" o/ u5 r print(str);
6 X& g( y6 c ^' g( e% A
: Z: D/ \+ T1 b double face_perimeter = measureFaces1->Perimeter();
. q# z5 _8 U5 Z8 i- D4 F5 H) r5 w sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
1 G3 @2 O( R' Y* z: {1 x9 @/ { print(str);( r+ G/ L' H3 r ?3 }- E9 {8 H! Z
3 E/ S. B( Z9 P/ k# O) L% x9 ]' |
delete measureFaces1; ( h! q0 X( c, n
delete faceDumbRule1;
5 n5 l5 y6 _$ }3 H0 T measureFaceBuilder1->Destroy();
, m+ A% r1 E* z! W' J return face_area;$ C. ^( R+ `) }( V4 O
}
5 {1 @7 X. A, M' x" @ |; c& |* F[/mw_shl_code]% J. h% V% L) s+ N3 X5 f- d
|
|