|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 q3 ^6 A; u* A s5 K H0 S
7 `" ]8 w& M9 z& _" F# C: uNX二次开发源码分享: NXOpen C++获取面的面积和周长4 a! W6 i3 Y: H4 N: v% t) ]
! X1 R6 e- u. }6 e0 O3 A
: t3 h' E/ J8 f4 Q$ D e* ~1 @$ K6 p& y% y$ b0 ^
' U+ N1 k; ^+ g: v" D. L8 q0 k
% F x0 v+ T! D' ], x
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)' i" V% `& y: V
{
0 D) G: }8 B0 r" ?" T char str[256];
! M! A9 I# D0 h" v% w8 L
. u; A4 A# R8 `0 P& M; T/ X5 a Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
4 ]6 J# W: Y! i. q* y0 Z Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));4 \+ ?2 @& S' W- w! B
" u9 a# C( G+ y //FaceCollector issue is fixed in NX9 J: e% i- |% |. r
NXObject *nullNXObject(NULL);! c$ N: v2 Y$ @" t; C' Z
MeasureFaceBuilder *measureFaceBuilder1;
5 v3 C' {, C, P measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);% w0 {) v4 O3 K# g6 b) s+ K
& r1 Q# n" d- m+ b* _0 k) L
Face *face1 = dynamic_cast<Face *>(face_tag);
2 A% [. A( L* T) v* m: ? o e/ Q* M2 k vector<Face *> faces1(1);
, R, M, m! G d faces1[0] = face1;
' M: X: b5 R1 V3 r7 M! N9 ^ FaceDumbRule *faceDumbRule1;! n( W8 e/ w& x4 P2 A
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);) o# a6 V, D8 [3 e h" z9 `; ?
. k0 A3 t% ]9 W4 I" J/ B std::vector<SelectionIntentRule *> rules1(1);
; {3 _0 z; V1 R W2 @1 Y rules1[0] = faceDumbRule1;
) f+ K) a0 B/ ~+ Q measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
9 y* a3 V+ q3 Y; p1 ~ NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
/ Z4 V! Z5 I7 w% o
9 j, v1 S) L; L9 n# { Z* a) e8 I NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();% y9 l* B4 h' Z# }$ A0 O+ F% d' [
: w0 F5 d' r) F+ p6 n4 N% w
MeasureFaces *measureFaces1;) y' D/ v, B( N0 j
measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);3 I% {; W" T& O) N
7 x/ J( d# T( Z" |2 x: ^
double face_area = measureFaces1->Area();
7 u W- M! [ p- r. v5 m1 |9 s sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
! D1 {( v* h* H: X( b, ^ print(str);
/ T& @5 V) Z% ?, L2 ^1 x
, ~2 a: i2 Y+ }, i$ M1 I double face_perimeter = measureFaces1->Perimeter();5 ]3 y5 w0 `) j0 w% X" M1 q5 K9 ?
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);/ y: r7 d8 Q5 h% y6 B" Q
print(str);
* f. j7 s: J: c
: D4 E4 P& K h, o2 L# S6 @, d delete measureFaces1; ' V( }7 M5 s+ L
delete faceDumbRule1;
$ p. X* W# J7 K" J# @: \ measureFaceBuilder1->Destroy();, x) A5 ^: t1 ^# Y; C9 S
return face_area;
# e- A- k3 ]# e7 B# _+ k}
; U3 p0 \. |; Y! f; r7 V[/mw_shl_code]8 G3 n; q( \' k; Z! }/ t
|
|