|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 f4 L( k7 ~7 v" x- [
/ `+ @& l2 S4 {: f+ F如何获取选择点映射到视图空间中?源码分享
6 D) R; s/ v; f3 D! z+ Q! h+ [. P/ o$ _
- //------------------------------------------------------------------------------: d" f$ H7 T7 B& D+ l' P- v2 f' L
- // Select Screen Position and map to Modeling View Plane
+ L2 I9 E g) |. w* T% Q& v/ L9 i - //------------------------------------------------------------------------------
: y; n8 k" U/ f* n - bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)/ y' @- Q1 N9 ?" `- V
- {
- s0 g% N$ {7 |9 Z) g - NXOpen::View* myView = NULL;, z% ~0 j: W. @4 B# C
- NXOpen::Point3d myCursor(0, 0, 0); \' ?! S8 U# |+ C0 `
- w4 ^0 x' s" {0 `- `3 x
- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor); o5 U& k7 T0 E X$ H2 R' c2 r
- if (myResponse == NXOpen::Selection::DialogResponsePick)" s, i4 W) Q( e% U: f# Z
- {
: I0 X4 v: _1 c - // obtain the current default annotation plane where PMIs are placed on
/ w* K5 L3 W. [1 f% | - NXOpen::Xform *xform1;) L- R8 m, x6 D+ D3 `- T; ?
- xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
; z2 s0 A% o& \9 G4 s - NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();1 F1 b/ h! a) o
- NXOpen::Point3d ptDefaultPlane = xform1->Origin();
. J* s! [9 f9 R0 P# }3 p X - NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);! \* S( Z6 @& c: j( n6 h5 a* ?
& x3 d0 H% A, s- // create the ray 'into the screen' at the selected cursor position! b9 t/ H) B4 T: v: j
- NXOpen::Matrix3x3 vmx = myView->Matrix();
I, y0 {4 _. G) i9 g- R- d o - NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
; C7 V, L7 J# R - NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
A5 [: b3 z" M) C5 w0 S. L - NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
, i. _' S+ u5 c) I, z0 Y. p - lineRay->SetName("Ray");5 E1 ?, _' F/ S
$ H) b4 [" p# T1 P( E- // create the plane from the view to intersect with the ray- _ w4 n8 |8 q0 Q) \
- NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);7 ~; v& O. ~# `9 b* T! W) I
- planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);- o1 T3 ^# _+ q5 w% n8 J% `
- planeView->SetName("ViewPlane");$ G: T' ]& [% v! l2 f: w1 P
% I5 Q* ?0 F8 f- // now create the intersection point
4 [( h& R3 }6 M4 L' e% u0 N! s! x - NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);7 f! D! a; o& K* K
- pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);- |1 B* t" q" Z" o% d/ U, p
- pntInterSect->SeTColor(10);/ m# |7 H' u0 i- f
- pntInterSect->SetName("Intersection");
; V" K1 z7 s& C - # b i5 k# H/ {
- pos = pntInterSect->Coordinates();
! _) B N1 ?8 P3 x q; s - print("\nPMI Position:", pos);% {$ f+ P; Q4 R& f2 a
* v$ y1 S* M) U7 p8 C2 u! v- // clean up - comment to see intermediate objects
" ?+ a' D1 P) {( l( U$ M! K, Y0 T - NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");* @8 b3 @8 p: u! v
- int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);- f( y2 _: X/ N' c# S
- int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
" W8 o8 b' k6 A) v: d - int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
4 ?1 `4 p; A# G C( }/ ~0 ?1 s8 V: j - int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
W. F4 _* e( ]7 M6 ? - m_session->DeleteUndoMark(markDel, NULL);, i0 t6 Z' F2 M$ g3 D
8 y3 q- W7 Y7 U7 s% Z- return true;
4 |9 P) M) } p8 s - }
. W/ p% b( p+ |4 B( r" B3 T; h - + K" x: a- a. X+ ?" g/ ^
- return false;7 a4 T5 m, L+ Z
- }
复制代码
) h) W1 j- t6 n. [5 p
$ m5 j/ N0 ^; t! r0 C- T+ D! X |
|