|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
* L- D+ B: r) a
7 j8 H4 I6 A% D0 ]% ]NX二次开发源码分享: NXOpen C++获取面的面积和周长
. l$ C$ `. _5 \% Z& ~6 ^0 s9 S: G5 V I, S% D4 y
1 ~6 M! |9 X1 s/ C, ]; }* _% c! O/ Z% u
) f1 V! N4 u" _
" [5 U. ~8 ~' s: T/ e8 d
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)0 ^8 R/ J% Y" R' S: M
{- I2 x2 C- R* L
char str[256];$ ^$ t$ j7 Y/ Q) j+ R* s% d
2 m! ^9 {1 G$ |8 O& ?# d Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
) Z3 N* R" t) G/ K S* ` Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
7 k; o+ g! \8 Q4 H! r* v5 P4 t/ \- n
//FaceCollector issue is fixed in NX9( r7 B( f( e5 h/ Z! R6 K% r
NXObject *nullNXObject(NULL);
0 x: }( U" g8 B' Z# r0 n& w+ o2 J MeasureFaceBuilder *measureFaceBuilder1;
5 `% O* m7 J2 @+ ` C! q6 P measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);/ D; u+ j, n% T. E' ]* E' T- ~, J
. n2 k. @0 R$ K- H
Face *face1 = dynamic_cast<Face *>(face_tag);; e- t' a- V j8 ~' x
vector<Face *> faces1(1);
& a) H7 l/ W% s faces1[0] = face1;
* q, z9 Q" G' _3 o FaceDumbRule *faceDumbRule1;* w, f) z9 I' b0 }* w3 ^ R3 z8 @
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
2 t0 R8 z x4 f+ G" G
$ h5 d0 g! T% ]3 m( L8 C std::vector<SelectionIntentRule *> rules1(1);5 @/ w8 \0 n4 \4 M- O9 d
rules1[0] = faceDumbRule1;
/ J0 I: q9 b7 I& b- R1 W! G' d" S measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);* Q9 u3 N1 M- y1 P
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();1 a h1 B5 R, t! G, Y8 R! v
. ~! [) ] R9 d# o
NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();/ I2 ]* y8 W: \7 O* r4 M
. |7 W) u; F8 F! c MeasureFaces *measureFaces1;
3 v# N5 n4 a( V. J' Z measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);5 a3 S- _# ^: }& { R+ X2 y
$ ^6 }# {' M$ Y* l
double face_area = measureFaces1->Area();3 \0 d( C# V# I8 t- o1 c
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);1 ]" v: y% W: s" V
print(str);
$ l+ Q: b+ q" g; v; v! N
/ d* s. O1 ^" k double face_perimeter = measureFaces1->Perimeter();
( S# k% d- I3 \, Q" g# o sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
- L! o$ f9 k9 T9 C* o p print(str);
0 ~$ I5 o. i7 t! N, O6 W
" z, F* A I6 E$ m! b delete measureFaces1;
3 K7 k/ P; M0 }0 P6 f `/ i delete faceDumbRule1;, |0 i1 g0 W$ l. J/ p( s
measureFaceBuilder1->Destroy();
6 B( j; {4 f/ E6 T3 h return face_area;
3 z% Z5 g* b6 L9 S) X( t}
4 I' q$ r* p& [9 ^5 j `[/mw_shl_code]' u* d+ H8 i. c
|
|