PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x

5 f4 L( k7 ~7 v" x- [
/ `+ @& l2 S4 {: f+ F如何获取选择点映射到视图空间中?源码分享
6 D) R; s/ v; f3 D! z+ Q! h+ [. P/ o$ _
  1. //------------------------------------------------------------------------------: d" f$ H7 T7 B& D+ l' P- v2 f' L
  2. // Select Screen Position and map to Modeling View Plane
    + L2 I9 E  g) |. w* T% Q& v/ L9 i
  3. //------------------------------------------------------------------------------
    : y; n8 k" U/ f* n
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)/ y' @- Q1 N9 ?" `- V
  5. {
    - s0 g% N$ {7 |9 Z) g
  6.     NXOpen::View* myView = NULL;, z% ~0 j: W. @4 B# C
  7.     NXOpen::Point3d myCursor(0, 0, 0);  \' ?! S8 U# |+ C0 `
  8.   w4 ^0 x' s" {0 `- `3 x
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);  o5 U& k7 T0 E  X$ H2 R' c2 r
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)" s, i4 W) Q( e% U: f# Z
  11.     {
    : I0 X4 v: _1 c
  12.         // obtain the current default annotation plane where PMIs are placed on
    / w* K5 L3 W. [1 f% |
  13.         NXOpen::Xform *xform1;) L- R8 m, x6 D+ D3 `- T; ?
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
    ; z2 s0 A% o& \9 G4 s
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();1 F1 b/ h! a) o
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();
    . J* s! [9 f9 R0 P# }3 p  X
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);! \* S( Z6 @& c: j( n6 h5 a* ?

  18. & x3 d0 H% A, s
  19.         // create the ray 'into the screen' at the selected cursor position! b9 t/ H) B4 T: v: j
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();
      I, y0 {4 _. G) i9 g- R- d  o
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
    ; C7 V, L7 J# R
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
      A5 [: b3 z" M) C5 w0 S. L
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
    , i. _' S+ u5 c) I, z0 Y. p
  24.         lineRay->SetName("Ray");5 E1 ?, _' F/ S

  25. $ H) b4 [" p# T1 P( E
  26.         // create the plane from the view to intersect with the ray- _  w4 n8 |8 q0 Q) \
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);7 ~; v& O. ~# `9 b* T! W) I
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);- o1 T3 ^# _+ q5 w% n8 J% `
  29.         planeView->SetName("ViewPlane");$ G: T' ]& [% v! l2 f: w1 P

  30. % I5 Q* ?0 F8 f
  31.         // now create the intersection point
    4 [( h& R3 }6 M4 L' e% u0 N! s! x
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);7 f! D! a; o& K* K
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);- |1 B* t" q" Z" o% d/ U, p
  34.         pntInterSect->SeTColor(10);/ m# |7 H' u0 i- f
  35.         pntInterSect->SetName("Intersection");
    ; V" K1 z7 s& C
  36. # b  i5 k# H/ {
  37.         pos = pntInterSect->Coordinates();
    ! _) B  N1 ?8 P3 x  q; s
  38.         print("\nPMI Position:", pos);% {$ f+ P; Q4 R& f2 a

  39. * v$ y1 S* M) U7 p8 C2 u! v
  40.         // clean up - comment to see intermediate objects
    " ?+ a' D1 P) {( l( U$ M! K, Y0 T
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");* @8 b3 @8 p: u! v
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);- f( y2 _: X/ N' c# S
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
    " W8 o8 b' k6 A) v: d
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
    4 ?1 `4 p; A# G  C( }/ ~0 ?1 s8 V: j
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
      W. F4 _* e( ]7 M6 ?
  46.         m_session->DeleteUndoMark(markDel, NULL);, i0 t6 Z' F2 M$ g3 D

  47. 8 y3 q- W7 Y7 U7 s% Z
  48.         return true;
    4 |9 P) M) }  p8 s
  49.     }
    . W/ p% b( p+ |4 B( r" B3 T; h
  50. + K" x: a- a. X+ ?" g/ ^
  51.     return false;7 a4 T5 m, L+ Z
  52. }
复制代码

) h) W1 j- t6 n. [5 p
$ m5 j/ N0 ^; t! r0 C- T+ D! X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了