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

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x

* Z3 G4 z3 K2 h* x/ Z$ A% Z- J* e  m& v! Z7 f$ V7 a* h
如何获取选择点映射到视图空间中?源码分享- o: |7 [; @8 C0 D& a7 d( `

1 R3 L" _2 F4 w% a" ~, g5 q" P
  1. //------------------------------------------------------------------------------' V, [9 x, [" X" y+ z, F
  2. // Select Screen Position and map to Modeling View Plane! H$ w- Z3 j% S* L/ l8 _3 `
  3. //------------------------------------------------------------------------------
    & V; u6 [- C4 X; E
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
    3 c! m! y, d8 ]9 U
  5. {) e0 I8 ?4 O$ d9 c
  6.     NXOpen::View* myView = NULL;5 ]- V* m  M% x- t* I$ o# q
  7.     NXOpen::Point3d myCursor(0, 0, 0);# Y9 M1 L7 c+ H/ |

  8. / e' F& }# p9 L9 S$ T
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);
    & N; A( f" i+ V, i" w7 s
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)# f& d2 `$ c. z- x
  11.     {
    % Y. v, i! u; n& |
  12.         // obtain the current default annotation plane where PMIs are placed on
    " m, C3 R! [9 i, a
  13.         NXOpen::Xform *xform1;
    , ^% B" J+ X0 ^9 O
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);. Z9 u5 p& G3 K! z2 f. q0 t0 t
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();
    . U% V3 K. Q4 E9 m3 N% A9 m$ n
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();' L; C& J& i9 T( q
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);" d, U' o3 Q. B. Y6 }; b

  18. 7 U, {) F9 }. @# G
  19.         // create the ray 'into the screen' at the selected cursor position
    ; O2 }5 S7 v' ?2 }
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();
    8 I" F! o7 N/ @; b; d* T
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);" O4 Z3 `8 Z6 l# z- e
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);% D& V0 e: n0 D; k) w1 f) U& p
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);2 P* c2 }3 c/ H: Q8 I% \
  24.         lineRay->SetName("Ray");8 P& a6 v9 {& u1 r1 ]

  25. 1 k' v' o" _; u" H1 E0 d0 c0 s
  26.         // create the plane from the view to intersect with the ray5 E: h: n' t" Z+ Z
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
    6 v1 ]$ H" ]5 z5 a& c* n+ `! j8 ~3 `
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    ) E& V2 r" w# B; Z
  29.         planeView->SetName("ViewPlane");3 r* q' ?) U, K9 p! e2 N% T1 O: U( d
  30. # ?6 W) v$ ~2 s: h' J: l! |
  31.         // now create the intersection point7 z( V" B1 \9 \0 G
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
    ) j, ^" s* Y8 t* O
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);5 w& N( g2 q! i. N
  34.         pntInterSect->SeTColor(10);
    * f* N) c/ M% |  W$ w
  35.         pntInterSect->SetName("Intersection");
    4 h! E- c/ L$ ~+ K$ ~% e" Y

  36. 1 ^  U- `( Q, ~, L5 t
  37.         pos = pntInterSect->Coordinates();% Y) j( K1 W, u5 J) _
  38.         print("\nPMI Position:", pos);- N3 N* r% v# W# u4 ~
  39. ; O! l/ u: }3 Q6 y+ D
  40.         // clean up - comment to see intermediate objects" f* I3 X$ l: W& G( Z
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");% e( q! S; J- x. P0 ?. j
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);# q2 O: ^4 G: Q7 G
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);) L( d/ s3 G/ \9 I) s' t
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);7 R- Q% _- e* \1 @* R' q0 F/ ]# W) @
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
    3 F0 T2 U7 Q: R! K5 [2 @- ], P& i
  46.         m_session->DeleteUndoMark(markDel, NULL);
    9 ?! \  z# F% x# }

  47. 9 i" [2 e# Z) g/ m- [  i# x
  48.         return true;
    0 Q' U2 n$ Z; h
  49.     }2 ]4 d5 B/ V2 c; i- F2 Y0 L* ]

  50. 5 [' X! W3 n# W
  51.     return false;# ^/ r& G7 A- e7 d3 D2 p
  52. }
复制代码
2 Q3 Z( c+ i6 E! h
% A" K6 y, D9 @2 o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了