PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x

* X$ N- F+ u# Y" ^. o
1 y% {0 Y* e5 x, M' A# V3 [" V% t, D" W9 P, B' K0 Z
【二次开发源码】一种基于点投影,获取投影原始点的方法; a; V9 S% v9 @, H4 i' ]
: i* r% b9 S$ }& r/ A* `
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角5 H# R0 p. d$ e# p, `- S& h
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量6 ]8 d9 G, m7 X: d: |% ]  @0 P/ `
$ o. c: |! f/ l& d

  1. 0 U- S: x5 m% l/ _' k. j$ Y
  2. //这里仅仅考虑Z轴方向
    # ^4 @3 x" h* B; S* N4 i1 k
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])+ e( s/ W% Y; a; |, J$ W1 M0 [3 n3 {
  4. {, Q. m( t) D6 X% E
  5.         double dotResult;! r. W' O- }; Y
  6.         double longDistance;
    / [% Y, G. b- u) N' w5 \0 [' f  t; x
  7.         double zDir[3] = { 0.0,0.0,1.0 };4 |' D+ T, ^+ T7 m3 |9 p
  8.         //直线距离
    - k1 [6 R. l* u! T* w1 ]: L
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    - H( e- v+ @( ~2 p* Z9 s6 A/ D

  10. . ?7 @9 d9 a0 a0 \* }
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
    7 t0 r( l( E3 Z4 `) ?) P) E( {

  12. 5 w1 i7 k9 ?, x5 i) q2 \& t
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回4 \# G" ]# Q# S7 Z3 r. M# E* A
  14.         {. I9 e- L1 z/ Q* Y/ B) H; b, S
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    " b' i/ c4 P3 r9 p  I3 Z7 H5 L
  16.                 return;
    ! W$ ~# X3 w1 b0 O) m+ i, y" T- r7 I
  17.         }
    ! \3 @/ B9 N* f, R/ N

  18. 3 B4 k* }" R6 B1 p+ M' i
  19.         //计算夹角,通过单位矢量
    0 a  A6 g& j) R7 `' k
  20.         //faceDir 可能反向 & q* e4 p, T! G/ R3 }7 [* V0 K
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);
    $ `# W: \/ P2 G1 N1 N  U( ]: A" S. h
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
      P  n& n! j& ?( I& n8 v
  23.         double cosAngle = fabs(dotResult);
    - K4 R  Z# ?2 B( ^! l' W8 T
  24.         ! o; e$ a$ J( n/ N
  25.         //斜边距离
    * ]8 v  Z( f; J7 R4 b# Q
  26.         if (EQ_is_zero(cosAngle, MINTOL))0 g& q# P6 U: s( N
  27.         {
    - A! ?  D* u9 `& n
  28.                 longDistance = deltaProjectDistance;7 b. m9 g9 G& T+ c+ A8 }$ _
  29.         }, v8 T+ G5 N. M# W2 H# T
  30.         else( R$ n7 q% x) p+ A2 r  C7 U
  31.         {5 D* ~( K' Y4 B+ H" F/ k3 s
  32.                 longDistance = deltaProjectDistance / cosAngle;) b1 `$ t6 x; N$ m  q' M
  33.         }
    4 f; x# m2 X/ \$ l1 f/ c4 \" T% Y
  34.           O8 U0 E4 g1 s
  35.         //这里可能出现方向相反,我们需要进行一次判定  ^' J) }! v3 o6 G' V% P7 O: {' O

  36. * S: m( Q3 N& g
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);, Z! n0 D1 c4 z* @5 f
  38. ! b* X8 S1 E& x7 E5 x
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    ; d* }$ F% \' z; O  a0 Q

  40. ' D1 j" }/ b! y; O) `
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
    ( t5 L8 g2 y8 h8 B2 c8 Z3 o
  42.         {+ L0 Z" n, h0 ]; u
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    8 T1 ]' n% Y9 z  H' Q7 A
  44.         }
    ! o( U5 A4 q  l+ D! G; V/ W' m
  45. ' H; V- D' W" a( v: J
  46. % U5 D+ {1 Q# v0 \
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);* K5 X7 l: [/ F7 K  T! N- K
  48. }
复制代码

9 k5 O  |: I/ s: U. k7 r! _, c$ h
( X) O7 C) I4 u2 B6 H2 E% g
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了