|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 a0 m$ X8 R3 D" ^! w5 l% s! M. V/ m3 p P, Z$ d
NX二次开发源码分享: NXOpen C++获取面的面积和周长
. p, g) F; h3 b& b" e5 w- r$ j
3 |2 U) v: x. S' `4 }/ z9 T, G. X
/ d4 o2 b8 G: S2 `4 ]
4 Z: a6 q! w7 R. {3 s7 L+ o8 ?8 ^7 V1 `$ n& q' _- T; z
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)- y( M1 M2 g1 F
{4 i' {- t6 K3 i0 b/ y
char str[256];
; {3 ]0 p$ r# t+ n! e 5 {1 u4 [( I+ I( x2 C
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));/ K0 h& J; \' K
Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
* t* z; @3 `7 v4 ^! p" ^8 Z. A4 r1 N4 H9 W0 U. m
//FaceCollector issue is fixed in NX9
3 Q% p8 x0 s+ Z NXObject *nullNXObject(NULL);
$ x# i; [/ S, C# G MeasureFaceBuilder *measureFaceBuilder1;
s, D. {3 X: m. N0 v' [/ C measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
6 P" X6 I. J3 O0 ?1 w$ X 8 P- i4 k& X) p h" B
Face *face1 = dynamic_cast<Face *>(face_tag);$ E0 i( K( J' B! A: |
vector<Face *> faces1(1);* _0 y0 j F1 k" P* e- ^* Z2 H: @& p* N
faces1[0] = face1;
@! v0 C8 m7 V4 k7 `5 } _. G FaceDumbRule *faceDumbRule1;
( |( a2 T6 K. n4 G+ G- D0 H faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
( b Y; q* o# R( b1 M) p9 n7 `
7 K; v* P! w7 z/ Y8 U std::vector<SelectionIntentRule *> rules1(1);( n8 N8 c8 b+ N \- ]
rules1[0] = faceDumbRule1;
* o1 h) K( o' x measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);5 m. {- g& R' V5 R- C
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
) t4 c- F; ~9 O7 m9 @; I7 _ K" L5 d+ \" y4 R
NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
/ O* l$ k- _$ h4 K
4 h+ ^. U/ G8 K: c5 X MeasureFaces *measureFaces1;- I# n5 F6 [7 {: }: y) f
measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);8 L4 o" ~. q) v9 J$ X3 [; d9 q
& q/ U9 b% I$ H( s) E6 c2 I
double face_area = measureFaces1->Area();0 Z ^4 D) U1 d" r: h9 J
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
- Q1 d3 G) |1 ?' B! W: e }6 n print(str);, ~, ~" p! ?5 j2 b1 c
8 T! G M/ C: _0 i& ~% l
double face_perimeter = measureFaces1->Perimeter();" e" U0 T! S5 I* _: v! S6 W
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);+ _; E1 @1 D5 |- x
print(str);
: G8 {) f* X9 f- U7 f8 W2 W; B. Z' X, Y, G
delete measureFaces1;
8 h+ U6 T' Z0 y4 X6 ]; y" B% u& r delete faceDumbRule1;
9 b- M# ~ k9 B& ] L measureFaceBuilder1->Destroy();
! y! s d f- L* z# w2 \ return face_area;
4 G7 I/ O8 z, F}3 G6 F+ F6 A6 e
[/mw_shl_code]
. X4 D; p( v. F |
|