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

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x

: a1 n3 v4 g7 s9 f: d1 R' X
& U. z  B" e7 r+ R7 s如何获取选择点映射到视图空间中?源码分享
0 W3 w& r3 Y: N' [, Y* p& t
) D4 t: s+ i( v5 L: p& G
  1. //------------------------------------------------------------------------------8 c) A+ r/ o$ i3 I0 x+ J  C5 o
  2. // Select Screen Position and map to Modeling View Plane5 D7 l& W4 ?0 A9 E' V6 W
  3. //------------------------------------------------------------------------------4 g9 Y- t& |+ E/ d
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
    0 q4 V* b0 @+ I. ?# P) K+ [( I% ?
  5. {
    9 Q% }+ i$ t5 G# L1 F- Y5 d' L( Y
  6.     NXOpen::View* myView = NULL;7 s2 H" Y6 h- n& B
  7.     NXOpen::Point3d myCursor(0, 0, 0);9 b: d: m1 N8 ]8 k$ A7 Q3 u

  8. ; o& I. n7 |# s4 R3 I- N
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);
    4 e: _# C+ g2 x$ W% ]
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)
    $ D3 q5 h4 R" X% Z1 ~! M+ m
  11.     {, g$ E- `: s' o1 A
  12.         // obtain the current default annotation plane where PMIs are placed on) H  M  l4 S% |  L: b' c1 U/ r
  13.         NXOpen::Xform *xform1;
    * f; _# s, p! S( P1 ^
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);/ [# |$ Z; m7 P& ?
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();7 N: k. Z0 }  t2 y' t# w6 r
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();
    8 U& R4 X, T1 a8 \% `! c  {1 G2 w! j
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
    6 J9 N0 m8 N3 ^, D
  18. # d0 y4 g) |' w6 a
  19.         // create the ray 'into the screen' at the selected cursor position
    0 {3 ^. v- j  {. P6 _
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();- ~" B% C9 W) }2 }. \" y
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);  a; F6 F/ p; t2 g" R
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
    + o# b0 f3 s4 q' Y% [1 ?
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);# h, V6 M: B- j3 e: ~
  24.         lineRay->SetName("Ray");
    / ^: c8 o- E% {5 ~4 z
  25. + G, ?* M7 I1 j' Z
  26.         // create the plane from the view to intersect with the ray
    4 ]( E* r; S) Q. v8 R( B
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);. j/ j( G  H4 x% Q* f
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);) q# n5 N4 B2 L  e7 ]/ _# z
  29.         planeView->SetName("ViewPlane");
    - ?# g3 u0 \% ^, o
  30. 9 A$ D8 s# l$ l/ d3 c
  31.         // now create the intersection point
    $ ?$ M3 T+ \& l9 b# q, x8 G
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);0 F9 p( Y5 p) s9 P
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    , i1 L7 Q) }0 S5 `; N
  34.         pntInterSect->SeTColor(10);- W5 P# [) V3 d9 L
  35.         pntInterSect->SetName("Intersection");: O9 X2 i1 D) u" j# @9 i' g2 V; d% F
  36. 6 Q$ r& o) Y2 N* X- a: ~2 Q( H" A: z4 i
  37.         pos = pntInterSect->Coordinates();
    " n0 d! a( L. i( k% w2 N: R
  38.         print("\nPMI Position:", pos);
    . G4 \& _( k* c" r2 k
  39. ' E9 J/ ~9 {! K+ Q6 S% w
  40.         // clean up - comment to see intermediate objects
    3 h$ F& v6 d, I3 n5 O- K# ?
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");0 \% R- ~6 c, K+ R4 A8 `( C
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);
    / I! D1 u& Z8 y8 Z. _
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);  c# {/ }( f/ }0 K' X/ E7 ~+ U  P
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
    ' J4 U* [# \- y# R: o
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);$ P, }( n5 P6 x4 h
  46.         m_session->DeleteUndoMark(markDel, NULL);) a. E9 m) c" O( U' g
  47. 5 z1 y% Q6 e3 X& V
  48.         return true;9 v2 l) d0 |, \9 b! @2 o
  49.     }; Q- ~! r  g/ o0 P
  50. 7 H. O" i0 V5 |
  51.     return false;
    * m$ C/ Y0 F; C/ h4 J
  52. }
复制代码

$ \% T$ i7 W7 P: ~# q& N% O! i) L- Z/ ?; x; n6 n" X( Z7 B8 f5 }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了