|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
/ S, R! D0 O+ K# R$ `" b
3 p& Y/ P8 u0 p8 a6 x) g* m8 U如何获取选择点映射到视图空间中?源码分享
- _/ W1 _: x: R" t* F. U# q* f
b) u3 J# t% A7 J9 _" `& X/ i- //------------------------------------------------------------------------------# B# i' [ Y& n5 v% m5 V
- // Select Screen Position and map to Modeling View Plane
9 u9 S# K$ M) G3 l. ^$ p. D - //------------------------------------------------------------------------------5 h7 K, m. R& L/ K0 |) V& i
- bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)2 @; I% O$ \8 {2 p$ i1 B
- {1 ~9 z2 F2 E! X
- NXOpen::View* myView = NULL;
/ `2 |! Q3 x1 g2 o3 Z, a# ^ - NXOpen::Point3d myCursor(0, 0, 0);
g& ^# C1 T( w) d- Q% R! O
4 `+ m1 K6 J2 Q) ^- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);( S' |& t5 J- }) y R3 P
- if (myResponse == NXOpen::Selection::DialogResponsePick)
! k: l' P$ c1 p" S. Y/ b4 i - {
/ k* U- s- R+ Q. ~# M - // obtain the current default annotation plane where PMIs are placed on
' P( v9 v2 Y; s: z7 D - NXOpen::Xform *xform1;+ I! d- y# J6 [9 D
- xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
" F6 W! l2 i, l9 J6 O; } - NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();% h0 ~. D$ w9 Q! p$ b& ^$ J6 Y
- NXOpen::Point3d ptDefaultPlane = xform1->Origin();
; }6 B; J; ~6 g - NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
& j% u: r3 `/ c0 g
. u* v& x0 M& i$ B9 \, N- // create the ray 'into the screen' at the selected cursor position
" G( X; a) o& _7 p3 G# v) a. s, U - NXOpen::Matrix3x3 vmx = myView->Matrix();3 z- F' v$ h M f. S
- NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);! t+ r2 o2 _4 q' ?
- NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
3 _1 h. I2 S$ g! |1 k. H - NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
/ N' F" y/ n: f+ Q. T# `: @8 Q - lineRay->SetName("Ray");
( ?1 \6 K. r/ c" j
% p, i* C. l8 s6 b) Y% n- // create the plane from the view to intersect with the ray$ J1 @2 M" v0 \6 d* D
- NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
: {* J: e( W+ k0 r a& F E - planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);9 p, R. m1 u% D; Z. I2 P# y1 C
- planeView->SetName("ViewPlane");1 G! Q* U7 l( U8 k- m) l5 R
. [+ |. f- T7 T s# k- // now create the intersection point
: X( y( U7 l: y- |% @( s8 \# G - NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
0 C6 Z: V! D2 a% c8 H. g: B - pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);$ }% I: z% T5 E
- pntInterSect->SeTColor(10);
0 s7 T$ Z+ o8 S2 r; J - pntInterSect->SetName("Intersection");/ {% J g, l; X4 n
- 4 ^* h6 n1 D* t
- pos = pntInterSect->Coordinates();2 t) L5 y( u- B7 R
- print("\nPMI Position:", pos);
, p K8 b$ Y4 v# N M - " M7 u& C4 f k1 x* Z9 |4 d
- // clean up - comment to see intermediate objects
# v4 f/ E/ a; U% ~) P8 d$ F - NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
9 E1 Z' s" c, L! s# I - int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);
6 z& d2 g* {! p! ] - int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
# W. E ~. S4 a - int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
9 T' A; }; U1 Q- q, m& U - int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);' ^9 }8 H! w8 \$ k
- m_session->DeleteUndoMark(markDel, NULL);
) \3 c' ^4 \7 x# [. | N- M - : q" e; N! ]. f2 ]' c/ {
- return true;1 a, q6 Z# T( N8 e3 p. G) ]
- }; ~% r) w' u: Z% w- Z
* v6 a4 t& @7 B$ q2 u3 \% y& [- return false;
) n7 B( s7 j5 h5 E: u& \& y - }
复制代码
) B+ ^6 p5 M/ P2 g% u& R" _6 S/ T1 a k6 f+ i( h9 [# j. I( @* q
|
|