首页
学习
活动
专区
圈层
工具
发布

APT刀轨数据生成NC程序C++源代码

APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。

需自行编写刀轨数据的读取与处理。

以下仅为部分代码

以下为头文件部分源代码

int  EQ_is_equal (double s, double t);int  EQ_is_ge (double s, double t);int  EQ_is_gt (double s, double t);int  EQ_is_le (double s, double t);int  EQ_is_lt (double s, double t);int  EQ_is_zero (double s);

//=============================================================double ARCTAN1 (double y, double x );

//#=============================================================double ARCTAN2 (double y, double x );

//#=============================================================double CheckConst ( double angle, double constvar  );

//#=============================================================double Check360 ( double angle );

//#=============================================================double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );

//#=============================================================

以下为部分源代码,用于判断,计算角度等

int  EQ_is_equal (double s, double t){ if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }}/***********************************************************************/int  EQ_is_ge (double s, double t){ if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int  EQ_is_gt (double s, double t){ if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int  EQ_is_le (double s, double t){ if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int  EQ_is_lt (double s, double t){ if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }}/***********************************************************************/int  EQ_is_zero (double s){ if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }}//=============================================================double ARCTAN1 (double y, double x )//#============================================================={  double ang;  if (EQ_is_zero(y)) { y=0; }  if (EQ_is_zero(x)) { x=0; }  if (y == 0 && x == 0) { return(0); }  ang=atan2(y,x);  if (ang < 0 ) {     return(ang + PI*2);  }  return(ang);}//#=============================================================double ARCTAN2 (double y, double x )//#============================================================={  double ang;  if (EQ_is_zero(y)) {     if (x < 0.0) { return (PI); }     return (0.0);  }  if (EQ_is_zero(x)) {     if (y < 0.0) { return(PI*1.5); }     return(PI*.5);  }  ang=atan(y/x);  if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }  if (x < 0.0 && y < 0.0) { return(ang+PI); }  if (x < 0.0 && y > 0.0) { return(ang+PI); }  return(ang);}//#=============================================================double CheckConst ( double angle, double constvar  )//#============================================================={  while (angle < -constvar) { angle+=constvar ; }  while (angle >= constvar) { angle-=constvar ; }  return (angle) ;}//#=============================================================double Check360 ( double angle )//#============================================================={  while (angle < -360.) { angle+=360. ; }  while (angle >= 360.) { angle-=360. ; }  return (angle) ;}//#=============================================================double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )//#============================================================={  while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }  while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }  return (angle) ;}

以下为摇篮5轴计算过程代码

       i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);        j=0.; B1=0.; B0=0.;         if (EQ_is_ge(i,0.)) {            if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }         }         if (EQ_is_lt(i,0.)) {            if (EQ_is_lt(k,0.)) {               B0=atan(i/k); B1=B0+PI ;            } else {             if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }             B1=2.*PI+B0 ;            }         }         if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;         B2=(-1.)*B0*(2*PI-fabs(B1));         ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;         ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;

通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。

测试结果:

反向测试结果

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O4O_8M1C03VHU-cH_oAniivg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券