|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 E, X& l( ?: z' {( _
) w" w0 c1 R' H0 cNX二次开发源码分享: NXOpen C++获取面的面积和周长
+ M7 F" I8 H8 J2 N t! l. J" a
. M- a# k& B" i7 |, U0 W- ]2 }9 p& v; [" e
- \! f9 b) `. L. N, Q$ s1 B! W, O0 P3 J4 N( Q
! f9 ?1 l/ E4 x* y0 ~/ h[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)
5 c! w1 P2 A4 y4 u6 a) @{
! x$ ^" V# u/ l6 U char str[256];
, S2 c6 c0 r6 c: |$ N8 X, N: q1 s
3 X, C& e$ I9 P' M D. D Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
+ g( u3 {$ m! J4 m! V Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
, t5 T. t. J @8 |
9 z9 S1 @. L. O: G c9 s //FaceCollector issue is fixed in NX9% \) J8 j1 q! @ c5 t. e2 q3 c9 ?3 b
NXObject *nullNXObject(NULL);
; Y1 u8 K) n; b! E) n: z MeasureFaceBuilder *measureFaceBuilder1;: q* h8 E/ v$ e+ s4 X* ~
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);8 T- U1 s. k$ ]3 c" h0 _5 N
7 S0 P4 `7 V* t7 i5 l; v- k
Face *face1 = dynamic_cast<Face *>(face_tag);1 I G- m+ P* A
vector<Face *> faces1(1);
9 v6 n" t1 D" L7 _1 [; y6 P faces1[0] = face1;
x; V4 G: K V; B! F/ N' G+ I FaceDumbRule *faceDumbRule1;5 @# S5 B" h# y) w m
faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);
# {) r: `/ o, M% L 2 s c3 h d4 u2 g, i- w- s
std::vector<SelectionIntentRule *> rules1(1);
+ k' X' V1 L6 s: P7 H$ q rules1[0] = faceDumbRule1;
1 K1 H) s5 B2 |! ^4 v* h measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);! J' d3 ?! N' E P1 G) L( w: V
NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();
; C: z. V; E2 C3 h4 W% _
* f' g( l) Q- `! W2 ^2 X. H* B NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();0 x2 q! C' e( |) E8 @/ x' m
8 N& Q5 W- \8 B4 e MeasureFaces *measureFaces1;
0 [/ C2 x/ [3 d+ a- o( w' | measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);# g4 b; i: `) m3 c8 W8 r: Y) z& `
6 w/ Q- F. F+ v
double face_area = measureFaces1->Area();# x6 s+ k$ r9 \9 ^, O0 b
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);* Y6 ?3 n$ l) ~2 g6 s3 w$ W1 b
print(str);
- `" c8 j: M$ f1 |) g- B
9 f2 ]1 d- d7 d6 `6 j double face_perimeter = measureFaces1->Perimeter();$ a0 x8 W- Z( c- p0 U( h
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);# V2 U# s/ w) f) ]9 B' |# c e* F
print(str);" d' k& v1 r8 t
# O+ Z+ o0 u! k5 \9 w. t( Z
delete measureFaces1; 4 w z, q% M3 {8 i
delete faceDumbRule1;, ]4 d i8 z, q( v1 Y
measureFaceBuilder1->Destroy();
5 ]9 ?' W2 Z {! X$ K8 ~ return face_area;* V) W: w3 \5 i- q- ?$ Y; T
}
/ V6 h: H% b1 H! o[/mw_shl_code]
0 w. A7 V) C6 C |
|