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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x

7 {$ W, U- d" x- L# x0 F1 a) M8 j& _/ \" \: T/ K3 `
: A4 z( H$ J- |: J; c9 P! v
【二次开发源码】一种基于点投影,获取投影原始点的方法6 G; u: q( W5 p0 p
: n/ K4 ]3 z3 L+ C- `1 P( E+ E* I0 Z
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
: }  U6 j# l" N' P然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量7 e3 K/ q+ o/ e+ W. L

2 z4 d- {+ h5 z2 l' M5 e

  1. * z4 a/ L5 [7 ]) Z6 B1 B
  2. //这里仅仅考虑Z轴方向
    - V' y/ x/ s, |* \) c
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])" E3 q0 ?9 S- _  c
  4. {/ o) ?  M* N1 S, {
  5.         double dotResult;2 J$ l- [4 W% w; A/ t
  6.         double longDistance;3 t9 x: Q* G6 z5 d9 ?
  7.         double zDir[3] = { 0.0,0.0,1.0 };# Q) i6 K' M0 }& u2 N5 P
  8.         //直线距离
    2 \& }0 f' d  X
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);% j, m4 k& X4 Z% a$ e$ ?. S

  10. ! u, r: M3 {+ s: {0 d' Q
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
      c. X; w' }, W* X5 o

  12. 8 E- S, D4 o& P7 r9 ]
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回( I5 Y3 j9 H* q, u
  14.         {
    # H* J. m3 S' m1 K$ [' u
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);) s1 x5 i: y) ~- }$ \% ]7 ^4 p' }
  16.                 return;
      P/ i0 U, q' ?; N. ~4 t
  17.         }& M$ Z7 a: m5 C

  18. 5 m1 j9 K" N+ N8 }$ D  T6 z
  19.         //计算夹角,通过单位矢量
    8 c  U& S0 ~' K' Q8 ^
  20.         //faceDir 可能反向
    : U. f" }; u* X: L! b
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);/ \9 c3 {% E0 k& X$ y3 Z
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) 9 d3 N. A9 x  D3 u
  23.         double cosAngle = fabs(dotResult);$ L0 B. K6 J" e1 t( X5 Y- D; G2 U
  24.         $ m( W. h( c& D
  25.         //斜边距离
    3 H4 V( E$ M% N) n; w4 H  C3 n1 `# O
  26.         if (EQ_is_zero(cosAngle, MINTOL))$ C9 T/ ]9 y- g' ?- Q1 f1 U
  27.         {% X  E1 U% f8 r# i  \7 O
  28.                 longDistance = deltaProjectDistance;
    1 J5 |3 ~# g) i' H" @, u- z
  29.         }  Y. c  E1 n( a0 I% I7 t
  30.         else- U, t8 X  @2 m! @; }! ]) T
  31.         {
    ( O( h  }* q" C" x) X5 h7 ]$ t1 V* \
  32.                 longDistance = deltaProjectDistance / cosAngle;
    0 k& _3 \' e5 L1 F: Z6 E3 y8 h
  33.         }) ~2 h0 F1 X* R" m( `: u  {+ I
  34.         8 {' `7 I  F% p# u0 u2 Z
  35.         //这里可能出现方向相反,我们需要进行一次判定8 o& G5 Z- `% f/ ^" T# T

  36. ( {( u& P* ~- Z
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);
    9 N" G9 i6 g( K- }

  38. / X! D, U  k  F
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    . c7 q5 W; ]9 ]6 }1 ?' y" K/ v

  40. 4 C2 [7 W5 |6 ~$ X- y) o. y
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
      G# n$ U2 Y; g
  42.         {$ `) s; O0 L/ G) S- r1 {3 T, U% a$ _
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    % T, _4 C+ n  g8 O" l- U
  44.         }3 M# z; o+ E2 w  ^% ]7 K
  45. . R) O+ m3 g& n. D
  46. $ J# N* E7 ^' P
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
    9 o$ Q2 w% ?& s  A! V3 w
  48. }
复制代码
! |# t. x+ A7 I9 \! n7 z% G

# Q" r8 H1 [3 |2 `  b! r7 C: A) Z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了