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

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x

  Q2 n4 J$ ~0 c* f7 K- U, {: D: l1 ?
$ D# |) h1 B& S如何获取选择点映射到视图空间中?源码分享, c/ `+ ^) X7 M' i) @1 N' H+ W
# W& p) q# ]2 l1 R7 R
  1. //------------------------------------------------------------------------------
    ; _; x" P' B0 {4 j  B
  2. // Select Screen Position and map to Modeling View Plane
    1 T) F' q/ L, ?2 e  r
  3. //------------------------------------------------------------------------------, B$ o6 X5 x" f3 U  k1 q
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)  e6 T  a; p! P  h# j& M
  5. {
    ; g. z0 N. a2 X* v  n$ M
  6.     NXOpen::View* myView = NULL;# {0 r' b* I6 Y  f9 y: ~, |
  7.     NXOpen::Point3d myCursor(0, 0, 0);
    + X6 A  F7 ]/ Z1 e  h  T+ I5 m

  8. + G" ]! C+ X, e6 R" Z3 R& C
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);) w8 d, f* z4 w$ \
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)4 q: n- q% c9 g
  11.     {
    % W! }1 F( S6 [
  12.         // obtain the current default annotation plane where PMIs are placed on
    * W; z! J4 c4 s9 e
  13.         NXOpen::Xform *xform1;) `: X! r  R- v* ?6 l2 I
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);- m) G- U( j; T( s; T, A% y
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();
    & W1 `: o- w: j6 u+ {3 t& i
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();' `+ C. n* V' {: r8 `" [
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);' x* g& \5 ?5 H& A' \

  18.   ~1 U7 @  ?1 G! m
  19.         // create the ray 'into the screen' at the selected cursor position
    * H) E) `! t1 X' m$ i( z1 L
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();
    " Z. B  j" J% i/ v
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
    . N# f/ n4 g3 F& }
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);; R( I# t6 ^' V3 Q& w0 \
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);; D* N4 r: [1 A9 L; R3 y
  24.         lineRay->SetName("Ray");' J2 ?  o( V7 b5 Q! o
  25. . \' ^6 E1 s" _; `4 T$ r( f
  26.         // create the plane from the view to intersect with the ray
    & J0 ]0 M, ?- h+ X4 |# X/ `. g
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);. u2 B9 A$ @+ F% E# p- t. Z9 k, F
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);+ e% h9 e: p# W& Q) q( Y8 S; {
  29.         planeView->SetName("ViewPlane");
    7 ~; S' {* N+ G" F$ ?% r  d7 z

  30. 0 h; E/ B& O, Q5 s4 }2 L8 }: o
  31.         // now create the intersection point+ f5 i7 p, E  ^7 N2 H. T8 l
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
    8 F+ a: W3 M: q% M1 e- z' ^
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    ! A5 h" b& c+ b# n$ K5 \
  34.         pntInterSect->SeTColor(10);
    1 C) N& t8 v: v! B$ u1 _2 F
  35.         pntInterSect->SetName("Intersection");) G0 [; c# r! Q8 v" w& J  ]! K

  36. & Q, t" t& x( q+ O& Q& M& {
  37.         pos = pntInterSect->Coordinates();" ?3 y7 W" R6 x+ w, i- M) A1 Y
  38.         print("\nPMI Position:", pos);$ t& |7 e1 Q( ?/ W$ {

  39. 9 z6 J2 j# n, o7 o0 m0 \. S; w9 k
  40.         // clean up - comment to see intermediate objects! S) C6 f# Z' O+ f( }3 q* C
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
    # [4 [% ^' m: q* A1 o* @% Q
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);
    # [2 u2 b; S: m9 t7 v
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);6 n2 ^4 J8 u2 i2 ?4 y& |7 J6 i
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
    $ r, g; c+ d" T1 f' Y& u
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);- H; b' F8 ?" c5 [
  46.         m_session->DeleteUndoMark(markDel, NULL);
    ; j; @% ~; L. `5 D
  47. 7 Q0 @4 r, `/ C, s2 W& F- c
  48.         return true;
    2 N% u3 p: z, Q- U+ ?4 ^+ {
  49.     }  z' U: f% w; {, v
  50. 5 q9 k4 ^1 U6 J+ K0 ?) \, L
  51.     return false;
    ' b) y4 k7 s4 I$ C1 i( m
  52. }
复制代码

/ N  C0 J* @. w' d6 R
! j# w  l- ?( c  H
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了