|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
9 W! [) b& a" T0 O* N9 S" }3 J7 e4 m
NX二次开发源码分享: NXOpen C++获取面的面积和周长! p; r, d i6 ~4 G0 I
5 C, L3 n% H& N5 C2 b! ]- }# k
8 P0 F3 j6 G# v
" P% L5 z/ M5 l% W
2 a3 J8 c, c1 L7 K% \ d& y5 e' L5 R3 e( |4 Y
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)5 G: x% f! ]/ u& }- u# O
{
" [ S7 T7 j! |8 v% { char str[256];
+ ?# G p& h% H6 B
* h) F0 m! T* p5 ~% A Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
" s, N6 m+ I& w9 B' ~. b- x1 f Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
( T8 p; A. k. i2 s* p0 q# i
: Y/ a z& c% z" I c //FaceCollector issue is fixed in NX92 f4 r4 F. H; t; K' G' C3 f4 H- }, O
NXObject *nullNXObject(NULL);& J3 v# S, u8 o
MeasureFaceBuilder *measureFaceBuilder1;1 k! V' [3 S9 K! C- J- F5 L
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);$ Z# I$ K5 B2 I- B: y5 J7 q
' t) q6 p7 j/ }4 N9 P: d0 Y Face *face1 = dynamic_cast<Face *>(face_tag);
7 R7 C# I: ~; i vector<Face *> faces1(1);6 y/ [: S. Q0 i- K: G4 E
faces1[0] = face1;
4 f' s9 ~2 H! `8 D4 r9 c6 R) ^ FaceDumbRule *faceDumbRule1;. O. r/ f D* k0 C* M: d2 ?2 z
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
^0 S& w5 ]. e3 U7 p$ y
$ g. z4 t8 C4 z ~- u6 H std::vector<SelectionIntentRule *> rules1(1);
/ N$ T' N) ?9 J0 b8 ^( y: p* ]) { rules1[0] = faceDumbRule1;
- k$ R D2 B5 I measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);5 s7 }) v% |- j1 `+ \+ P# ~
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit(); s' x- k9 h- z
- ]; ?- m: v; z8 C' R% c- }
NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();# u6 O4 d7 {& y
3 B. v, @8 v4 Y! D" k( `( M H- x
MeasureFaces *measureFaces1;
! O" V! Z( n: R2 R7 l measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
# `; L# [2 P; w4 N
3 C! @4 c% h8 v: \. h double face_area = measureFaces1->Area();
) O3 M+ P8 ^! z sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);' W: c2 ?1 M) \& w: i$ ^
print(str);
2 t0 z& t+ J d8 {3 N% y7 o, q- h
% {# U; U! f+ H u double face_perimeter = measureFaces1->Perimeter();6 V1 Z6 B0 P6 N) S& C: [; B
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);% @* G9 I* L/ p' {: U' V
print(str);
$ y3 ]& K5 K. M% x3 I; }/ s2 ~
+ }8 G g! X) G: _8 g5 z delete measureFaces1; * O$ g. l" [) A( J" ]2 u
delete faceDumbRule1;
6 P ?9 @; \" k* t measureFaceBuilder1->Destroy();# H3 g' I+ F) E; I! }5 b `- D
return face_area;8 \+ d9 V+ r0 A6 w# [7 d7 |
}# n) Y6 J j6 o9 V
[/mw_shl_code]) G! s4 S7 C7 B
|
|