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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x

8 q2 ]( i( I0 V, N1 R6 E. z) m6 M& X) G6 p$ u2 y$ W0 Q+ ~! w+ t3 {

- x& I: f( A# @& V, N% p5 k* l【二次开发源码】一种基于点投影,获取投影原始点的方法- r# o: M; g( E4 j

. D1 z) Y- \! }! D0 a8 j一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
3 O& C3 I6 Z0 o' K+ w" T0 ~. a% L2 z然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
) p: u8 @7 r: z! y
* @  {" m! V. C3 E
  1. 5 }- n; M" Z- f
  2. //这里仅仅考虑Z轴方向9 V+ s2 _! S6 @. k+ ]. S
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])# |9 l& H" I: \# i0 t# ~
  4. {
    ) N) Q1 ^/ T0 R  y4 P8 [; c% y
  5.         double dotResult;" a& R# }" v; q  i* Y
  6.         double longDistance;
    / b6 M8 I& Q- `  ?
  7.         double zDir[3] = { 0.0,0.0,1.0 };1 w, V( a* y: M8 e5 s0 l3 a( {: T+ D
  8.         //直线距离
    * u* z- m& Q- W8 V- G! i; e
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    ( k! l  [0 U+ _& _" K: D
  10. * |2 I" Q6 X4 w# ^, e
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);, G1 \+ t7 ]' u2 m/ ]* B, G1 ], z

  12. + q* W' m  F9 N- ?
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回* h. n1 |6 t! D" S' i2 Z
  14.         {1 H0 ?( a: {; x, _  z6 J: k3 `# \
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);" Y8 u  y3 V4 @. E3 w
  16.                 return;
    / y% y0 Y9 {# K  T6 v
  17.         }
    " @$ |+ w5 c5 [3 y1 {( ^* C

  18. * W- s+ k) x9 ?, {- o
  19.         //计算夹角,通过单位矢量; v. I& n9 O5 w) b( k, Z
  20.         //faceDir 可能反向 9 \' i9 k! y) ?" m- O$ W9 F! c7 j
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);2 B7 P0 u; P# z0 o9 a3 E
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) & n' a( K, q$ ]% N$ ?6 w3 Z
  23.         double cosAngle = fabs(dotResult);* z1 H+ V7 P7 j+ v1 N9 V
  24.         2 J* M  |0 G+ p% h
  25.         //斜边距离
    0 ]9 ~' f9 ?  Q- i$ d& b
  26.         if (EQ_is_zero(cosAngle, MINTOL)). R1 v3 Y- X0 D( n9 M4 X
  27.         {' }2 _4 d$ s8 v) q5 a2 S
  28.                 longDistance = deltaProjectDistance;
    2 ^" y6 A6 e4 v& ^* B/ q7 P
  29.         }4 B9 A0 r5 e. V# p- {6 n- \, h$ l
  30.         else
    # ~7 e2 O: b) O
  31.         {
    & R3 F/ ?/ c% D, w
  32.                 longDistance = deltaProjectDistance / cosAngle;
    $ ]. O0 x1 I5 p! ^
  33.         }* M6 e; D4 b* F) m; f
  34.         4 J, G8 c3 B( h! e% X3 S
  35.         //这里可能出现方向相反,我们需要进行一次判定9 s; l0 @6 Y, i; a$ v% d
  36. " ^% V9 |  G- Q% B( ?
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);
    5 f0 v, J1 g0 L& w4 y

  38. ) h* T9 g7 H- j9 ~( Z
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);, p4 }- x5 F1 M

  40. 8 `4 V. q- K; I& Z" ]
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))& p/ @, \9 G; Y' T  |  ?
  42.         {
    6 y5 W8 p2 d: N1 W) ^
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    6 @' L7 ^: m0 {1 {9 v
  44.         }$ d3 b# q2 i  E

  45. 7 g* v" @+ N7 G7 Z; g

  46. " P; D* ]7 W6 r- ]# ^0 R
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);8 {6 y5 |  t1 b1 _- r: o$ `# o" S
  48. }
复制代码

' G, \" ^+ s6 e* B3 z2 R% x8 [8 U7 z4 M$ u" M) a0 n$ t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了