|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 \+ R2 ^4 T$ C7 _$ W7 N
) O5 L( ~ I x* F7 s如何获取选择点映射到视图空间中?源码分享% [* o( A& i7 m7 Y: k3 s l
8 J& [# A! H% f7 g, O" m0 f- //------------------------------------------------------------------------------
" Z- ~9 e1 A9 u/ T - // Select Screen Position and map to Modeling View Plane
9 k* C4 g" b1 ]8 ? - //------------------------------------------------------------------------------0 c2 B+ o! |( j0 K! Q9 M% H
- bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
2 L8 f F5 G$ {, q - {
5 K. L& S6 d0 {, p - NXOpen::View* myView = NULL;
: V- B2 k4 A& M* t - NXOpen::Point3d myCursor(0, 0, 0);7 ~: D+ \$ X4 d) t
- ]! ^' k4 D2 o; M- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);
) m7 V# l7 T$ t* H - if (myResponse == NXOpen::Selection::DialogResponsePick). S; T$ N8 W; \9 Z
- {6 x5 }/ T: e% E% L$ A, C
- // obtain the current default annotation plane where PMIs are placed on
) x9 ~) E7 }4 v. ? - NXOpen::Xform *xform1;
; S; S& B- o3 ]; h" h, K; O* M - xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
. i% I3 N( Y% Q, X$ {; u - NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();
`! l4 g; x- h' W( l, y3 J9 H# q, R7 H9 W - NXOpen::Point3d ptDefaultPlane = xform1->Origin();
0 j2 |1 j' n6 Y L4 C6 \ - NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);/ n, q5 a8 j4 a9 t( ]: R: P
; w& v6 M$ W, S- // create the ray 'into the screen' at the selected cursor position; M6 U4 {# S% I) @# F4 H$ G) G/ b
- NXOpen::Matrix3x3 vmx = myView->Matrix();
+ |; Z8 k# s/ }% p9 s, ?6 p - NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
, U8 x R" o; G; o2 ^: v z5 g - NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);9 ?, J! f* `9 l" o
- NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);, h+ W0 ?7 t1 p4 d+ d0 x
- lineRay->SetName("Ray");* z: X! {7 p; u& D
- + i3 l. Z; O" Y. H% c2 j- g
- // create the plane from the view to intersect with the ray
1 a% u5 G. z+ T: ? - NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
, }* J4 e8 Z" p( t% b - planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);0 ]; u2 i. S4 j6 v
- planeView->SetName("ViewPlane");& V/ F& N- F, f8 Y& F! `
- " M9 p9 i. L3 O' ? d; Z1 Y3 h7 D+ |
- // now create the intersection point" y2 P. i L' v) l/ a! V
- NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);6 O+ ^- j+ g+ e q
- pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);$ W5 e, z7 w9 Z+ }8 K' g8 B1 Z/ }
- pntInterSect->SeTColor(10);
, _. j/ x1 V7 S {& r: ` - pntInterSect->SetName("Intersection");
; C4 u' |0 x6 B% [ - 7 v: i/ ~0 u' M1 Y. ^2 |
- pos = pntInterSect->Coordinates();
2 [+ E" _# b! b) _, [ - print("\nPMI Position:", pos);' I5 ~: j7 T' |1 [$ u
- 2 I* H3 ~* @ _( a& m
- // clean up - comment to see intermediate objects
# b8 n# t$ r) A# C$ Z/ W z - NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");' r, @/ F1 y. f$ g: R
- int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);2 {9 }8 T8 i( ^. h* B* _
- int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);% ^! E3 X( h9 A4 Z
- int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);; s/ s$ B% ?' c: L' D% c7 L+ T
- int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);2 B( @" b" l) o* c( W
- m_session->DeleteUndoMark(markDel, NULL);
! H1 M6 }# r: }6 o - * q5 |2 e* l' ]# ^
- return true;3 y+ P' f& p" l; b. Y* D5 x
- }" }0 N" p8 D( S( r' m3 \
- 5 _% _ t" ~( e% Z: v7 m! T- f
- return false;
( |, w* d' c" M( B b - }
复制代码 / @7 j4 Y- q; W$ C( A [
8 C, K; @4 E2 F0 F5 e1 }6 U6 a0 E7 u' p |
|