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 375 0

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

admin 楼主

2023-2-28 20:27:29

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

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

x
! X% q1 S8 j& s/ A( w7 e6 Q! w, i

& l* C9 R) k' }& Y
' k7 L  I9 r3 Y8 D% F! C9 Z+ Q【二次开发源码】一种基于点投影,获取投影原始点的方法% a3 h& t8 a/ u5 c* D

2 C) i1 p1 T  p8 C一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
- U3 ]  N: w* w% b) D9 w' R然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
  [! T( A) j$ {8 {4 K4 }- A
$ K- d7 N/ e& v& l) C
  1. 5 M( s6 ^1 L) {( Y1 ~8 F; T3 f3 o
  2. //这里仅仅考虑Z轴方向) O8 o: m) J& r- r3 P
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])
    ( W/ x5 }; N4 W* R3 i5 k
  4. {& G6 U% T1 v) q9 @. P7 H+ y2 P. Q
  5.         double dotResult;7 d# D& K4 }$ E
  6.         double longDistance;
    5 S9 j2 D% S" ^* ?3 w
  7.         double zDir[3] = { 0.0,0.0,1.0 };% [$ [& E, n$ c  u- i
  8.         //直线距离
    4 b9 s& m3 R) u/ ~. {" p9 @6 v
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);- w; ^+ L7 k; N2 ]2 H2 B! T9 f( L7 r

  10. , i! b3 {+ m/ k- H
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);: e2 A& n" w" j
  12. ' F2 x8 u2 `- s6 ~& j% C; M
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回
    + F3 n6 h$ h2 _) @# B
  14.         {* {( V* U: K3 Q0 Z( p; l1 z
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);) x" J( ]9 \( o- j  f' z
  16.                 return;: R* c+ x9 l+ b# e( L4 H, Q) D" \
  17.         }; F" [" ~$ [- a: b1 a) x3 G
  18. 8 `% l$ Q6 G( d" d
  19.         //计算夹角,通过单位矢量- }" \+ \1 Q2 u6 Q2 z8 H
  20.         //faceDir 可能反向 . M  B9 O; E2 S: P
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);
    . `6 _1 m3 L' T  D. }5 g
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
    / x: M9 u6 m  W3 ~% z+ Z
  23.         double cosAngle = fabs(dotResult);- d+ Q6 A, B' x9 A% d/ H
  24.        
    " b7 X- @- s6 [, f7 w
  25.         //斜边距离* P- l0 }$ r$ W: C0 r$ I! z
  26.         if (EQ_is_zero(cosAngle, MINTOL))/ H$ P1 G6 N+ a8 A8 p0 q
  27.         {0 m  \' d; H$ Y0 j# N
  28.                 longDistance = deltaProjectDistance;
    % Q% @3 O% C7 `. F
  29.         }
    # B" P5 p: H8 G! ]
  30.         else: Q* P6 [/ e/ w
  31.         {7 Z8 p0 I1 ]% C/ [5 |7 k6 e3 X
  32.                 longDistance = deltaProjectDistance / cosAngle;
      H* g% g' Z7 f/ I9 g4 w# U
  33.         }9 \1 Q8 f9 r7 c6 U
  34.         : Q4 w% U4 ?: _
  35.         //这里可能出现方向相反,我们需要进行一次判定$ q! }# H% _/ Y) U) L  L
  36. : ]5 r, |  z7 ]& D
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);
      |' |+ U3 s6 A+ J. G' E( W

  38. # `/ B0 O$ ?& H& M" }! `
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    % q$ {. x- M  I( g7 Y

  40. 4 B# n# V! ?8 u# L$ t
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
    ' l" F2 T% W3 k, z( E5 ^+ o
  42.         {; s& z1 J: A  o& E5 x# U6 ?- |
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    4 z* j6 r6 _$ d5 i5 V6 O7 d
  44.         }
    9 B; m  y- C, {7 w- B
  45. ' W3 e! G6 `7 H5 I5 B# p6 }  P
  46. ' l  x5 V. C# w# [7 M5 \6 h
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
    6 f* C. n6 ]. M9 P9 L% ^5 j' H
  48. }
复制代码

$ m$ M) ?9 B$ [% a: C4 A; M% k; ]$ j7 L: s4 f9 |" y: q, a
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了