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

[二次开发源码] 【二次开发源码】一种基于点投影,获取投影原始点的方法

[复制链接]

2023-2-28 20:27:29 1155 0

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

admin 楼主

2023-2-28 20:27:29

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

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

x
( Y& K# o2 y+ C5 l7 c

- a# \) [0 r) G( n0 ~+ Z3 c1 \, H, I$ q
【二次开发源码】一种基于点投影,获取投影原始点的方法
% K  N7 f4 E1 b  L# v+ c/ }2 I, ^8 e
- }9 k$ H& }  ]" W一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角5 q2 d1 @! D% O$ ~" |1 S
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
& [% L/ [0 L% w! p  a8 P# \- [
4 {- ]. H0 F  L+ y) C% _
  1. ; ~3 [; L& m+ v, `: p0 i
  2. //这里仅仅考虑Z轴方向
    ; \- m4 w) ^2 h$ Y+ k# i
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])) l# q" x5 q( x5 r) ~( T; v
  4. {
      n8 Q) p  y! j" w& V, W
  5.         double dotResult;+ V) d) J  x0 D; z. i+ ?
  6.         double longDistance;
    8 Q  b* g6 `7 G; x7 v( W5 U
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    6 {) ?: X0 D) B$ @6 j5 g7 D1 g
  8.         //直线距离  V7 g/ k" M5 ^  L  T9 ]9 Z# T% R
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    + Z& V8 I" N) }; l' ^( L  }
  10. 2 u  `& ^" m$ |' j
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);3 Y) [" P( W1 k) D* E7 Q
  12. . D+ J" s. {! x; N! `( _
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回6 ?9 \5 p; t  |9 m- _
  14.         {
    : \4 m  V3 x% d6 A- ?. A
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    & T$ q' [8 b* _( M: C1 l
  16.                 return;
    8 B% P1 k. ]# Q
  17.         }
    $ x/ K9 k" Z* {7 a

  18. ; o6 p+ r# K! k/ y
  19.         //计算夹角,通过单位矢量
    2 ^) \: O, ^9 @' }! E: z
  20.         //faceDir 可能反向 $ _: |$ i$ W. c# }2 t+ i
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);
    / w+ ?* K9 L+ P( L' u
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) 8 j$ v6 S: I2 _+ \/ X" H6 [
  23.         double cosAngle = fabs(dotResult);
    ! {4 q/ G) W2 i8 `4 _" w, c2 B
  24.        
    1 u  S# P! G3 I9 W! R/ ?$ Y! R
  25.         //斜边距离' c( @% K8 Q& ]+ r+ J; p: t
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    ) @# c+ {- X3 J4 G8 F2 _
  27.         {
    9 T1 i$ H  F: H( t( W2 d( p
  28.                 longDistance = deltaProjectDistance;
    7 d& t! C5 T" z* d/ S
  29.         }+ i+ x/ B. a3 z* U& i1 @' L
  30.         else
    ! G& l; ?4 G( P* E/ s# a0 ~: a  `
  31.         {+ |; w2 ]! j( m% P, U
  32.                 longDistance = deltaProjectDistance / cosAngle;! k. c& `2 ]$ |, n+ n( _( C
  33.         }  O1 ]8 x4 t7 C/ a7 m8 q
  34.        
    5 D, V/ Q# F7 U( i2 a
  35.         //这里可能出现方向相反,我们需要进行一次判定
    8 S' Z3 w, K9 k  m2 B' E( U

  36. 8 b1 ^, q3 k* Y, e
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);/ l% N3 t  E. z3 B& ~( f# l% E7 O
  38. 5 l) q5 `9 z: ]7 [2 M
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    4 |" m# j/ r, j  G- {, X
  40. 5 E. w7 p  j0 j7 F4 x
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
    : H$ v) N( g# d9 h* k- C
  42.         {# g" S9 j4 p9 e+ U' O! p2 M6 |
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);  {' g0 s9 O1 P, F! D0 L! D; `. C% U
  44.         }
    & Y( p: I; ~- M4 m

  45. 8 J5 S: l+ x" N: C

  46. ) e9 F" }" R" F* j# Y' k; i
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);' u, [( W) @8 i0 Z$ X5 I
  48. }
复制代码

' }+ ^/ g3 X! y) m6 M6 v5 K& U) a- v8 R. u/ R1 v2 c9 M
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了