PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x
/ {) Z# H4 d/ a
  U; s1 N/ B/ j+ h
如何获取选择点映射到视图空间中?源码分享& j" o# N4 M6 W

3 U5 u& a# j' _" b
  1. //------------------------------------------------------------------------------" j& D- B* R  q) ?2 q% k9 N
  2. // Select Screen Position and map to Modeling View Plane
    ; Q# V! g( {# u! ^3 ]- K4 `9 y
  3. //------------------------------------------------------------------------------
    5 F+ b* k$ s: p9 {9 p% {
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)8 C/ ?, R5 E  G% h' }
  5. {
    $ ]: Z/ M& G- c5 q4 h0 I$ C
  6.     NXOpen::View* myView = NULL;
    % z! B( O, Y8 `0 y
  7.     NXOpen::Point3d myCursor(0, 0, 0);
    ) _; `+ i/ G7 M6 D
  8. 9 O5 q) I4 K( `! m
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);
    * n( F+ b7 e7 h. r1 F/ f* _
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)
    7 Q  B1 v' [+ r! Q6 J& R
  11.     {
    ! ~3 o6 g3 C) [' L+ h
  12.         // obtain the current default annotation plane where PMIs are placed on
    ! W0 @, j8 s: _: a% f
  13.         NXOpen::Xform *xform1;
    4 `: a- X& z; x7 I
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);, o& m' g. b# N
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();; G& F3 D+ [; \* P
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();4 Y$ F0 S3 M( P4 T( h4 p7 x
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
    4 P/ v* Q5 v! U5 ?

  18. ) ?3 N/ m6 p  E% I
  19.         // create the ray 'into the screen' at the selected cursor position! q4 W7 n2 F  ^& ?4 S) e$ `. i! z
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();
    " C2 ^! f: o' u( h4 I! h2 M
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
    % K# Q+ s2 d* t
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
    ; N/ U$ k  T$ {2 b& J
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);- {1 _4 i, j2 K5 \, {
  24.         lineRay->SetName("Ray");
    1 A4 ~) A* H$ h& ^

  25. - u# }3 |. W; v# W' y; ^3 `
  26.         // create the plane from the view to intersect with the ray2 S8 ?& L2 D. y
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);1 `6 y/ V9 v0 Z& w2 h) Y
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    + J# @# U* }+ Q0 I5 x. x- W
  29.         planeView->SetName("ViewPlane");
    & o) b' X- x' o9 u1 b/ f4 S
  30. 7 B5 @5 e" q7 h4 C2 [* k
  31.         // now create the intersection point
    . K$ |" q4 Q' \( x+ Z7 U- @
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);( V# }1 B7 S4 A8 Z: Z
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    % ~0 W% Y+ z2 Y0 p6 V
  34.         pntInterSect->SeTColor(10);1 z2 Y* q- [$ O* o/ U
  35.         pntInterSect->SetName("Intersection");9 {* P( ]* O& J8 X

  36. 2 Z( X+ y& v. O
  37.         pos = pntInterSect->Coordinates();
    # i8 h" k- Q" x. ~2 P4 V
  38.         print("\nPMI Position:", pos);, P1 Q3 q& d/ G6 i( K5 F/ L# h" `

  39. . @5 B+ F5 Y4 W. o, [0 ?
  40.         // clean up - comment to see intermediate objects
    ) r7 {8 J$ f9 j' N5 `
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");" {  ^: {3 n1 ]1 E, N" [$ s
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);" Y8 d# E3 `% e$ c6 s# b( S
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);& q/ f" v4 R7 m3 v) e* _
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
    9 b, h3 \( \1 J; V* U9 c5 E
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
      ~" h! J' J8 M
  46.         m_session->DeleteUndoMark(markDel, NULL);( C' @  o' H4 B

  47. ! P/ D. [( z; h2 n
  48.         return true;' p9 r" z0 K) K2 n/ L. J
  49.     }
    ; y/ B5 z- p+ P$ T

  50. . @" o% H: m2 I' W/ l8 a+ A; B' U
  51.     return false;
    # k# L4 S) a, C& m+ V* ]' B. E
  52. }
复制代码
" [1 S9 B0 G8 d8 ]6 `( F9 @9 C
) T( }% d7 P% Y) _, C1 n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了