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-2-28 20:27:29 893 0

admin 发表于 2023-2-28 20:27:29 |阅读模式

admin 楼主

2023-2-28 20:27:29

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

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

x
6 Z1 D3 T" x- K: R7 |

8 X; H; m4 L* j. x: Q7 [- e/ I. G+ U1 ~: z/ w" N" G1 _" E
【二次开发源码】一种基于点投影,获取投影原始点的方法
9 L7 x8 r+ s3 {8 }, m
- l9 }/ Z& Y' ~5 |9 s0 |一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
+ }& d) Z9 A7 Z# |4 p5 d+ G! e+ W然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
$ j% H0 \+ g( l3 m/ q& ]& _: N
, J) L+ F2 g& h/ d& Z
  1. : ], k* G6 O6 ]4 f% L
  2. //这里仅仅考虑Z轴方向
    , H9 x2 V! ~5 \* T) E1 ^
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])
    7 ]! ?6 J% i- D/ |) k
  4. {8 }& _; U! U! [5 ]4 T
  5.         double dotResult;7 |7 v% `1 J7 y) s- _
  6.         double longDistance;
    * i2 L+ L* f) h" K) Y4 b' o
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    6 U! j% G$ F: h7 u% r$ |" Y
  8.         //直线距离% W5 X3 r( G/ l" d
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    ! e7 i0 [. C. I: g2 A

  10. " V0 `; [) Y3 O$ k# `! T. H- C
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);& m5 G" P0 q5 E9 F4 q7 y
  12. 2 }% y0 s& j' {; q3 v
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回
    4 }3 L4 E. |* Y
  14.         {
    # A5 h( z3 G+ y' x+ K' @- {& P
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);4 `6 }8 S" g0 n# T2 c
  16.                 return;8 U* G+ i# h4 b9 u% j
  17.         }6 q9 y4 n1 w  n7 B" Q( f& T% k

  18. % L0 E, p7 ~+ {) q4 V6 V% l
  19.         //计算夹角,通过单位矢量
    % d1 i$ p5 T; z( L  M5 \
  20.         //faceDir 可能反向 * Q1 Y% S* `2 x& X; X( t% a
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);
    / ~, m! O) T2 }/ o: D" _- y7 O0 p7 b
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) # D# e+ K7 w% t+ Y' D9 J3 H2 ]
  23.         double cosAngle = fabs(dotResult);1 c6 d* ]% l4 P* {8 }
  24.        
    3 W3 `( R* X5 A3 g0 J" w; l% ]5 a. O
  25.         //斜边距离4 F' S) X) d( M8 J8 W4 ^
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    5 i9 F- ]$ z$ m
  27.         {
    - S5 N+ r% I8 v  [, _# y' z; }( R2 _
  28.                 longDistance = deltaProjectDistance;9 n0 P9 L' O" `5 ~! ?
  29.         }
    $ Z. s1 D- ~0 ^
  30.         else, x' R  n) v! n: `2 Z
  31.         {
    % j! `" C" [+ d8 m, N
  32.                 longDistance = deltaProjectDistance / cosAngle;
    : c7 O9 }! C6 ^. `& h( E
  33.         }$ _3 E3 `2 y8 x7 h, z4 q
  34.        
    # F/ s: Z/ O/ p6 G/ W
  35.         //这里可能出现方向相反,我们需要进行一次判定. L( T+ a7 e) @) [# m9 q
  36. 3 P/ P. I  m* |1 V# o* g
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);7 b  ]$ ]3 a* B
  38. 3 v. V0 r* D0 i( v
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);2 E% R& l. S* ~3 `/ ~9 Y% H  L
  40. " [2 p4 a; c" n/ k
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
    " B" y& A; t4 y9 ?7 l0 G, b, C9 p2 p
  42.         {
    " c" @! V2 m( i% {
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    * I% ]0 n# `5 D/ Y: O
  44.         }
    ' K& d# P5 i/ P

  45. 5 D! z. w# _8 U  d# G# y% H! ^% ?

  46. ; `+ h8 y+ {# N' `8 I% U
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);) f3 W  N- S* ~, m+ s
  48. }
复制代码

* v1 g) v/ D3 T3 e' p  z8 s1 l& a! c3 d9 r7 q* k
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了