|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 p# J4 B3 x. j- c$ M& {9 K$ v
NX二次开发源码分享:查找体中最大的面积$ _9 v( A1 q0 h+ a5 Y y4 O! T2 i
通过MeasureFaces 下的area方法可以得到面的面积进行遍历查询
& C9 Q( |; n% y& @1 u
! H" J* F/ A# o6 L) M4 T" H$ s/ ~) {4 Q7 E/ `6 A
- #include <NXOpen/Session.hxx>8 H; x7 R7 n+ g- E
- #include <NXOpen/Part.hxx>2 K- ~! K# {4 \5 U+ M+ o$ q* o) W4 `9 Y
- #include <NXOpen/ParTCollection.hxx>
; E$ @4 R- C- i; T+ M) Q3 H# i - #include <NXOpen/MeasureManager.hxx>$ ~/ n; f9 D$ ^9 R
- #include <NXOpen/MeasureFaces.hxx>! c. r4 ^# K; e, L
- #include <NXOpen/NXObject.hxx>
4 I Z+ X: X [ - #include <NXOpen/NXObjectManager.hxx>
! q. `; j& b9 W. k% C& j - #include <NXOpen/Body.hxx>
) s8 O' l$ v4 j p" d - #include <NXOpen/Face.hxx>
! N+ q, `. m! N; K7 g& u2 q7 N - #include <NXOpen/Unit.hxx>
3 e) ~& j# x- V3 q - #include <NXOpen/UnitCollection.hxx>* Z0 t2 P) Q+ J* W" J
- using namespace NXOpen;) b' ? E2 U, E4 w0 C% N
- ( D4 E+ D w c, e3 j
- static tag_t ask_largest_face_interop(tag_t body_tag)
2 P3 r- K& O0 P9 v& d+ y - {, {; M" U7 e: W
- Session *theSession = Session::GetSession();( n/ ~6 g, C8 [7 r
- ; ^, c) D O+ ~7 g: ?
- Part *workPart(theSession->Parts()->Work());
5 z! o y2 x% S A! N2 e) z
5 u) U& `+ k7 t/ I- Unit *area_units = workPart->UnitCollection()->GetBase("Area");
. X9 b0 A6 v! @* J% |2 A8 X2 i - Unit *length_units = workPart->UnitCollection()->GetBase("Length");
* w' H4 e6 ^: S; N+ F# @ - 9 S, `: t% b. \( Z4 `* P$ }
- Body *theBody = dynamic_cast<Body *>(NXObjectManager::Get(body_tag));
$ h/ J+ x, w1 G- j b4 T4 O - std::vector<Face *> theFaces = theBody->GetFaces();
) b- N# E) b2 A1 P - $ l' t# O1 _- w3 d
- double bigArea = 0;
- k- \2 l. w% C, l# e - Face *bigFace;
g1 N( t* G- i, y$ Q - std::vector<IParameterizedSurface *> theFace(1);" i* P) N j) P/ J: \$ `5 N2 x
- for (int ii = 0; ii < theFaces.size(); ii++)
3 D+ A* b7 _8 ^0 v8 f7 H) J - {" p7 k2 X0 {" j
- theFace[0] = dynamic_cast<IParameterizedSurface *>(theFaces[ii]);
8 E& H) L/ K% G& N; B& U' E1 e
* W5 B5 w: x8 g& j, `+ _: s$ t- MeasureFaces *theMeasure = workPart->MeasureManager()->
" N; U) Q* g9 C$ k - NewFaceProperties(area_units, length_units, 0.999, theFace);9 P2 {; k- h" l
- 6 f0 W5 Q- q8 ^/ m9 v9 W7 A
- if (theMeasure->Area() > bigArea)
3 j6 R. v, k2 l9 ^/ p4 I - {
3 [. n6 a! f1 L) s1 A x - bigArea = theMeasure->Area();8 A- T: w) H3 A0 b
- bigFace = theFaces[ii];5 ^* ~1 I$ l7 K1 u- s
- }
6 @! l4 l: s0 ?6 k, | - }" p2 `" j( ]9 w: D: ]8 F$ M1 i
# M7 Q# J5 K4 r* u6 K- return bigFace->Tag();
. S; @; q8 W0 w! Q - }+ i; q3 J# t& G3 [: y
复制代码 3 `0 P. k& ^8 w) j7 y1 i
6 d* P; D2 q: F9 x: o& k3 i; n2 n1 Y# v4 I( c3 @- ^, ~
|
|