|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 s9 y9 v! b1 ?- k, f
5 X! D9 j& M0 y) B" w9 ?NX二次开发源码分享: NXOpen C++获取面的面积和周长7 Y7 M" y$ ~$ s3 }0 L
8 @' D2 w, `! ^# r5 p" y: `% P+ ^" E
1 r% c& T+ u" F. }! V7 T" w, C" E/ @: E6 H( ?) @
- c, M! N# n0 w
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)* x) {+ a2 y! }. ~5 r6 F7 G
{
: r' |: `% a( m& B0 W char str[256];) m1 J& y& V O+ r$ f
0 I$ b: S* o K& r" Z+ s* L. ~1 N
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
( B% D; W% V+ h7 V6 A# @4 T2 F Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
; t! Q% c3 g" q. g' R: J1 t/ q5 ]9 N+ T0 ~- X
//FaceCollector issue is fixed in NX9
/ i) u9 u) E. f$ [) Q' P5 O NXObject *nullNXObject(NULL);* K" N0 E+ l. e* [& ~" }
MeasureFaceBuilder *measureFaceBuilder1;
# R: m& `* R9 R( d" [ measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
4 k0 W8 U' ?0 }: X0 m
! X1 Z3 v0 I' E1 R9 @& V Face *face1 = dynamic_cast<Face *>(face_tag);1 L% l w- K- d
vector<Face *> faces1(1);* L0 g7 J& x# |: Z) L
faces1[0] = face1;
5 ~& Q- R( W3 N& e G FaceDumbRule *faceDumbRule1;7 }: v$ R+ }0 |) d& C7 Q
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);6 B9 ^/ s* v5 S' B0 u( A
4 H9 l% A% k- Q. J std::vector<SelectionIntentRule *> rules1(1);
5 K) i* l: C# H- Q$ L6 u. b( } rules1[0] = faceDumbRule1;0 g. S5 C" g& s8 L N2 Y! l( y
measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);& i! r1 c' e+ ? v, w
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();' {2 O5 }3 r8 X' X' F* |
- O, Z. a% V4 r4 S: G8 o2 ]; E* p NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
5 u$ f1 p, ?6 |. Y, N/ O2 Z; _3 X8 a! R; @7 f2 {0 m; J; g
MeasureFaces *measureFaces1;
, k- h& o9 ^/ i2 Y measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
) G/ G& f V3 B# V5 X# l
" M% U* A6 H6 l7 @( V, x double face_area = measureFaces1->Area();
" _& c3 c/ x# n' l$ c sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);) _( y1 h: V2 E0 n+ w
print(str);
! z1 k' T% v5 ~: C6 Z
4 y! x: R+ r; B5 j* s0 k double face_perimeter = measureFaces1->Perimeter();
9 Q' w, H$ W7 F; H+ W' ^ sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);( Z) w( W6 N: d4 f' O
print(str);& _9 P% R9 B, A2 u4 ^, m
C/ A& ^1 R; {# S+ `' [$ y& ?
delete measureFaces1; ; N; _* d/ V% `- N, Q
delete faceDumbRule1;
1 ]& V( O/ m1 Q# J: t measureFaceBuilder1->Destroy();, E7 ?! y- I7 E8 ]6 r: ~7 A
return face_area;
9 e$ L8 T( a: X7 X}
5 R; h' |" M2 L6 h[/mw_shl_code]6 N- u" |4 K+ ^! [7 j8 O
|
|