|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
$ e& `& ^. s9 @! ]9 P
" ~& m* x! _: f! b如何获取选择点映射到视图空间中?源码分享/ V2 e0 a0 x: w% [( b
$ W/ D5 v1 c* J( G
- //------------------------------------------------------------------------------
% @ k9 f* l# l/ t. M. Y% A - // Select Screen Position and map to Modeling View Plane) h' t6 _/ a6 ?7 ?& J
- //------------------------------------------------------------------------------! G+ |7 w; O1 A5 O
- bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)4 a$ l& Z+ i+ Q" O- r% M0 F
- {
+ @ c% \0 u) Y" {% `$ s - NXOpen::View* myView = NULL;
Q' I2 q6 T0 ^! ^# J5 b+ Z - NXOpen::Point3d myCursor(0, 0, 0);4 i" ~3 H! Q V9 O0 j* K+ Q
: d4 `& J+ P* S' O: b- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);' |. Y, M% s @0 i7 a9 C9 F" E/ ~
- if (myResponse == NXOpen::Selection::DialogResponsePick)9 \% }$ s% V- \
- {/ j# t, Z! B5 }. ?7 V4 i
- // obtain the current default annotation plane where PMIs are placed on
8 X9 O& s/ Y, O+ F) C3 b - NXOpen::Xform *xform1;
l7 M4 F3 Z. W: A+ S - xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
0 ~% Y- Y( l- u% T: q! f - NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();/ }4 ~6 l8 s7 t0 Y
- NXOpen::Point3d ptDefaultPlane = xform1->Origin();/ g; {3 q. W; E- l1 G, A% i
- NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);, k2 h' {. f }
x3 S6 R8 B4 s2 ^5 R& r9 R- // create the ray 'into the screen' at the selected cursor position
+ Z0 z$ |8 z; d) r6 f - NXOpen::Matrix3x3 vmx = myView->Matrix();: A$ m4 b' n- x" P, m- M2 p1 _% N
- NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000); |/ t$ P5 r4 L `, S$ h
- NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
8 l6 Y, P$ j1 H. u - NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
7 u, |: G- k( X - lineRay->SetName("Ray");! q2 R# e' ^" Y/ b0 O6 Y
- ( W' R: l \9 m
- // create the plane from the view to intersect with the ray
/ q+ V- x1 s0 [0 F - NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);% y2 W' [0 ?/ e. t2 F7 x
- planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);1 a3 {+ O* c9 X+ s9 i& |! \3 E% _
- planeView->SetName("ViewPlane");* R( V T$ D7 o1 b1 \+ u
+ J; \0 ]6 \. S% _. m( r2 b4 b- // now create the intersection point) R* j+ m$ {1 B& e; y+ a
- NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
* U* w" a0 d' ?6 W- y3 D - pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible); B& n K0 _0 ^" |3 r' }) c
- pntInterSect->SeTColor(10);
: K; m! t& s/ m& l: @" F$ h* \ - pntInterSect->SetName("Intersection");- i1 ~( W; ~/ e2 h9 ^9 N) F2 D. A
- 9 n0 W: s% t, s
- pos = pntInterSect->Coordinates();5 w& U5 d4 F! H/ S3 S P
- print("\nPMI Position:", pos);0 M# f( M0 t p; m* v4 {9 M
$ l* ]6 D f0 q) Y: @5 ?0 E6 M/ B, r6 `: C- // clean up - comment to see intermediate objects" B% e6 A9 s1 f6 l; ]
- NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");( Y8 G' v" T* o
- int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);3 I; w! Q# y4 U1 h* r: N. v, U
- int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
) t! C/ T5 j, s s( ~/ g) R5 W - int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);- g" |! i' l7 L3 j
- int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
1 n! }/ O% q0 @8 N! t - m_session->DeleteUndoMark(markDel, NULL);; d4 @' f6 o0 |1 [0 t& `6 K: H7 O
) \3 [5 D$ B4 ?6 r0 w' P3 z- return true;
. {, e* { l9 M1 N5 v% j$ D& I - }
, T0 I; Z. f& o# P' s% S6 L3 I - / k# G" {# t+ }% E/ t* Q+ F7 B
- return false;
& [# e6 v7 n0 } j - }
复制代码
% v' T4 o- b1 z% m- G/ a& w8 K% x% k
, I- t2 Z8 w( L1 C' w |
|