|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
1 y/ f6 ?" G. p- ^5 Q( Q
7 {. p$ K. X( J$ f如何获取选择点映射到视图空间中?源码分享
- k- {8 N% r5 h# T1 j9 V* B1 F1 M# l
- //------------------------------------------------------------------------------
& M6 F1 s8 m; W L - // Select Screen Position and map to Modeling View Plane
" T( a* e& m/ D4 D( } - //------------------------------------------------------------------------------
3 ]4 u+ [4 M3 S( r! ^7 G - bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
/ l5 P& i: G+ c' }0 Y$ | u4 L - {2 o7 J* f- k) @# A- G+ I
- NXOpen::View* myView = NULL;9 `5 g- ~$ C% T& w O
- NXOpen::Point3d myCursor(0, 0, 0);
5 R. g: @% h9 R+ W6 Q6 m - 8 y5 y4 _/ G2 b: k) M' _5 ~
- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);% v# }7 v/ Y! O" A, f. n
- if (myResponse == NXOpen::Selection::DialogResponsePick)
2 J' }) U7 ~, Z4 h$ o( q* ~ - {! W* s$ |" D* Q9 D
- // obtain the current default annotation plane where PMIs are placed on
4 Z8 M: g( ^8 Z - NXOpen::Xform *xform1;4 K5 j' ]# J& H9 G, l% A1 T
- xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);6 D+ ~0 |+ e7 d2 K
- NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();2 U$ G. e E8 g/ l1 W9 y6 L
- NXOpen::Point3d ptDefaultPlane = xform1->Origin();
" k7 Y7 f8 Q/ n+ E - NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
6 U9 Y ?( `) j# U5 k# M9 D% ]7 T
1 M# \3 B b- _- // create the ray 'into the screen' at the selected cursor position7 ~7 k4 \8 f7 J& ? w2 ^, P# ]& }
- NXOpen::Matrix3x3 vmx = myView->Matrix();3 ?* c0 j. H& g8 k9 ^
- NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
: L: E, c+ e- @7 u - NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
) X7 b. N- Y, W8 x* ]3 t. [- N - NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
/ |+ }1 h6 a/ E2 b' I# x" @# b, i - lineRay->SetName("Ray");
+ m0 R1 b+ C- i- z+ j" P" K" `
1 r. A7 {7 O: J9 ?6 ]' ]- // create the plane from the view to intersect with the ray
/ R5 D4 |: I7 S: s3 D - NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
( {' w" Z9 S3 b. F2 r: E# ` - planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);! p! b0 S, d5 x& @& P1 r1 r
- planeView->SetName("ViewPlane");
* Q: j+ r3 a7 m* p
X; \$ C: I# N _7 q- // now create the intersection point2 }3 U& a3 I% C
- NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
2 J- x2 @- Y) C4 ?; k - pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);' S# T4 @5 H/ X
- pntInterSect->SeTColor(10);8 b2 S6 d( z& H
- pntInterSect->SetName("Intersection");9 E5 a/ A7 m3 k6 X3 L
- 2 S' y1 C! u3 v+ v% y. d
- pos = pntInterSect->Coordinates();; _* O3 Q0 P0 M4 x
- print("\nPMI Position:", pos);6 k1 w7 Y( b& m, K, F# L3 i& D
% y O; X+ A) X( C, J- O6 B) V# c- // clean up - comment to see intermediate objects( F" H/ y3 Z' D3 L9 [
- NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
) [- E; s4 ~* J, d5 U" z$ W9 w - int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);2 Y% Z! I$ A5 l& [( N& V' s
- int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);( O- ^$ ^6 [1 U/ {9 U% _# M
- int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);" @- b G0 O" B9 Z- |3 N% w
- int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);$ b* h- I% `) Z; K
- m_session->DeleteUndoMark(markDel, NULL);
4 ~; }, ~# Z. [' {
4 a8 p- [& R8 y! d- return true;6 a& z/ s( ?8 X X1 V, e% f
- }
- R5 v6 I3 F5 x }$ u7 \4 \ - 9 ]# O$ y9 A9 c
- return false;7 y7 S" @- t% h9 F5 U# f
- }
复制代码
/ {1 H) w8 y4 T1 Z- c- E8 G$ V' {) z" o: ~
|
|