|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
1 ^3 Y6 @; A5 u9 ^* v' A% d' W6 C( |# \4 V3 U& r
如何获取选择点映射到视图空间中?源码分享: A2 |& u6 @- K* r
8 j: M$ h2 Y; i4 E# M# G
- //------------------------------------------------------------------------------8 y Z& \+ j3 J( Z% M' h
- // Select Screen Position and map to Modeling View Plane) F6 K7 a0 j+ L8 r7 ]/ T& _+ q( x
- //------------------------------------------------------------------------------
% L" j9 E" {! V. d4 [6 P- k9 J& ] - bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)2 h* m7 J2 V; T6 `6 ]% f
- {
. ]! M2 t' ~' X, n - NXOpen::View* myView = NULL;" \. V+ t' D( O/ r5 `% H2 D
- NXOpen::Point3d myCursor(0, 0, 0);+ o& a( c. N2 d# v7 b5 T
- ; \9 S1 s7 W! {/ i- \% D
- NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);+ D* n0 r) y7 |4 Y7 @
- if (myResponse == NXOpen::Selection::DialogResponsePick)* A. M3 V6 ^6 \
- {0 x* X, N0 u$ O2 X4 o
- // obtain the current default annotation plane where PMIs are placed on
. K0 i8 e( y M/ M/ M% O - NXOpen::Xform *xform1;$ q# B; m& ^; P4 z0 H; K# e5 a
- xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);- [4 p: e2 M3 d2 N" k8 |" b+ \
- NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();1 j7 N; ^- P. v) V( [' C
- NXOpen::Point3d ptDefaultPlane = xform1->Origin();
2 R* P! U$ q ]# C - NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);3 \6 R" l1 _, o* L" X( b
4 Y* X: J* K$ c# R$ l- // create the ray 'into the screen' at the selected cursor position
- i' Q3 g+ J0 L - NXOpen::Matrix3x3 vmx = myView->Matrix();
3 q* @; Y; Y1 u2 o& P* \ x9 ^* |6 ` - NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);+ D4 K C7 b% x4 a( T/ u
- NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
! m% W1 T4 o+ ^9 B/ S# C, |& I - NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
+ u/ V6 O; e7 J F! z. s$ ? - lineRay->SetName("Ray");6 h/ K# B( L ~+ _+ u4 Q: K
- ! b! H% |3 ]/ u0 `/ l" h/ f
- // create the plane from the view to intersect with the ray
, Y8 p$ S9 L T R - NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);2 i* n0 ~) J5 ?4 T) z2 p
- planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);8 l& S; I0 K$ J* c
- planeView->SetName("ViewPlane");* V! I9 O+ }1 ?- _0 Z" j* `
- P# u8 {) z" J3 ?- // now create the intersection point
& s% z# K; ^: [( V2 | - NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
0 A- z5 S* L1 W% u - pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);" O( d, y& e3 v- b" F
- pntInterSect->SeTColor(10);
- _( M- F; r$ @0 o& } - pntInterSect->SetName("Intersection");: ~: }3 l0 T/ \$ L' X! [
5 v* W, o2 w$ [( I- pos = pntInterSect->Coordinates();" ?6 I% ]9 B9 E& ], E& f2 l
- print("\nPMI Position:", pos);
, |9 `' N/ `7 F0 @: p) x8 Y) d
$ D! o: g1 `* s! ]4 f+ ^% E- // clean up - comment to see intermediate objects
$ P& m1 ~ M$ F( |+ K! i - NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
1 z0 I. K7 _$ G- R9 Z - int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);
" X: B8 p6 ~4 G - int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
. z/ h8 I( X; I' `' @2 w - int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);+ X6 |( L7 m3 j- l" v
- int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);$ }5 X, R0 o6 Q6 w
- m_session->DeleteUndoMark(markDel, NULL);
8 {) `/ M5 T z# [) W6 n - % O1 G& G' V) }0 B- K! D
- return true;% h" i3 K" m' x& z% L" l
- }) i3 r3 c( O- L" v' C
7 b r# r5 n) Y) a8 B6 g: p( Z- return false;& o. y1 Q; v7 m: U) T. F7 \$ U- f
- }
复制代码 8 l3 G( t$ @. W6 t
' @6 w9 K# W% h' G
|
|