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

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x

* F3 Y8 L. i( D' T; [
$ d& q8 x4 v1 `- ?# ^如何获取选择点映射到视图空间中?源码分享
5 l5 z/ ^: v; ^
( C/ Q' e9 m% L5 J
  1. //------------------------------------------------------------------------------
    : m0 i0 v% {; r+ i6 ~  ~* e  u
  2. // Select Screen Position and map to Modeling View Plane) @! J- H: o+ z/ c, i" b5 M" b
  3. //------------------------------------------------------------------------------; d/ w8 x7 ~8 y3 ?8 w0 T9 P
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
    0 g; [9 {% o* E- \
  5. {
    4 I3 d0 Y$ i% `$ y. K
  6.     NXOpen::View* myView = NULL;
    6 B, M% ]4 Q! V
  7.     NXOpen::Point3d myCursor(0, 0, 0);
    % @0 o; W! n: a; g) b* M! f8 \  ]; f

  8. + c% s8 v" X( L7 `9 D/ ^
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);# t& [: T/ n: T) t! |6 i
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)' F/ P/ q9 f0 E3 @5 L$ E+ S
  11.     {
    5 \4 V$ X' J0 e
  12.         // obtain the current default annotation plane where PMIs are placed on
    3 t7 g! s, D; G# ~6 Z0 X  G
  13.         NXOpen::Xform *xform1;
    * X8 {" ~9 p  I" Y/ c
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);( K9 W  U, s) V
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();2 t6 S+ G3 {/ K+ d
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();
      U  Z# A& J# q
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
    & \6 P9 E3 n( G* Q

  18. ' t" X9 Q; g2 [7 ]' L* e2 w: a
  19.         // create the ray 'into the screen' at the selected cursor position
    : \/ G0 M. v! d
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();
    , m5 I# j: v) D2 t* [; s
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
    # D+ h+ u8 X+ w- w! H7 {
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);, b2 j% C. Z5 t5 u% h8 }; x
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);6 m( z0 j4 k& Y; z5 e) L
  24.         lineRay->SetName("Ray");
    9 V/ u" O: X6 [2 E

  25. . F! F$ N9 [  w$ c
  26.         // create the plane from the view to intersect with the ray8 ^1 S6 ?8 X, I% `" t1 S
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);  t( P* ^: f! l( n
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);) ~* L; E9 w$ _% F  o
  29.         planeView->SetName("ViewPlane");
    6 r6 W/ U; x. B8 a) m1 M
  30. , p. O1 x9 X  e2 M* G
  31.         // now create the intersection point* l9 U1 h: f* B3 v# O
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
    ' J( f& k4 i: m' o
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);: K8 ?# \" B! W+ T! T
  34.         pntInterSect->SeTColor(10);
    5 `. B. {. S$ O) @
  35.         pntInterSect->SetName("Intersection");* i! n8 i/ k0 M& f. U; `
  36. 0 X# ~9 [; v* K1 S2 C
  37.         pos = pntInterSect->Coordinates();
    $ W, z% B, j3 h, s" X
  38.         print("\nPMI Position:", pos);9 P. j4 d" Y1 d

  39. 8 o! x: \" f1 A+ u
  40.         // clean up - comment to see intermediate objects
    ! h/ C; o" Z& f
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
    : V2 v# C0 Z% M( ~6 C, z0 w
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);7 ]* f& W" D% \' F+ ]! z3 J5 M
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);, U' f$ i: k. [  O' ^1 _& p) B
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);" a" w' A" F1 I5 c, F* D( d: l7 P. T
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
    ) K1 o3 C6 u5 W0 K3 d
  46.         m_session->DeleteUndoMark(markDel, NULL);7 y; w7 f! N* f' g( |

  47. 3 u( ]( A3 J% w7 C4 P5 v# Z0 w
  48.         return true;
    9 k, v' t( H7 L  A( k. \4 _
  49.     }% ?4 D! C* K  ?5 @/ ]  X
  50. 9 Q  c6 i8 ~# u# ]# c
  51.     return false;
    * g1 l* Z) o2 e' R& i3 M7 J
  52. }
复制代码
) }) U1 d) {# R* f" M
4 q3 D5 H* b: |0 I# l; e
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了