|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: L" N# O- \/ R
' x7 l# m3 n! X2 sNX二次开发源码分享: NXOpen C++获取面的面积和周长; G: q" z3 [. S: x& s7 {% U) `
7 O" A- `$ _( G9 N/ I+ T& r5 d& P. G; |7 H
9 a$ `% y+ U) D/ L
8 \1 t7 d3 \. f0 s9 U5 Y5 @1 ~7 G
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
4 ]* ]4 Z& i3 ~$ P# U6 r{
9 E+ ]: b( `+ k char str[256];
. `8 o [; \ Z; Y5 u + q T Y* [" }7 Z) z! e E' x1 e
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));$ ?; i( |9 y' g& y% T
Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
9 b2 I3 Z* y6 L6 g9 K% `4 ?$ q6 M" J0 a8 G1 n
//FaceCollector issue is fixed in NX91 L, O7 G2 J7 j, N2 k
NXObject *nullNXObject(NULL);$ n/ t) U0 M4 `) w. t5 U* W
MeasureFaceBuilder *measureFaceBuilder1;0 D' J' X9 n/ e% P2 M& h" ~$ f
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
; M9 ]9 U/ O- L. L3 u
5 x0 Z8 v. v; Z; |2 z5 l Face *face1 = dynamic_cast<Face *>(face_tag);
' u$ g7 z, G; y) k" `6 q* \/ r& C+ I& c vector<Face *> faces1(1);- v" t2 U! q' l' m
faces1[0] = face1;1 ^ o4 c' B) U9 f: I' E" D' N5 J
FaceDumbRule *faceDumbRule1;. C: B: ^- T' L
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);/ y B' X" T% H, t4 \
+ x/ c" \" z& }+ e& z
std::vector<SelectionIntentRule *> rules1(1);8 @; [4 q/ e+ p; C1 M
rules1[0] = faceDumbRule1;- {6 w. e( b6 }! r
measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);% h& k% I3 j6 l# q; \
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
) t/ g' u5 R' ^* A4 c$ K
" B# m5 h8 i a( x; B1 A NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();4 w3 z& M x/ ^: E8 X) x
3 N! o: Y3 `6 b7 g MeasureFaces *measureFaces1;
- w$ t" Z. r+ U$ T* q: r: W, _ measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);" P/ q& A9 [, m* U
6 u I0 L8 P% ?: t double face_area = measureFaces1->Area();
0 E8 _' V5 n% L+ x sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);7 ~ d6 W4 }9 |, x- k4 a0 T1 S, G
print(str);$ {0 k' w" K1 [3 x
1 z% n& `! L% X( j
double face_perimeter = measureFaces1->Perimeter();: s% Q; W& F0 d5 M
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
' D% E! C& f9 x! g% @ print(str);
9 ?6 R e9 s& M: w2 x% p; ]9 s$ F9 x! _$ D
delete measureFaces1;
; W4 e5 K/ Q0 O& | delete faceDumbRule1;, n3 r! A6 \9 w) h3 c+ r
measureFaceBuilder1->Destroy();
4 m# u1 T! j, Z" p( I+ P return face_area;6 U* |( j5 K7 E4 t) ?- W
}. _) R% M |% V$ }4 v% M0 N8 v6 P
[/mw_shl_code]
; z9 ?2 d8 u9 P |
|