|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
9 u/ A) ?: A7 d/ G
1 L; |$ o% K7 @3 y6 @$ kNX二次开发源码分享: NXOpen C++获取面的面积和周长
/ s+ i% N" b' M- ~0 K. f \
. x6 K4 ?% `3 [+ k9 D8 c# v+ }; H1 ~% K" {
8 Q0 h! x3 H& T5 Z9 d7 D
* f; G1 z% n" n( W. q
3 K% O9 R, k# n% J[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag). B1 _2 F7 S: j1 W: K, b
{9 Q# v' a, l' ]' e. W, M) t
char str[256];
; r8 S) P' ]9 c! y& f , B( B2 x) s. `1 B+ `1 V/ B" g
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
7 }9 L/ J, [" N- i Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));* v8 a- _2 f5 t3 x6 u G6 b
. l2 H7 L" ^) o! x5 Z' b //FaceCollector issue is fixed in NX9
B. m- ^( l6 J) L1 n1 O NXObject *nullNXObject(NULL);
; G; l& q6 v/ j. Z& t MeasureFaceBuilder *measureFaceBuilder1;
( A( o$ J4 c, R4 t7 N; K( ~% Q measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);& y/ h. y- L& ^, V+ b! e
8 d6 Z% c1 m( g% _# g& y Face *face1 = dynamic_cast<Face *>(face_tag);
& _9 M5 a `$ Z$ n0 B vector<Face *> faces1(1);
. R2 v6 _+ C9 J1 }) ?0 @, ~ faces1[0] = face1;# i6 h, N( |1 R5 F2 H' ~- @! J4 Y( Y
FaceDumbRule *faceDumbRule1;
$ ?, B( T0 g& i, g7 C$ H; [0 I faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
: q1 S5 L i, U ' T4 }1 O. b/ [0 t
std::vector<SelectionIntentRule *> rules1(1);: \( }8 f: O9 b0 G6 e! x
rules1[0] = faceDumbRule1;1 M5 D3 {. l9 `; i3 P# k! ~6 c
measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
. l' x3 Y( {! u, E: B$ ` NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
1 B. f; l1 w; y5 O" `4 `! ]% C1 R& e3 l g* b
NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();0 m/ D4 X6 ]1 ~$ }$ B* v8 c. o
4 \# |, ^; w" ^8 S p& X MeasureFaces *measureFaces1; |: L; p% y$ n1 ~
measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);. j# M z; f' q& f% u4 F6 q
- i+ {7 G+ s* |7 }4 A double face_area = measureFaces1->Area();2 X- c2 J# D8 j% u3 k
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);
9 h" g1 ^ P* J8 ]; q print(str);
7 u4 D- M# P) S. P
& f* F6 A7 j: z double face_perimeter = measureFaces1->Perimeter();
) w9 K t6 _; O! H/ O" k2 N! p# P sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);" H) T' W. x# I2 C) L: ]
print(str);
; c$ j6 v. e7 v- m+ r6 }, \( Q$ m1 F' G G
delete measureFaces1;
/ Q3 z: T9 ~! T1 M delete faceDumbRule1;% _/ ~% T! _( B
measureFaceBuilder1->Destroy();
7 W/ }; g' T- h. n return face_area; l9 Y/ _8 G. M0 R: k6 h
}
8 t' j9 N: R* m1 ?) f8 }[/mw_shl_code]
$ m. o9 E2 Y( v5 A |
|