|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
( }- |! \" C; T' O( I+ z7 r
% X0 P' S G2 _: B% G2 A( CNX二次开发源码分享: NXOpen C++获取面的面积和周长
]! b8 T& ~0 {' T
4 R7 X4 i: y! n# `; M! ]
$ J% Q/ J) t- j, w5 }
) f. }, F8 V+ P0 G: M8 z
' Z: Y. N2 z* P8 ]" _3 W4 |+ h, Z8 I$ S
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
0 N9 `! N% p6 a7 o* L{% i$ |+ f3 N( ]& e/ g+ A
char str[256];: N1 o+ b6 s9 o8 Q2 M+ |$ N
6 @& ]' K& p8 e: O# r; Q
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));6 P) Z& v, W( Y! s
Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));- m( A3 U' O, c o; I. Z2 J
) j) _+ _) a& ?
//FaceCollector issue is fixed in NX98 `7 Y3 K% o- F! t. L
NXObject *nullNXObject(NULL);8 b! _: ?% D6 \" F% @1 U0 F/ q8 }9 t
MeasureFaceBuilder *measureFaceBuilder1;
3 r# Y$ u/ }& j, M1 F) b1 M) r measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
2 E3 ~9 B% A. a: N$ h `5 ~% ?' ~ * {8 r# C* W+ N. y! D5 ^3 l
Face *face1 = dynamic_cast<Face *>(face_tag);
L$ t* `: y P9 p3 B2 n vector<Face *> faces1(1);/ l. Q7 D {9 d5 H. l8 q
faces1[0] = face1;
" ]* Q' o. [' S# C; ^$ r FaceDumbRule *faceDumbRule1;8 u# ]: {& x; Q; L" O# |% ?
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);3 X: }8 J v6 q: o9 j
8 N4 g2 I8 l7 @6 ?! ^9 l
std::vector<SelectionIntentRule *> rules1(1);
' T3 F- i( o& X/ j rules1[0] = faceDumbRule1;
3 T- V7 R b" i5 Y# {$ ~* } measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
4 ~- S9 n$ X# I3 E# |$ g NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();+ E& K- }$ O) D2 O
4 {. v5 o g% v NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
" W' g! @3 C% j: _( j: o" R( q; }9 @' Y! r7 M& x$ F2 |
MeasureFaces *measureFaces1;) h4 @. F0 U& }( k
measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);. M j( w" V8 h; C" F7 V9 ?; J
4 Y* L$ u( J# | v$ w- x! c
double face_area = measureFaces1->Area();- }! X, N8 S0 A! |8 k/ V: X9 {; W+ c8 i
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);2 C- f+ ~$ V) e9 W, E
print(str);
6 C' ?. k/ o- N i3 S8 E+ ~* z 4 ~! u7 ^' e8 l/ z8 \
double face_perimeter = measureFaces1->Perimeter();: w3 F6 H5 d/ F0 a( k
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
+ V3 e1 v9 o8 s1 A: x( S4 {7 n: ~ print(str);- X$ V1 U3 h1 T( G3 v+ x# O2 K% q
- V. ?7 l( U3 D0 S# M+ P
delete measureFaces1;
7 a# M3 |: A, M delete faceDumbRule1;" }# b1 o- D9 }+ Q
measureFaceBuilder1->Destroy();6 {. x7 P9 b8 u) D O0 q
return face_area;( I2 e: V& `- \9 w* f) a% B' {
}; e! o$ i2 V% l* S6 R: C3 R& ?
[/mw_shl_code]
: S1 `( ~. p& {9 B0 z |
|