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

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x

' P0 J; U7 s9 l. j% z" ~
1 C' ^" `: t6 v9 \- {: c如何获取选择点映射到视图空间中?源码分享
1 a: s9 Z+ s  U! I7 Q, E6 ~! i  P( J8 f" e
  1. //------------------------------------------------------------------------------
    $ f6 r3 j+ E7 s( o9 n2 g9 s
  2. // Select Screen Position and map to Modeling View Plane- {; u8 c) K6 t6 j
  3. //------------------------------------------------------------------------------
    : @8 a. s3 H, G9 u$ y8 D( T
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
    " }: O2 c( G! {+ ?$ F* E! B$ q
  5. {
    , [# o0 T; V' e, T  B3 G
  6.     NXOpen::View* myView = NULL;
    6 }; O; r# o% y
  7.     NXOpen::Point3d myCursor(0, 0, 0);/ `+ T) i! v/ E4 v' |
  8. ! f) R! z3 E* F7 S$ L  Q
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);5 Q9 |6 f2 T; M9 h4 s
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)
    ; b' f7 ?7 I/ r3 q3 a, v
  11.     {: B6 A* w5 t. Z: D. S6 Z) c
  12.         // obtain the current default annotation plane where PMIs are placed on
    2 S3 k5 A0 `& [# P  H$ @  j
  13.         NXOpen::Xform *xform1;  Y5 G. k  ~& \
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);$ t$ z" ~% \* I7 ]% U8 o
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();. J% V- E  ]/ _( s  M
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();; z7 E9 F% k- m* ^
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);) k5 M: T: M3 O! v- ^" x
  18. ( l7 `+ m2 `4 b
  19.         // create the ray 'into the screen' at the selected cursor position
    6 [2 H6 ~, M. d6 ^* J; O$ A4 Y
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();# d. M/ o, Z' c1 n
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);: B' i0 O; m, n5 x2 i1 ^- _& x
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);1 ^, W0 a( V" N( P2 r8 L8 b
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);/ h4 v1 u" ^1 h% S% y+ j
  24.         lineRay->SetName("Ray");9 N+ Y( q' I+ ^7 }
  25.   l2 V. u7 T9 `2 J8 ^. x$ D( u; `+ {
  26.         // create the plane from the view to intersect with the ray
    7 K# q& O  \: j6 X
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
    9 D3 K# P' j$ L: j! R. U& g
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);5 b% {" Y6 i! {  s9 k
  29.         planeView->SetName("ViewPlane");
    + W9 ~9 p7 g7 L/ a

  30. 4 D5 q: Q7 S$ ?7 p8 f' d
  31.         // now create the intersection point8 C" L, ^5 p% x- V) K% V  D
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
    2 V0 a, T) d5 i5 J, ~. i2 {
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    ' ]2 Q, E: [1 t3 B. {
  34.         pntInterSect->SeTColor(10);
    9 g! y$ Z: I& `6 e
  35.         pntInterSect->SetName("Intersection");# t6 w7 X9 b' x! N6 d; j% F( k1 {

  36. 6 L" r" \# g  f& k9 l( S0 f; M. T
  37.         pos = pntInterSect->Coordinates();! N! a; E3 y* y- c9 h( w
  38.         print("\nPMI Position:", pos);1 t! Q- s0 x/ m, w* w3 o
  39. * U  U# K& H' n, q3 @* R" O
  40.         // clean up - comment to see intermediate objects. z% K0 z' L, F, ?
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
    # W# ]" b3 }& B3 i7 r1 Z8 a% Z
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);4 v! l7 |. S0 v) J
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);( X7 Z! a: c$ j1 ]
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);% n2 e) o1 @/ V; b' d; D
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
    * O: l/ ?5 n" m3 m. S3 m
  46.         m_session->DeleteUndoMark(markDel, NULL);
    3 Z$ G, L/ O% k. ^7 Z

  47. & A) }0 E4 N! E/ r' O, _/ k* U
  48.         return true;6 ?  h1 r/ S/ E) [9 c6 S) p# r
  49.     }
    4 F6 G7 s/ T3 i1 K

  50. % V9 b/ r# K" R. J' J
  51.     return false;; {2 {. v& ^& Y$ |6 r
  52. }
复制代码

8 e" Z/ ~6 a2 X9 Z; g$ i
& G2 s' T1 Y% y, N8 W( y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了