|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) h. w' B1 R5 E: u/ T1 {
& d) h, P2 r( c* x2 ^6 o) R
NX二次开发源码分享: NXOpen C++获取面的面积和周长" a) @' a; p5 N# Z# I! l: t
! x+ X/ F7 Z) E8 Z$ V* \7 G! G% ^1 ~$ z
8 L& M3 C* t8 a x) A. Q8 y, S1 i# Y# }$ O
& C8 @% g8 P1 X, {4 q6 K% g* n2 R[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
3 ~( T8 ^) A' {* [- G* N) W' O{
7 u, o+ E9 m S7 A5 K5 n' t char str[256];# o5 A8 E, [5 f& m+ F' N
, b4 G G6 i9 t: R) H Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
( e& T4 o/ E4 U7 j4 E L Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
9 z0 D9 ~# }' [0 x4 _& P8 L2 l7 o. f: Z& N8 m
//FaceCollector issue is fixed in NX90 ^( C+ h* ]0 W( `2 M: N
NXObject *nullNXObject(NULL);
1 g7 a" ~/ e" Q0 K3 q MeasureFaceBuilder *measureFaceBuilder1;4 h- \ [3 R y5 @! U! J+ C& L
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
4 E' W |! R0 U 1 Y/ [* z0 M0 m9 A3 g) ^
Face *face1 = dynamic_cast<Face *>(face_tag);. o5 i8 ^- { t2 Y3 M
vector<Face *> faces1(1);2 w; w( R# ]: [% Y" U
faces1[0] = face1;
! V" \, G' Y- S+ L$ d# h) w6 L5 s- b FaceDumbRule *faceDumbRule1;! r. W) r% q$ w
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);* x1 j% { d' x. B. I2 q
, Y9 d- C5 B' D% M* p7 A' u
std::vector<SelectionIntentRule *> rules1(1);' f9 Q$ v+ Q" D# G: M" }$ ^% X
rules1[0] = faceDumbRule1;
$ Z$ P/ T6 E! I+ A+ @) u measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);, z7 @, ^+ }0 n" }* P+ J$ Q& ~
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
?' c) L% U! X3 @3 x7 f
! `2 m6 X5 g( U: i" v8 h8 R+ Z" z: ~0 _ NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
) A- _* j! A: s5 o6 P, Q/ W- D" ?& W9 ?/ a0 y1 k
MeasureFaces *measureFaces1;
) ] `/ r) |; c4 \+ \ X. D measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
' _+ [# y( h8 t5 Q; _, {* G8 `* p6 v, T% p4 L
# r% [ ^1 j2 L$ g S' |+ U double face_area = measureFaces1->Area();+ s- m: P$ E, N+ E6 r! A: g
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
, }5 N! p* K$ L print(str);
1 i# h3 U% Y! K) v
+ b* M7 O( k+ f double face_perimeter = measureFaces1->Perimeter();) l% I$ p3 d _+ }5 ?, n* O3 L
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
1 P4 A. Z: K% {6 N7 ^0 `# E print(str);: [% J ^) @& `+ I0 T. S: f9 R$ x. _
) h6 M3 _" k8 b delete measureFaces1;
: |3 {, }1 g! l9 O9 L7 f delete faceDumbRule1;
5 S) E. Q8 z( o$ I; \ measureFaceBuilder1->Destroy();) t" O7 F/ q; F# C/ `$ j Z, q
return face_area;0 m; ?. D8 j# g7 g4 t/ _
}
8 A+ o$ |8 ^) L1 q, C( [7 o- s[/mw_shl_code]
& H& X3 P3 A6 C6 v# I; F |
|