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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x

! v, V+ Q3 Y5 p- m# w$ g1 S
+ P% E) w# }" J" g1 v1 a
0 L- M- Y, E- Z$ h【二次开发源码】一种基于点投影,获取投影原始点的方法. B& l6 X, z! i7 m2 K
" H+ |! ?7 a; H- `: W
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
' S5 d( W% x- k+ v: _$ Q然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量# x6 w8 w/ C2 x/ x  }, U

, v. s; P+ q' s$ m; A. H+ Y6 k
  1. ' g, }# d! E, C5 A4 L
  2. //这里仅仅考虑Z轴方向6 B- i# W* w; x. o. D! b
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])
      |( \. Y7 \" ~
  4. {
    2 ]1 B5 z: f" d& f( \! H  O/ U3 l: V
  5.         double dotResult;
    ; B; x/ w% C: q' n  h6 J) J8 F1 p
  6.         double longDistance;' A( o6 K- `% u- N; t0 g
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    - Z5 h0 K0 J1 f
  8.         //直线距离
    2 {% ]& W; F3 Z" P
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);7 @3 B7 A- H9 v  K% U( H' r

  10. & O0 w/ E& y2 ^: j- d1 E
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
    - D+ ~6 B- u) F( v

  12. " o: c& K* f& u' X
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回, L! O0 V% f2 B! J7 p7 y
  14.         {
    ! a( d8 u- o4 p0 A+ |/ S* Q6 x( c
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    ; ?7 L% k; c2 X/ ~! @
  16.                 return;
    ; ^& r* M3 r# p* O4 D$ q+ Z
  17.         }7 `3 b% ?, x* B( D: q- P" q
  18. * j7 p, [) J. X
  19.         //计算夹角,通过单位矢量
    + }" N3 E0 n! o% x" p! A: R
  20.         //faceDir 可能反向 . F% w2 @) i' i9 O* v& V
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);& E/ ~  L3 t/ x/ X& o9 R7 b, B
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
    5 E) M5 s9 k$ N. T
  23.         double cosAngle = fabs(dotResult);+ g) H' \, n# R- C3 b# f4 |
  24.        
    7 D* p; n( [6 q
  25.         //斜边距离& t8 v' y; t& z7 V5 O* u
  26.         if (EQ_is_zero(cosAngle, MINTOL))
      x2 |; T; ]2 E6 r! r. j
  27.         {
    1 l6 h' ]' I" |5 t* Q
  28.                 longDistance = deltaProjectDistance;/ x* ^- B. u8 z2 B
  29.         }
    " y9 [" y6 v8 s7 `* E
  30.         else2 g! f/ i+ ~7 f5 A
  31.         {5 y$ _2 v! r! j, G0 t
  32.                 longDistance = deltaProjectDistance / cosAngle;
    ; o5 W% {) b; G7 v
  33.         }6 ^" f. {4 h' C9 `
  34.         0 d6 O3 i' m$ w/ H
  35.         //这里可能出现方向相反,我们需要进行一次判定
    # |* D; [( _) B# u

  36. : b* ^% B, R0 O1 T3 G
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);
    . p/ N- B7 U8 s; f; e$ B6 t  f# k
  38. * I5 H  U# b" G( m# s7 X% H2 Z% k
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    + f  C- B1 x# n! ?. r2 K5 l: ]

  40. ) |1 j' c: A( }8 L' x: u' X
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL)): c7 I' z5 f, e8 C& T9 Q
  42.         {
    6 y; g5 R2 W3 D7 [( y7 M" Z
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);+ O8 b$ G6 L" S( @/ [% _
  44.         }
    3 ~' X6 E- \; ^$ B1 ^/ t

  45. ( K; h; t  H) m% i+ @

  46. ; ~& Y7 P7 O7 b# \5 A+ f
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);* x+ O; ?2 L1 }+ ?# o: b
  48. }
复制代码
' J" p* F" R' U, |4 X. N
2 L$ I! c# H/ m9 K7 Q
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了