|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
$ b) {2 ^# _4 q6 E" \) ~
; p6 ^9 ]1 h' n
NX二次开发源码分享: NXOpen C++获取面的面积和周长
% M/ }: p- Y7 _1 M* T; U8 m9 k; b( _) |0 Z6 |
$ h* P' Y3 ^- f i# v" G; X& s' L7 B- F6 t; ~& e0 i* L. z7 o
& f4 b" x: I. I* w) X7 k$ y
/ Y) C; `# J0 I[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
, a6 s0 B% @6 d1 I. \- I/ C{
* A- ^( E' i3 k char str[256];* H" h1 q. M; {
3 z# W& z; [( A1 E Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));) h, h; c4 z$ B* _% @
Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));' g4 D: X3 u, m# M" N1 \+ K- t
$ Z; j/ R' |8 L
//FaceCollector issue is fixed in NX9
) P9 M/ B6 \5 F- t4 u1 V" w% C NXObject *nullNXObject(NULL);
; |5 [- i; m( Z" ^ MeasureFaceBuilder *measureFaceBuilder1;5 P# k. d9 q8 k% o- j
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);2 f/ V2 Z7 s0 Q5 S2 k
. R, P& E4 h: a+ \9 a
Face *face1 = dynamic_cast<Face *>(face_tag);
, b0 p1 b8 Q! j5 L9 U vector<Face *> faces1(1);
; V6 E1 m9 H9 X- i7 `" { faces1[0] = face1;
$ E! l8 r) C) Z/ Y FaceDumbRule *faceDumbRule1;1 _, S$ ?# }$ Z- c
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);* C# f [ v7 \) D$ M2 h3 B
% [, z) `/ [+ K5 P- V% \4 C. O std::vector<SelectionIntentRule *> rules1(1);
: Q) Y# j, c% X9 _4 i3 q$ B rules1[0] = faceDumbRule1;
& |* A1 X, e2 [" U! B0 J6 r, U+ ] measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);4 R* |; Y: D* L' s
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();! v; t1 h, \, A% y# n
+ R% u& J) n& B
NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
5 g7 X( }9 a, B8 X) W! H& ^) W, Z3 d3 t: f4 ^
MeasureFaces *measureFaces1;* O* Q+ o3 m+ A9 B9 g. w
measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
5 C1 O+ Z. i9 [/ s0 l0 \
( {4 p) V1 p( X" x1 ]% y double face_area = measureFaces1->Area();6 \: I4 O! m( A4 I; Y+ p b1 g
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);; h9 i$ O4 r9 @$ j3 H
print(str);! ^1 _/ D" B6 X- L. X, a1 _' M$ N1 X
4 K9 b2 J* N1 x8 q double face_perimeter = measureFaces1->Perimeter();
% Y. F1 i6 ^+ O sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);# l( q0 o. D# _( I8 R. F
print(str);
1 V U) p. G4 H) d; A1 D4 w2 G
, z$ Q1 c* i7 Y# Y8 r7 v+ G0 v delete measureFaces1; $ I( ]9 m+ @# B8 o- p+ Z
delete faceDumbRule1;
% X8 E) }+ C d2 _: w6 _- [ measureFaceBuilder1->Destroy();
1 U m( Z0 ^$ D" E; v5 w return face_area;
# `( x( ]6 T, y5 ]4 R}, l0 H% E5 Q; [9 c, ?7 q
[/mw_shl_code]
, X& b8 r9 w: u" U: s |
|