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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x
1 c; W3 k: W8 a: q* m, X

5 U& ?: Z" j% O2 A6 _; U9 _: M; \
【二次开发源码】一种基于点投影,获取投影原始点的方法, B0 |& g. [( f; y' ?. ?
( m- _7 U  x& Z& h/ i
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角7 Y, e- u2 X* r/ S% e% t* }
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
- D9 W* ^4 T" M8 a( \2 Z; w8 K/ j
. n* S4 y4 p9 U6 P" g

  1. / E  }% v% x/ R. n+ y; O
  2. //这里仅仅考虑Z轴方向4 `/ c5 {/ j# c+ R, _6 {
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])
    0 t8 u" \4 J4 C) c# @; v
  4. {+ ]; o1 U: g2 _2 }' b8 }
  5.         double dotResult;) l7 j( v& v6 ~0 y3 d0 v) M/ l
  6.         double longDistance;
    + N. y. p* {; _
  7.         double zDir[3] = { 0.0,0.0,1.0 };
      N% Z6 W; W+ J" r% @9 E
  8.         //直线距离* d4 l$ w3 o: G$ a% ?* J! C8 w- N
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);7 K4 @# i4 `1 x2 V9 h0 N( a6 Y1 ^
  10. 7 p" e6 g* [' W5 u) H' _
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);2 u6 f  O. J; }9 Y9 V7 J
  12. - C0 X/ R4 ?) d/ W1 N/ G" x! T
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回! c, R, |; P( j+ c* h
  14.         {; I( F2 o1 G! E9 ^5 O
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);3 [- A* \8 z! J9 B4 C
  16.                 return;/ M' D  p: x( y6 a
  17.         }
      {8 t( S+ F5 j/ M9 U$ A
  18. 7 l1 P' ^* U8 O& [0 V; e8 U7 {
  19.         //计算夹角,通过单位矢量
    6 j! j% M/ G, K1 T, H! z7 @8 R
  20.         //faceDir 可能反向
    - n; Q& B3 E# _& }. U* L, b% W
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);
    - K  S: B- B& C4 \! j' g
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) : c0 Z. G* M5 k% D" ?% K
  23.         double cosAngle = fabs(dotResult);
    : z9 F/ E* @; N" t
  24.         % k5 {* t- ^/ r0 _( }7 Y/ O" I2 I8 `
  25.         //斜边距离6 N" b* u7 t- d
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    ' r  b, F1 n: Z- t3 ~7 V
  27.         {
    + @  o$ E+ }* x
  28.                 longDistance = deltaProjectDistance;" E1 U8 k5 j5 G1 f" D. x4 Q
  29.         }
    ) d1 T7 |: |  A( d4 W% P0 s
  30.         else
    % Q- v' r# F4 t& Q8 I; P' Q3 [" V
  31.         {
    , K) K: d$ ^; k2 U- n7 f
  32.                 longDistance = deltaProjectDistance / cosAngle;5 h9 h1 \7 M* I0 j9 S; W
  33.         }  w4 }! o2 t: ~; q# @
  34.        
    2 r2 U1 D9 S9 q5 I
  35.         //这里可能出现方向相反,我们需要进行一次判定5 r+ @- l- U( |7 g: o/ j

  36. 9 I: m) b( h8 N0 A
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);. z' Z1 R* P3 g# Y/ P' ?8 k

  38. , ]$ [5 W+ G' e, D0 F* E
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);  v: d; @4 O9 R5 J0 e
  40. - q7 F4 u. ^' B: N1 Z
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
    7 N5 m/ c8 h  A% v1 c( T
  42.         {
    # P: i: }0 ?( G. L  q' R! a/ A
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);8 @; [$ ~8 {2 |: {, ^; H
  44.         }
    8 {! T7 U* q/ P

  45. 8 R8 M7 j! p% Y5 X8 A: G
  46. 4 i- k- b$ f; N# }; S7 w
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
    " Y  ~4 h( |$ g0 a, _
  48. }
复制代码
7 i* K1 Z9 b/ m* z# b
) N- a+ e' u) f- T" 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二次开发专题模块培训报名开始啦

    我知道了