|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: a1 n3 v4 g7 s9 f: d1 R' X
& U. z B" e7 r+ R7 s如何获取选择点映射到视图空间中?源码分享
0 W3 w& r3 Y: N' [, Y* p& t
) D4 t: s+ i( v5 L: p& G- //------------------------------------------------------------------------------8 c) A+ r/ o$ i3 I0 x+ J C5 o
- // Select Screen Position and map to Modeling View Plane5 D7 l& W4 ?0 A9 E' V6 W
- //------------------------------------------------------------------------------4 g9 Y- t& |+ E/ d
- bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
0 q4 V* b0 @+ I. ?# P) K+ [( I% ? - {
9 Q% }+ i$ t5 G# L1 F- Y5 d' L( Y - NXOpen::View* myView = NULL;7 s2 H" Y6 h- n& B
- NXOpen::Point3d myCursor(0, 0, 0);9 b: d: m1 N8 ]8 k$ A7 Q3 u
; o& I. n7 |# s4 R3 I- N- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);
4 e: _# C+ g2 x$ W% ] - if (myResponse == NXOpen::Selection::DialogResponsePick)
$ D3 q5 h4 R" X% Z1 ~! M+ m - {, g$ E- `: s' o1 A
- // obtain the current default annotation plane where PMIs are placed on) H M l4 S% | L: b' c1 U/ r
- NXOpen::Xform *xform1;
* f; _# s, p! S( P1 ^ - xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);/ [# |$ Z; m7 P& ?
- NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();7 N: k. Z0 } t2 y' t# w6 r
- NXOpen::Point3d ptDefaultPlane = xform1->Origin();
8 U& R4 X, T1 a8 \% `! c {1 G2 w! j - NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
6 J9 N0 m8 N3 ^, D - # d0 y4 g) |' w6 a
- // create the ray 'into the screen' at the selected cursor position
0 {3 ^. v- j {. P6 _ - NXOpen::Matrix3x3 vmx = myView->Matrix();- ~" B% C9 W) }2 }. \" y
- NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000); a; F6 F/ p; t2 g" R
- NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
+ o# b0 f3 s4 q' Y% [1 ? - NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);# h, V6 M: B- j3 e: ~
- lineRay->SetName("Ray");
/ ^: c8 o- E% {5 ~4 z - + G, ?* M7 I1 j' Z
- // create the plane from the view to intersect with the ray
4 ]( E* r; S) Q. v8 R( B - NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);. j/ j( G H4 x% Q* f
- planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);) q# n5 N4 B2 L e7 ]/ _# z
- planeView->SetName("ViewPlane");
- ?# g3 u0 \% ^, o - 9 A$ D8 s# l$ l/ d3 c
- // now create the intersection point
$ ?$ M3 T+ \& l9 b# q, x8 G - NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);0 F9 p( Y5 p) s9 P
- pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
, i1 L7 Q) }0 S5 `; N - pntInterSect->SeTColor(10);- W5 P# [) V3 d9 L
- pntInterSect->SetName("Intersection");: O9 X2 i1 D) u" j# @9 i' g2 V; d% F
- 6 Q$ r& o) Y2 N* X- a: ~2 Q( H" A: z4 i
- pos = pntInterSect->Coordinates();
" n0 d! a( L. i( k% w2 N: R - print("\nPMI Position:", pos);
. G4 \& _( k* c" r2 k - ' E9 J/ ~9 {! K+ Q6 S% w
- // clean up - comment to see intermediate objects
3 h$ F& v6 d, I3 n5 O- K# ? - NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");0 \% R- ~6 c, K+ R4 A8 `( C
- int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);
/ I! D1 u& Z8 y8 Z. _ - int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView); c# {/ }( f/ }0 K' X/ E7 ~+ U P
- int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
' J4 U* [# \- y# R: o - int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);$ P, }( n5 P6 x4 h
- m_session->DeleteUndoMark(markDel, NULL);) a. E9 m) c" O( U' g
- 5 z1 y% Q6 e3 X& V
- return true;9 v2 l) d0 |, \9 b! @2 o
- }; Q- ~! r g/ o0 P
- 7 H. O" i0 V5 |
- return false;
* m$ C/ Y0 F; C/ h4 J - }
复制代码
$ \% T$ i7 W7 P: ~# q& N% O! i) L- Z/ ?; x; n6 n" X( Z7 B8 f5 }
|
|