|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
. m8 P C5 A" j2 j, O s0 V% E( O4 }5 {
NX二次开发源码分享: NXOpen C++获取面的面积和周长) A0 l, c T% q- A5 K G }
+ ^6 R! ?! H$ ?, s! h
: [4 ?% f" H0 i, L$ h/ d* G* T
3 q; C# p8 T2 j/ y' o( y( k! G3 Y+ s# R; ]2 z# e" K- w
7 @! ?( _4 U! v' l" q! u$ b
[mw_shl_code=cpp,true]double MyClass::MeasureFaceArea(TaggedObject* face_tag)% N6 C, p6 r( {8 m$ j' l9 `- ~
{
; J3 [( ^3 B9 o4 v1 B7 ]" d% { char str[256];
: ], W, }; ~ `5 \, u4 b1 }$ J * k- F0 d, D1 Q
Unit *unit1(dynamic_cast<Unit *>(workPart->UniTCollection()->FindObject("SquareMilliMeter")));
8 Q7 M0 l8 s( R: C2 U* ^- c$ _) \ Unit *unit2(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
. s4 c% ~1 I3 t! T R6 M. @% G' h( I) d% a7 A
//FaceCollector issue is fixed in NX95 T% s8 I- u+ ?8 y$ a+ Y9 K
NXObject *nullNXObject(NULL);2 \; K9 l( o: \- C# o- P
MeasureFaceBuilder *measureFaceBuilder1;+ A1 P1 O9 T6 U# ], g
measureFaceBuilder1 = workPart->MeasureManager()->CreateMeasureFaceBuilder(nullNXObject);
3 c* H+ w* K: ~ s* r/ ? 1 ?/ K+ C9 N' z3 R/ a
Face *face1 = dynamic_cast<Face *>(face_tag);
/ }1 T1 ]3 `% k, c, X" R vector<Face *> faces1(1);9 _; ~! u8 h) `7 G9 u' X
faces1[0] = face1;( B g( M, F; h6 p' s$ z
FaceDumbRule *faceDumbRule1;
% Y+ U# Q" g5 ^& |7 t9 o, K* t faceDumbRule1 = workPart->ScRuleFactory()->CreateRuleFaceDumb(faces1);, O3 ?1 o$ N1 i/ M% v
" f8 N. a* z3 O' T& Q std::vector<SelectionIntentRule *> rules1(1);
: c/ S% k% W$ h% I. B rules1[0] = faceDumbRule1;
4 J" S& o1 J+ j. O9 Y measureFaceBuilder1->FaceCollector()->ReplaceRules(rules1, false);
+ |! a( C1 \/ N8 ] NXOpen::NXObject *nxObjct1 = measureFaceBuilder1->Commit();3 @ l j3 X7 y" ~8 ~3 M7 x
, C' X0 ^8 H/ U
NXOpen::ScCollector *scCollector1 = measureFaceBuilder1->FaceCollector();
2 q v3 O8 { ~& l1 `5 u f& v. n
. h0 W" z. P F+ [ MeasureFaces *measureFaces1;# U$ A7 c2 r' R6 U
measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, scCollector1);
! w W3 k f! X1 v3 O- P' R& D( i, {8 }! O/ J
double face_area = measureFaces1->Area();* u! e+ a' B- f1 D
sprintf_s(str, sizeof(str), "Selected Face Area: = %f",face_area);8 p8 y" \0 b6 g- H V2 q
print(str);7 i# C- K" _4 u# G2 p/ s
' j1 I% E0 |2 O% o2 F ^
double face_perimeter = measureFaces1->Perimeter();+ z& s4 E5 z: y* t& c
sprintf_s(str, sizeof(str), "Selected Face Perimeter: = %f",face_perimeter);
6 h6 ]' P0 a& B# z* Q print(str);& R) k: g7 i& \: ~# Y& {
) i! l k, {- Q7 ?4 p
delete measureFaces1;
# w2 e, u# J3 p1 _ delete faceDumbRule1;* H. |' {# a0 r( v* p% a, z8 }
measureFaceBuilder1->Destroy();1 B7 P: v9 P1 t6 ]/ ~4 ]. A8 d
return face_area;. d0 s- a4 V4 a
}
0 K. Z, ^$ M5 E6 i, [[/mw_shl_code]' Z* ~6 Q- ?: X- c
|
|