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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x
# z  G+ [! ]1 n& F3 I/ I2 C2 f

  U/ _  |& A7 t3 C* s, \( ^8 ~+ z, K/ e- I: q/ P+ d0 F9 ?
【二次开发源码】一种基于点投影,获取投影原始点的方法
4 p# o, U/ c" g& R6 }3 o; Y. h- e6 @4 ?" U3 I4 n2 C  q
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角+ n( B. V( ?# A- L7 g
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量  e# t: Z- k+ I3 [" Q
$ `# ]+ M* B0 `4 w1 R' Q9 b

  1. $ `  L" Q% p# O0 `
  2. //这里仅仅考虑Z轴方向
      P3 F7 y, E) J, P( J- X
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])4 _- C5 y9 P! O% q
  4. {
    ! y, ?# n9 v8 o2 I
  5.         double dotResult;
    $ V) F  ^- F9 j$ t! j; Q- A
  6.         double longDistance;
    " O8 @' r% @4 O8 R9 [. F
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    3 d' C7 \9 h" G# X. L- B- ]  q
  8.         //直线距离1 E0 r0 a$ n% Q5 ?- N8 B8 }
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    + I1 J  G" r# {# ?" k  z

  10. 0 \, [( D; _( h& Q6 H' ]1 k
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
    7 F" L; W7 g9 b6 j& |, X% P

  12. 4 F3 ?4 f6 }! C
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回3 A3 a) o( @1 Q2 P3 v
  14.         {
    5 J* Y- y$ a# M3 z, ~/ W+ a0 o
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    : N$ r; X* E+ y% j5 ?
  16.                 return;
    5 r( k5 U, Y9 t+ v% L
  17.         }5 Q2 N$ Z$ {: l- O1 O! I: ]5 [

  18. 0 s& t; u1 O6 `  b. p  \( K
  19.         //计算夹角,通过单位矢量
    # N! Q2 ~  }8 B# u, f: B6 _
  20.         //faceDir 可能反向 # L  i) \/ k# ?: K* [" B, w! q
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);2 b3 t: r- l4 J" q4 P
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
    3 K! n8 @1 \) I7 N  K: p
  23.         double cosAngle = fabs(dotResult);
    4 [' I. X2 O( @9 ~4 N
  24.         3 W1 {3 J/ g* R% C/ t
  25.         //斜边距离
    8 }5 E# Y  Z) p! T
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    8 A$ C. k. M9 T  a: l# P4 \2 ]! u: t) `
  27.         {3 m! d2 C$ C- }3 P
  28.                 longDistance = deltaProjectDistance;1 A+ l8 D, n4 [* e4 s4 g
  29.         }
    5 w; I3 P/ m7 ]& C$ r
  30.         else2 a- ^# ?) j% `) i
  31.         {
    & \, L# @( A* y. Z6 k& J3 V, A
  32.                 longDistance = deltaProjectDistance / cosAngle;9 p+ x% n1 h& r6 }2 a& |
  33.         }
      A5 G$ b5 B, `6 p8 I2 E. G1 I/ s$ U, E
  34.        
    , m7 P* g. u" `, _& l4 X/ w  {
  35.         //这里可能出现方向相反,我们需要进行一次判定# t* t2 R$ Z0 l; W& ^7 f

  36. ; ~+ t7 _5 {7 P* j! h  Z
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);: S: T- s* Z7 F/ T
  38. . y8 [( ^5 G) N) e  b
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    / S5 X2 ], k) V% s

  40. : q5 G8 F  ?* y3 P9 D
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
    " ~1 J  ]0 i) ^; Z
  42.         {
    % u; t: o; h6 c
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    $ I1 |+ u- G) J& M; a+ Y6 [/ w
  44.         }
    ; s% V4 L+ e+ A6 H  Y* Z
  45. 5 Z$ J$ D2 E9 n0 E
  46. : _, A+ |4 j7 ^$ Y1 ]/ Y
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
      a& u- Q) `+ V0 @: q
  48. }
复制代码
# z% P# J+ o& w$ Z0 P% D4 K
6 G; `, H- X0 X/ f3 r7 v
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了