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

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

[复制链接]

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

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

admin 楼主

2023-7-15 12:08:47

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

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

x
, x' }4 \: }* J& k) l* s; f
4 C2 P1 f. P8 l# \0 t
如何获取选择点映射到视图空间中?源码分享3 Z; C. ^9 u3 r! r' s5 `& k& V- U7 z
* L, P& k/ f  z! ?* [7 E
  1. //------------------------------------------------------------------------------: B6 |( R$ H/ z# \% g/ p
  2. // Select Screen Position and map to Modeling View Plane, q' D' M6 E# l5 P% o: [
  3. //------------------------------------------------------------------------------
    : {, v+ u, r/ @+ D5 N
  4. bool GtacPmi::SelectPmiPosition(NXOpen::Point3d &pos)
    8 b5 [3 R* c- f: O$ C6 G
  5. {
    : ~. q! [0 q, j3 G4 {
  6.     NXOpen::View* myView = NULL;' i! W' F' f  @- i7 V0 m- J
  7.     NXOpen::Point3d myCursor(0, 0, 0);8 V7 L2 k3 }5 N

  8. " c7 X7 I# C0 m" H1 E  e
  9.     NXOpen::Selection::DialogResponse myResponse = m_ui->SelectionManager()->SelectScreenPosition("Select Screen Origin", &myView, &myCursor);$ ^2 U* A/ @) D3 b  _: k8 P+ T
  10.     if (myResponse == NXOpen::Selection::DialogResponsePick)
    7 N, M* f( E# ]: z- K
  11.     {
    % ^- n4 L; U! O: u$ K! _
  12.         // obtain the current default annotation plane where PMIs are placed on
    3 {- `# g2 M, [
  13.         NXOpen::Xform *xform1;0 {6 ]8 n, I- j& H% `
  14.         xform1 = m_wpart->Annotations()->GetDefaultAnnotationPlane(NXOpen::Annotations::PmiDefaultPlaneModelView);
    ! L1 }9 s  B  j" F7 @
  15.         NXOpen::Matrix3x3 vmxDefaultPlane = xform1->Orientation();1 O/ V" x# x+ t
  16.         NXOpen::Point3d ptDefaultPlane = xform1->Origin();
    / `6 C' d8 R( a0 O7 r
  17.         NXOpen::Vector3d vecDefaultPlane(vmxDefaultPlane.Zx, vmxDefaultPlane.Zy, vmxDefaultPlane.Zz);- d2 L8 }, y4 z8 N# u
  18. ( B8 Z7 z9 g7 t8 {3 p
  19.         // create the ray 'into the screen' at the selected cursor position  a8 j; U8 m5 f- T0 E" k3 }! u
  20.         NXOpen::Matrix3x3 vmx = myView->Matrix();6 U% b" a$ z" m1 {
  21.         NXOpen::Point3d p1(myCursor.X - vmx.Zx * 1000, myCursor.Y - vmx.Zy * 1000, myCursor.Z - vmx.Zz * 1000);
    ) @. {* a! Z0 E$ n. G0 Q
  22.         NXOpen::Point3d p2(myCursor.X + vmx.Zx * 1000, myCursor.Y + vmx.Zy * 1000, myCursor.Z + vmx.Zz * 1000);; {0 w1 M* v# f3 z) ~
  23.         NXOpen::Line *lineRay = m_wpart->Curves()->CreateLine(p1, p2);
    - B. F6 s3 U+ D2 {% q
  24.         lineRay->SetName("Ray");& ]6 Z* y: b9 }
  25. 3 x; R: Z) b) G) q
  26.         // create the plane from the view to intersect with the ray
    / O% S( ^, r8 c, A- l$ \+ Z1 X/ i
  27.         NXOpen::Plane *planeView = m_wpart->Planes()->CreatePlane(ptDefaultPlane, vecDefaultPlane, NXOpen::SmartObject::UpdateOptionWithinModeling);
    ' ^4 h3 X- a. {
  28.         planeView->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    ( {: G# v2 x/ h; p+ o0 Y; T
  29.         planeView->SetName("ViewPlane");
    . U: }, U3 H9 N- L1 m
  30. . N+ b2 N/ \& K! B) a
  31.         // now create the intersection point& I( ~, c3 d, v4 F
  32.         NXOpen::Point *pntInterSect = m_wpart->Points()->CreatePoint(planeView, lineRay, NULL, NULL, NXOpen::SmartObject::UpdateOptionWithinModeling);
    4 \5 f9 w. _* r" a
  33.         pntInterSect->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);
    * W7 `  T* R' m6 X2 g  D# @
  34.         pntInterSect->SeTColor(10);
    + _, `9 Q. l6 n' p" j7 R5 X
  35.         pntInterSect->SetName("Intersection");# g# {  g/ f4 U+ E1 m2 ~
  36. * `# @4 D; E! |+ M& j( V* y
  37.         pos = pntInterSect->Coordinates();
    $ d/ u( D4 z3 l0 H/ O( z% b
  38.         print("\nPMI Position:", pos);. N: u; e, j% ?
  39. 4 N" @/ r: o, a4 `: [
  40.         // clean up - comment to see intermediate objects
    1 n, c$ p4 h4 {& I
  41.         NXOpen::Session::UndoMarkId markDel = m_session->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Delete");4 X+ Y; z* \+ Z0 [3 |7 m/ E  \
  42.         int nErrs1 = m_session->UpdateManager()->AddToDeleteList(pntInterSect);, C  C& w; |1 p* L
  43.         int nErrs2 = m_session->UpdateManager()->AddToDeleteList(planeView);- J% |4 n/ T6 {9 X* v
  44.         int nErrs3 = m_session->UpdateManager()->AddToDeleteList(lineRay);
    % @9 D: k5 z! n- }0 c
  45.         int nErrs4 = m_session->UpdateManager()->DoUpdate(markDel);" Q( n) M$ H& l, N  w
  46.         m_session->DeleteUndoMark(markDel, NULL);3 [+ r9 |+ E& U2 N

  47.   R; ~+ W1 s( Y' w# a9 w% M
  48.         return true;
    . K0 W* S  o* Y1 i
  49.     }
    , t# p0 l# r  J

  50. 4 D7 |/ Z$ k% X  n1 N. j
  51.     return false;! _2 a2 U! }- R
  52. }
复制代码

/ N  x! Y) ^0 Q( a! k
/ u0 y" e0 c5 c' ]! \
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了