PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x
- \4 e& ?( k2 {' E
; @/ I  j+ ]" ~- B
如何获取选择点映射到视图空间中?源码分享1 [+ m" H) r+ \% n! [9 s

2 z) l. o  @* h4 ^! P
  1. //------------------------------------------------------------------------------0 h9 g- Q! @7 e& P: D4 l9 t4 T8 ?
  2. // Select Screen Position and map to Modeling View Plane
    7 ?- N' {& s; ~. s
  3. //------------------------------------------------------------------------------
    & w# W. a" H- }: B( U0 F
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
    - k; e4 t) |- d7 D! X! c
  5. {
      A& {; m- G, O2 v' H: u& Y+ ?1 r
  6.     NXOpen::View* myView = NULL;
    3 ]8 _1 B  h; ~; i3 |) X
  7.     NXOpen::Point3d myCursor(0, 0, 0);# J/ B4 u( r* M1 `$ a+ o
  8. ( h. o" a; O$ G
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);( w4 ^$ P) ]- Y7 p
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)
    ! U% P# O: a: K- w. X" _
  11.     {9 @2 t4 k$ m  V2 A# d6 h( G  y6 R: J2 O
  12.         // obtain the current default annotation plane where PMIs are placed on9 O$ Q" s* t3 D! i. Z+ W* d$ J# J
  13.         NXOpen::Xform *xform1;# H2 D, P3 u9 [
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);0 n# M, w9 T" P) M; l& ]1 I9 X
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();( n" @3 F1 Q  R% Q( [3 g3 S3 c/ G
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();
    7 K! [& q5 W- X2 o, {
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);
    8 ^4 V2 v6 k2 H7 T

  18. 9 p+ I. c6 }7 Q% Q3 Z! }) V& |! v
  19.         // create the ray 'into the screen' at the selected cursor position2 l# L2 a" d' C3 b/ u! d1 ~
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();
    : ~+ W4 Q% U* q: ]( c
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);5 R" D3 ~0 x( x7 V% G, d2 S9 H3 p
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);
    . a( b0 M' k$ |* Q  y  L/ m
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
    # n( @% J3 ]; b' L+ K
  24.         lineRay->SetName("Ray");
    2 P/ Y1 |) R6 V) u( r

  25. 3 s, q- B+ z" W
  26.         // create the plane from the view to intersect with the ray
    + V7 Q( I  n5 F3 S% o$ A
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);; z$ E* U; g" Q2 o
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);; d/ a" C+ i( p: [4 v
  29.         planeView->SetName("ViewPlane");# y5 _1 {5 q) k& D

  30. + d* t$ g6 ~0 G* l; G4 s' X
  31.         // now create the intersection point5 ^8 N& b  ^& z* X$ a% m
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);0 _2 K# \% J7 X3 Z
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);- U# s: l" T2 K8 o1 r8 R
  34.         pntInterSect->SeTColor(10);
    6 {1 O, O9 S) F8 }0 c( S  n+ c
  35.         pntInterSect->SetName("Intersection");9 z2 v) q7 R6 ~8 j
  36. 5 \2 N- Y+ K5 d7 M3 [* C" N2 E* u+ [
  37.         pos = pntInterSect->Coordinates();
    8 ^+ _' M! P& }: s+ Z! ^
  38.         print("\nPMI Position:", pos);( F2 V4 C+ n: w: z

  39. $ m+ ?/ d; p; `7 c
  40.         // clean up - comment to see intermediate objects
    # M+ D1 k- \5 o, Y- _3 L9 j" u
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");
    . }+ T1 ^0 J. J; M# K
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);$ h' H3 ^  X& t% }2 V& b5 S
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
    8 I2 \! s8 |( X) \& h: Q) Y
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);1 K- k' K, b4 m2 w0 i0 Q
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
      Q2 w1 A* H2 w' G( K- z/ c
  46.         m_session->DeleteUndoMark(markDel, NULL);3 C$ h, ~& v' D) C: D/ F
  47. 6 A# m& j# E  {/ E9 p2 {, j
  48.         return true;
    - m$ T4 T1 }* x  p
  49.     }" C4 w, E1 t/ N. ?: q
  50. * z& l, B* ?9 U2 E- R$ H, ]
  51.     return false;
    % i# j) g/ R9 E; x  U# S$ R4 v7 x
  52. }
复制代码
# i* |; l5 [  J

+ s+ r' Q2 N0 x% V
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了