|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 f5 s# H: S- S* F. \9 \
- _9 d3 d8 d* [: HNX二次开发源码分享: NXOpen C++获取面的面积和周长
# \7 F& q7 \+ t
" g; S1 u. P/ A/ a. q- L
3 l* q1 ^, F: ]' {+ v) O0 v1 O/ n) w+ A2 X. c4 h
/ Z0 E. ]2 `4 s3 e2 Q# ?
6 I$ a8 [& }: Q[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
' G6 o u" F1 t( R% E{. E) u9 w5 {! X, V! w( s' Q- b
char str[256];
3 E' T3 @' N7 x& l& }* B' g $ r% }2 K; Z, v
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));6 w/ Z2 N. q& O8 R" F
Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));3 h0 r; T: V* C% v8 a
5 i4 }1 I2 m, Y6 M; o' T //FaceCollector issue is fixed in NX9- b# t1 U" B+ k a. l4 m( X% Q
NXObject *nullNXObject(NULL); _# \6 |! D# u4 m; u/ J
MeasureFaceBuilder *measureFaceBuilder1;& J4 M2 s6 t6 Z2 \' ~2 k0 I/ }& B
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
3 G# A$ @; h" [! J 8 E& b. P) z6 V5 a4 _
Face *face1 = dynamic_cast<Face *>(face_tag);$ W& [! w% _7 z: f4 g4 s, M
vector<Face *> faces1(1);
% P" w9 @, d& c/ }: O& Z faces1[0] = face1;/ w( i6 P( S! J4 p E0 u
FaceDumbRule *faceDumbRule1;
( W8 e% ~. s7 Q/ O faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);# z3 i% u1 E e5 d7 N
, ]4 L% ~- {; u8 r2 q7 A
std::vector<SelectionIntentRule *> rules1(1);' ~7 C! r( Q: ~
rules1[0] = faceDumbRule1;/ y4 n9 {8 n+ a0 X: S/ r$ m* t$ ^
measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);0 v, T4 u7 j' n
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
7 L3 x( M# @1 t5 R3 ^$ ?
1 X! u, K, e; t e, m NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();/ b# k9 q: P/ R$ }
- i3 x9 R& G U# n
MeasureFaces *measureFaces1;
, j: b, d2 F4 c& O- X9 ` measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
. u. T1 B& K" j4 D! F/ c! f9 ?$ H- U
double face_area = measureFaces1->Area();, g; E0 F+ R/ _$ R4 B7 n
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);$ a; {# @- b( Z) I& z( a
print(str);
& a& S4 n V" y
1 g# c9 Z, j, s' x' I double face_perimeter = measureFaces1->Perimeter();
) X8 N: I# ^3 ? sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
7 K0 N0 G6 W: q1 ` print(str);
e, F1 g: }8 v. W8 _/ W. |% t$ e/ }
delete measureFaces1;
% d, U8 ]8 E- V k, c2 k+ K delete faceDumbRule1;6 w0 e' }- q+ ~$ [7 W/ A2 h9 H# O
measureFaceBuilder1->Destroy();
/ t# G2 e3 q4 `1 W) E5 Q' w return face_area;
% k9 K# H7 `, R5 x7 r}
6 r4 S. h4 E9 D3 l$ D- z9 s[/mw_shl_code]
: }" F; A$ k# `5 k$ d6 V8 j |
|