找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 441|回复: 8

[分享] UG刮削算法

[复制链接]

3

主题

96

回帖

831

积分

四级士官

积分
831
发表于 2025-4-12 20:49:07 | 显示全部楼层 |阅读模式
  NX刮削后处理算法:有需要的可以下载参考看看。这些命令放在“PB_CMD_before_motion”下面

  global mom_motion_type
  global angle

  # 初始化角度
  set angle 0.0
  switch $mom_motion_type {
    "FIRSTCUT" -
    "STEPOVER" -
    "CUT"   {
        



  # 定义两个路径点坐标
  global mom_mcs_goto  mom_nxt_mcs_goto mom_prev_mcs_goto mom_tool_axis
  set V1 {$mom_prev_mcs_goto(0) $mom_prev_mcs_goto(1) $mom_prev_mcs_goto(2)}
  set V2 {$mom_mcs_goto(0) $mom_mcs_goto(1) $mom_mcs_goto(2)}

  # 计算路径切线向量
  lassign $V1 p1(0) p1(1) p1(2)
  lassign $V2 p2(0) p2(1) p2(2)
  set T(0) [expr $p2(0) - $p1(0)]
  set T(1) [expr $p2(1) - $p1(1)]
  set T(2) [expr $p2(2) - $p2(2)] ;# 特别注意2维平面 Z 向 ,这个值为 0

  # 计算投影到 XY 平面后的向量
  set T_proj(0) $T(0)
  set T_proj(1) $T(1)
  set T_proj(2) $T(2)

  # 归一化路径切线向量
  set magnitude [expr sqrt($T_proj(0)*$T_proj(0) + $T_proj(1)*$T_proj(1) + $T_proj(2)*$T_proj(2))]
  set vector_axis(0) [expr $T_proj(0) / $magnitude]
  set vector_axis(1) [expr $T_proj(1) / $magnitude]  
  set vector_axis(2) [expr $T_proj(2) / $magnitude]  

  # 设置初始方向(安装刀片或镗刀初始朝向位置,1,0,0表示朝向 X+
  set direction(0) 1
  set direction(1) 0
  set direction(2) 0

  # 计算两个向量的点积
  set dot [expr ($vector_axis(0) * $direction(0) + $vector_axis(1) * $direction(1) + $vector_axis(2) * $direction(2))]

  # 计算夹角余弦值 0 ~ +180
  if {$dot > 1.0} {
     set angle 0.0
  } elseif {$dot < -1.0} {
   set angle 180.0
  } else {
     set angle [expr (90.0 / asin(1.0)) * acos($dot)]
  }

  # 向量叉乘
  set cross_product(0) [expr ($vector_axis(1) * $direction(2) - $vector_axis(2) * $direction(1))]
  set cross_product(1) [expr ($vector_axis(2) * $direction(0) - $vector_axis(0) * $direction(2))]
  set cross_product(2) [expr ($vector_axis(0) * $direction(1) - $vector_axis(1) * $direction(0))]

  # 判断反向角度 0 ~ -180
  set pot [expr ($cross_product(0) * $mom_tool_axis(0) + $cross_product(1) * $mom_tool_axis(1) + $cross_product(2) * $mom_tool_axis(2))]
  if {  $pot > 0.0 } {
    set angle [expr -1 * $angle]
  }

  # 控制角度在 0~ 360
  set ang [expr fmod($angle,360)]
  set angle [expr ($ang < 0) ? ($ang + 360) : $ang]

MOM_output_literal "CCCC====$angle"

        }
    default {}
  }

9

主题

523

回帖

1万

积分

少将

积分
19411
发表于 2025-4-12 22:15:42 | 显示全部楼层
感谢楼主分享

41

主题

1456

回帖

7568

积分

少校

积分
7568
发表于 2025-4-12 23:43:33 | 显示全部楼层
感谢楼主分享

7

主题

808

回帖

6428

积分

上尉

积分
6428
发表于 2025-4-13 08:38:47 | 显示全部楼层
谢谢分享

1

主题

92

回帖

404

积分

二级士官

积分
404
发表于 2025-4-13 09:04:19 | 显示全部楼层
感谢大佬

0

主题

27

回帖

133

积分

上等兵

积分
133
发表于 2025-4-13 09:29:23 来自手机 | 显示全部楼层
感谢分享

0

主题

5

回帖

37

积分

列兵

积分
37
发表于 2025-4-13 09:33:06 | 显示全部楼层
牛叉啊  论坛就是大哥多  看不懂    不妨碍点赞

2

主题

18

回帖

85

积分

上等兵

积分
85
发表于 2025-4-14 08:44:28 | 显示全部楼层
感谢分享

8

主题

711

回帖

8453

积分

少校

积分
8453
发表于 2025-4-14 09:00:23 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2025-4-23 04:13

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表