|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
" C+ y) m, N. B3 J
$ Y! V: @2 O* X! n$ n4 X+ K0 H& t$ ]如何获取选择点映射到视图空间中?源码分享9 b9 G# \* t( r' G6 ^
5 q) z' `0 j2 f% a& I
- //------------------------------------------------------------------------------+ ^& M+ F. u V& u
- // Select Screen Position and map to Modeling View Plane7 F) v% P4 h! p9 A5 S5 x5 t
- //------------------------------------------------------------------------------
1 a+ W |8 m+ b3 q8 l7 n* } - bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
6 L5 |7 q- @" s0 t5 ^ - {
3 i" m6 Q1 X0 O7 g* y* r - NXOpen::View* myView = NULL;- d, Z; \: C5 t0 e7 E. x
- NXOpen::Point3d myCursor(0, 0, 0);
$ k6 B- U Y5 n) W( e% Q q
2 k+ n* B8 x+ N C2 H8 n7 ?7 a' n- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);' S5 Q$ E( @' p/ W/ m0 m/ G
- if (myResponse == NXOpen::Selection::DialogResponsePick)
3 S8 |( h% @$ [ - {
# n( R/ K4 Z+ `% z - // obtain the current default annotation plane where PMIs are placed on
% n2 `7 f- R7 u, s; w: W* ]; D - NXOpen::Xform *xform1;6 Q: A) G Q g+ M. P
- xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
# C/ K D$ P9 T; T5 ]& l - NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();4 |4 {' \, y; P# ?2 N# T
- NXOpen::Point3d ptDefaultPlane = xform1->Origin();
* D( _2 |+ o; ?# i - NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);( t! I+ \9 N2 }* |# q! m' @
- : H- n7 u/ z9 O6 s" s
- // create the ray 'into the screen' at the selected cursor position
" B$ X! O" R" y* v* e; c! S - NXOpen::Matrix3x3 vmx = myView->Matrix();8 D( z8 j, l/ a" Y
- NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
( f7 }( o2 J2 k: |/ w - NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);1 v0 q+ h; P g. S$ Z& _/ @
- NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);7 W% d: n& T& ]/ s/ c
- lineRay->SetName("Ray");
# ~+ F2 r9 `% C+ G" ]0 i4 c - 1 G; o2 x$ M$ j6 u# T6 n7 u
- // create the plane from the view to intersect with the ray
$ I2 L, W e4 N1 P& b - NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);# @5 Z7 y3 U) C H. T4 O' ^
- planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);5 k. {' ?0 ~9 T$ X* B
- planeView->SetName("ViewPlane");0 f& K% X1 X/ o& y6 h& B) n
, T2 ~8 b. m& p _' A: L- // now create the intersection point7 t5 ~# h X1 H7 W! t
- NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
: R) G2 R0 | u - pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);( l2 |# F7 X4 ]. ?; N3 h0 X
- pntInterSect->SeTColor(10);7 R$ _5 p" C0 F
- pntInterSect->SetName("Intersection");( r, {- E9 B5 U9 ^6 i) f
- ~7 A2 X; u7 s. T1 m- pos = pntInterSect->Coordinates();
; {( G0 b# f6 c: n6 }- x( v! S - print("\nPMI Position:", pos);
1 C( U& B# c) e/ E/ g9 ^
4 Y1 n+ M. w& x$ Z* H; _/ B- // clean up - comment to see intermediate objects
% X( Y& I1 e. g, t7 @. z - NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");" y. J( v& }: _) ?1 k7 A7 m
- int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);
, t+ q0 s3 L' O1 [0 @ - int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);0 {! Y2 t2 s5 w: g! ]+ r; T
- int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);" D/ G9 @" r& c9 t$ Y( t
- int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel); v8 T& u: X. ^2 N& u; S, w0 }
- m_session->DeleteUndoMark(markDel, NULL);! `3 o$ j5 I8 K5 B
c/ d2 Q% p# A% Y; U- return true;
6 U8 Q% [# `% i( v- e0 K! C4 j - }0 a) U0 N3 s4 M: W
; s2 ~' `# G$ f* k- return false;
- j- H d- U9 Y/ ]1 f - }
复制代码
% U" H' R, ^; [
2 I4 T( D! c' S8 f( m; ? |
|