|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% y2 I4 S5 R, j9 `. |
3 j- z" Z; @& u
NX二次开发源码分享: NXOpen C++获取面的面积和周长
0 ^+ {- r% i; l) P+ S$ q
* {- C+ p2 P5 F( m1 L/ _
2 j. s) p! R: W4 G9 u7 T! j* e
$ ~; t6 H9 ~6 u% X. o; O: n' A) V/ I( J/ g
; [" V( L8 H/ `& X* C% Q
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
$ ~( C; W& l- r{' q7 h" |& Q3 J: ], _; `
char str[256];
) h# H" \7 l) ]8 G # _. M* m+ Q7 v% P
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
! Z7 H5 `+ u" {# b4 Y) U Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
5 [% _2 Z# w: G7 f' x7 T6 H5 T3 ~ U. X) g! ?, u. W3 h/ h' O
//FaceCollector issue is fixed in NX9/ x& j& L, _: P; x* Z
NXObject *nullNXObject(NULL);
+ V9 Q$ k6 ?2 Q* z! Y+ b MeasureFaceBuilder *measureFaceBuilder1;
; V9 n" t" p0 x2 } |1 c. V% | measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
7 U0 x7 M: E6 X( I/ ^3 o
: o; y6 W+ U5 K+ z1 ^ Face *face1 = dynamic_cast<Face *>(face_tag);7 k! N0 J& Q8 D: ~+ }6 ?" }
vector<Face *> faces1(1);
. m5 x7 F8 B7 b" y6 R1 w3 f& b faces1[0] = face1;
% n" `9 _: u7 t: ]) j" y% R3 \9 U FaceDumbRule *faceDumbRule1;! ~! v4 c6 z# Y _4 U
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
8 l" A/ W/ M5 @3 O6 M5 v " p* U; j7 K" P1 s8 W" k9 Q
std::vector<SelectionIntentRule *> rules1(1); T& w) h$ M- t# F
rules1[0] = faceDumbRule1;
, ^5 Q! h* n; V2 O0 E5 H! C- L measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
$ ^% v( ~0 g- E1 E8 u NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();! {' j9 c7 P1 k. x( L0 z9 Z
7 j3 T' ?1 ^1 P! E NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();* p8 `$ S4 i: J9 w! Q% p# I
$ q1 D3 ?4 x& p; O% l
MeasureFaces *measureFaces1;
( k5 r; j2 N6 W% t" f4 y measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
1 M9 @/ v: T0 _& X; s( G7 K5 d9 S5 z8 K1 j6 r. x, ~
double face_area = measureFaces1->Area();3 e, n \5 u8 `+ P: n
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);1 |) B& ^% q& ?, n' s/ ^; ^$ J3 X; U
print(str);0 }. |3 V9 z& V* e1 s, p
! X: r/ l. C9 Y T/ N' f5 u double face_perimeter = measureFaces1->Perimeter();
% G% z1 A6 G( b+ E2 M) G# F, \ sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
* \- V: y( i' y) K5 l' [$ Y print(str);
* g2 K; }. O2 O( {- E) ~: m
" g: l9 L1 {3 `2 V/ N7 } delete measureFaces1; $ G2 ~$ C! D- c% {! `
delete faceDumbRule1;
0 q1 s+ K' F& [$ J measureFaceBuilder1->Destroy();
; M: @- ]* b5 m; { return face_area;
# h. e, h2 P5 e' p+ q}
- M1 q/ A9 {' m. i! a: u" R: X8 E[/mw_shl_code]: D5 n! T% r7 G0 [2 n. }
|
|