PLM之家PLMHome-国产软件践行者

[资料分享] 如何获取选择点映射到视图空间中?源码分享

[复制链接]

2023-7-15 12:08:47 1247 0

admin 发表于 2023-7-15 12:08:47 |阅读模式

admin 楼主

2023-7-15 12:08:47

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x

; ~* E7 f, v' e
0 A7 I: T6 u% A& M8 ~0 C% {如何获取选择点映射到视图空间中?源码分享& [, V" F% \: h2 \
9 b, _5 H; C7 M2 [4 @5 S" K
  1. //------------------------------------------------------------------------------* v$ b  g1 ~" N
  2. // Select Screen Position and map to Modeling View Plane
    , C+ r' X+ z4 _. \/ c, m1 T" ]3 b
  3. //------------------------------------------------------------------------------
    + T; Q/ a4 }/ Y% z2 C# j5 [
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)( m1 O4 \7 A+ ]' k6 c8 X
  5. {
    ) L+ t* E  e0 I
  6.     NXOpen::View* myView = NULL;
    7 N% m' T# |6 N$ @$ G: u
  7.     NXOpen::Point3d myCursor(0, 0, 0);
    $ ]) B9 F6 e9 y0 A- I* Y" @" C! N

  8. 3 V) h9 D& W- Z$ J/ o# W; ^
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);2 s  |) f) x' @3 _, @  n
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick): I2 u9 j- q# V) f) b
  11.     {) d0 f( s" R% n  j+ g8 H) q) A" O' I8 T
  12.         // obtain the current default annotation plane where PMIs are placed on
    $ G6 H/ s* k! Q/ x& s5 p
  13.         NXOpen::Xform *xform1;2 F* c: b. t, X3 W
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);: ^9 u7 I; r8 U) A3 g& t0 ]
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();
    : i# p1 h) {$ y( C6 ?- n) a8 m
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();
    6 H# }* C! F# L; L; E1 Q1 L! Z, [
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
    * G9 n& k  }. O' A$ X
  18. ( i8 l0 C' T! n3 [, B- w% W- J0 x6 X
  19.         // create the ray 'into the screen' at the selected cursor position
    . l8 z; l4 A5 c' ^
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();! Q# {9 U) k$ M9 {' D& n: H
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
    , B, ^) h, I) W; y& ?$ ~  D; o6 V
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);) q( T4 f/ p7 ^
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);2 z+ j5 O9 p  S& J0 N4 G+ ]
  24.         lineRay->SetName("Ray");9 s" e) ?/ g3 m( e/ V( e7 [

  25. : U/ h. C9 D* ?, T- r1 N$ F
  26.         // create the plane from the view to intersect with the ray
    ) f  ?4 u! o0 O/ v
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
    . Y& k" ~3 f  X4 T# a
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    1 m5 R0 S0 ]' `+ b, j" E8 R- {: u  J
  29.         planeView->SetName("ViewPlane");4 r/ i) O* [8 _# h2 L

  30. 6 Q8 @! j0 P0 ^+ T8 f
  31.         // now create the intersection point" ^+ I0 v! B$ U( G0 C# U
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);' \: r' j* T0 ?) S
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    4 H1 \% L# Y1 [# r# I# B
  34.         pntInterSect->SeTColor(10);* [- A1 {5 h9 I. m8 O
  35.         pntInterSect->SetName("Intersection");4 [2 z( F9 A# }. ^/ |

  36. " h5 _- O$ Y; H! ?, v/ ^% X
  37.         pos = pntInterSect->Coordinates();
    5 h3 i# h$ o3 n$ c1 Q
  38.         print("\nPMI Position:", pos);# M, f) O- H# b+ N* y" I. j
  39. 5 d$ |) |; I& H
  40.         // clean up - comment to see intermediate objects$ }; `' P9 X# J" l4 p# ~
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
    6 q  o' q/ ?  {5 K" T
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);" ~8 m- O8 \- q* Z+ i+ }6 r
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
    5 e0 P& k1 F, a( L; c
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);# g. m! W* J+ j: ?% L! \4 ?
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);: V- w2 T4 r: H2 g) j/ @1 G
  46.         m_session->DeleteUndoMark(markDel, NULL);
    * x: ~# Q# \% h! C9 y# N, t
  47. 4 c; D" T1 O0 H4 X
  48.         return true;" r: j9 o3 r  S5 |$ n! h' ~% z
  49.     }: z: O2 W4 [0 u% E, k( U

  50. % W. w4 A* Z( a& n8 Y
  51.     return false;+ T7 H1 G- I) q* Z  q; P+ [/ S
  52. }
复制代码
. v+ I. K8 @( T2 p
4 t- I& ]% p! ~/ v: H
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了