|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. D; a4 _2 t# U/ B( Z
NX二次开发源码分享:查找体中最大的面积" e- u+ v) n w: p. x& h
通过MeasureFaces 下的area方法可以得到面的面积进行遍历查询2 U& e& F! n: q' B. B4 m8 W
8 k2 h1 Y( j; R
0 W. V8 `, p5 ~' ]1 z2 J( S- #include <NXOpen/Session.hxx>0 E# \% l: d5 m# \% z+ i6 O
- #include <NXOpen/Part.hxx>
; h. E( r; \, Y. k9 S - #include <NXOpen/ParTCollection.hxx>
7 ?6 }9 n1 _% r X9 f, ~ - #include <NXOpen/MeasureManager.hxx>
; \. }( A1 z/ n4 i* ]0 N - #include <NXOpen/MeasureFaces.hxx>! v% \9 c* D1 L
- #include <NXOpen/NXObject.hxx>
" }, v& l) M* }8 j - #include <NXOpen/NXObjectManager.hxx>3 v* ? ^9 i0 _( B$ Y) b+ U
- #include <NXOpen/Body.hxx>
6 X L" _9 S9 S& X# I- w4 p7 i - #include <NXOpen/Face.hxx>
; Q+ t7 p" I& \) W7 k; X2 K - #include <NXOpen/Unit.hxx>+ G+ E! ~# h ^8 q! q
- #include <NXOpen/UnitCollection.hxx>3 d, j' J) c; {7 H- s* v
- using namespace NXOpen;
7 ]" p1 u5 h# n; G
4 J+ P0 G& Y+ P* y5 v$ h+ m- static tag_t ask_largest_face_interop(tag_t body_tag): D$ A9 c6 ~" B0 _
- {
c$ z- Z& P) l7 {) c& F - Session *theSession = Session::GetSession();
+ O) J- l. N1 v/ L
3 U6 _$ z9 i1 G0 n) L- J- Part *workPart(theSession->Parts()->Work());
8 ^) a, B/ j2 V/ t D - ) }+ s+ T, n$ Q: Y3 B6 z
- Unit *area_units = workPart->UnitCollection()->GetBase("Area");! \, ~, y$ s( F( n: n4 K
- Unit *length_units = workPart->UnitCollection()->GetBase("Length");, m2 j" D+ s* T* N# a
2 b! U0 U" H& W3 p8 s" P- Body *theBody = dynamic_cast<Body *>(NXObjectManager::Get(body_tag));# ^& I8 S* z2 O' y! h7 H9 J1 O
- std::vector<Face *> theFaces = theBody->GetFaces();
; s0 y1 z! n# ~& [) f( a( b - % K; }/ K% p: C7 k$ z$ s; ]
- double bigArea = 0;
j$ B! s: U* u( _# B% y7 W - Face *bigFace;
% A' O6 x3 T( T3 u e( E) J0 n - std::vector<IParameterizedSurface *> theFace(1);* Z8 y5 K0 T" {" `! ?9 n) U/ s
- for (int ii = 0; ii < theFaces.size(); ii++)
" C* N( x2 Z% o8 k2 _ - {% S f* ~( Y9 ?$ T, z
- theFace[0] = dynamic_cast<IParameterizedSurface *>(theFaces[ii]);
7 D6 ~2 c, s) R9 x% f - # T2 j' x" t4 W/ V7 f- p
- MeasureFaces *theMeasure = workPart->MeasureManager()->
1 S2 ` R: H6 P; ^* I* ^! H - NewFaceProperties(area_units, length_units, 0.999, theFace);# k$ J* d* }% K, l
- 6 q0 ]3 G w+ [. j0 @; P4 o7 C4 j( U& `$ W
- if (theMeasure->Area() > bigArea)1 |5 \3 I; S. G) b, _1 L- C# c8 D/ p
- {
3 G5 Y9 J: Z; U3 x: ]1 H6 A& I - bigArea = theMeasure->Area();
& ~# O5 b. y# h) _' k - bigFace = theFaces[ii];
/ R: z8 L$ v M# g* J0 k4 t - }6 V3 T0 Z9 |. `# f1 ?0 T# l
- }
3 V9 @) _3 r: H" u - , J6 r# o; i- O K$ S# r; y& |0 ^
- return bigFace->Tag();7 @9 q" Y! B, p9 T
- }
; f; i/ \% D4 J
复制代码 5 d [+ d) `" R+ I* c$ m/ _
8 v; Q& V0 ^/ Z: d$ ]. |
K% o. T+ U( g) v( ^ |
|