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 1040 0

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

admin 楼主

2023-7-15 12:08:47

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

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

x

6 U! E2 o9 J# M- E) a9 M  {
( E) t. E+ B4 \( S7 |8 n如何获取选择点映射到视图空间中?源码分享
1 U$ k8 t. l) a* o  T9 m: ?$ \+ w* _% J# h
  1. //------------------------------------------------------------------------------
    1 A* R% S' c7 H! a' v  l" d# [
  2. // Select Screen Position and map to Modeling View Plane3 {) M: w2 W6 q6 @( J8 z7 k
  3. //------------------------------------------------------------------------------
    $ A7 r& J. ~. j1 B
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
    , j: S  A0 [- I- K1 D
  5. {: r8 h' Y+ t& o; j/ T( a6 y
  6.     NXOpen::View* myView = NULL;
    1 p* c" t( w6 R. L& e5 P
  7.     NXOpen::Point3d myCursor(0, 0, 0);2 k  C! A! M# w( P% W. Q  A! @

  8. % E$ h8 r& Q1 V% f$ C" [6 J, j$ x
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);' T) m, I6 E# v
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)8 O; S. g4 N; v
  11.     {$ F% {( Q( d) M, `
  12.         // obtain the current default annotation plane where PMIs are placed on/ G" d  @+ b7 y- A# O# B$ B: j
  13.         NXOpen::Xform *xform1;3 p0 G% [$ I4 }" B& j" h9 O) n
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
    # r9 T2 V$ ~' \* G/ `! [! i+ F
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();
    ) G! G2 z) W: b1 X. T- F
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();
    $ O. f3 l9 P8 ?7 W9 w# a
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);% C8 b6 W# r4 [

  18. ; v* p" M9 L; U& K. _; V5 d% V
  19.         // create the ray 'into the screen' at the selected cursor position
    , L' X8 }3 J% a$ f6 s' R
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();
    $ ^2 f4 W. i  I/ r4 `% U7 J( m
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
    5 S* [) z( r* r7 R5 b
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);0 E& u# n5 O! k4 R, M8 ]% C
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);0 }- `" Z: D$ g3 u2 @; E) F
  24.         lineRay->SetName("Ray");
    - s2 k2 t* u$ D) R6 l. k7 h! J0 p
  25. 4 r% d3 `% p) b" i/ `
  26.         // create the plane from the view to intersect with the ray
    # t! B9 A. r7 j, n/ ]! d
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
    + s) b4 g; r5 H7 i3 l! ?4 ~0 q
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    ! y4 C- ], d& L7 J& h1 P
  29.         planeView->SetName("ViewPlane");5 L( v8 r$ t7 |
  30. + [" z7 H; N& m4 Y
  31.         // now create the intersection point( j' \9 C7 d6 k# U7 J" m$ Q6 [
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);5 j7 z- ?- Q9 r* ~8 X
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    + x! f+ ^" P6 p
  34.         pntInterSect->SeTColor(10);
    5 a4 f: ~+ N# |$ ]' {, ]
  35.         pntInterSect->SetName("Intersection");
    # v7 {8 ]7 P2 y! b  v
  36. 6 P2 g. s- u! X7 m' \
  37.         pos = pntInterSect->Coordinates();
    3 {2 G! P) P) B( R! o# z
  38.         print("\nPMI Position:", pos);; J8 H* ?# X$ R1 D# Q

  39. 7 `. B, v, Z6 m" f+ u4 W1 N
  40.         // clean up - comment to see intermediate objects
    + e# _' ]$ R, P: n- z+ }
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");1 `% |2 O  g. n( ]
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);) d8 n/ X$ F1 \
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);
    ' g* y" b5 F: N& i) C7 Y* x( S
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
    8 ^" _: z  N' O* o; L1 i8 h! U
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);
    ' {* K" I4 r4 f$ S6 H; {+ m. j
  46.         m_session->DeleteUndoMark(markDel, NULL);4 m7 _/ [/ u1 @2 W* t: Y
  47. * ^1 W- S1 d' C1 x0 [& p
  48.         return true;: e1 X# h, u! D; c" |  h1 Q
  49.     }
    7 b( s( p' H: {7 @' m- J& v# ~( ~
  50. 0 O8 J( W" V) S3 P! x
  51.     return false;
    & q! _0 _3 K/ ^+ T! E- s
  52. }
复制代码
) A+ L8 C3 Z& V

3 ]) {6 Y0 b& l) ~2 f4 w) C8 K5 R
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了