找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12537|回复: 3

[原创] APT刀轨数据生成NC程序C++源代码

[复制链接]

433

主题

5759

回帖

901万

积分

管理员

积分
9014271
发表于 2025-5-21 20:59:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    ) m- c5 t# H8 A
  2. int  EQ_is_ge (double s, double t);# u- R5 ?* x4 `1 Y0 f) @
  3. int  EQ_is_gt (double s, double t);
    * R9 y+ V5 U: d0 l2 C
  4. int  EQ_is_le (double s, double t);
    ! I+ f, T7 b# }1 M" t
  5. int  EQ_is_lt (double s, double t);6 L4 s- N. @) V8 L
  6. int  EQ_is_zero (double s);
    0 _  ~/ v% c$ G+ H8 N, N- j+ y; p
  7. //=============================================================' i  c$ M  [3 l, l( O# `; o
  8. double ARCTAN1 (double y, double x );5 m  D( Y5 ^% |! S7 R& m$ b, k' Q
  9. //#=============================================================
    + F& V( ^& _6 T4 y
  10. double ARCTAN2 (double y, double x );+ W+ t8 e$ L* n; Q% ?0 g1 n
  11. //#=============================================================( e% w* [9 T' I, p
  12. double CheckConst ( double angle, double constvar  );
    8 x6 f0 [8 c; y( s- \# k6 {; t0 N
  13. //#=============================================================
    2 d8 b0 G  A8 y+ B6 c) M
  14. double Check360 ( double angle );
    $ Z% h* z, X9 @3 q& W
  15. //#=============================================================
    2 H8 C6 F: \9 Q
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );* F- _1 Y) u7 V( s1 \
  17. //#=============================================================
复制代码
0 @3 i6 O' I1 ]( d' z1 ^# a9 I2 [
以下为部分源代码,用于判断,计算角度等
. r( p9 z9 C, K; r, O
  1. int  EQ_is_equal (double s, double t)
    + ^$ L( ?3 K. U0 u2 |
  2. # |& O; @8 J* F# y
  3. {
    : G: F: z$ S5 s' k( a& l  U

  4. * U% u* q6 P! Z3 }0 x
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    3 _# j& y4 C& R& Y3 h# ?; o
  6. , O3 O* V! t) f1 H  R
  7. }9 g' J. J8 t- A) n) W

  8. 5 t3 V+ t& Y& o
  9. /***********************************************************************/
    - v- O& p! W7 t! M4 C* @+ ]
  10. : T& b$ v" X( g$ t8 P$ D
  11. int  EQ_is_ge (double s, double t)
    % X  o3 L/ H" V
  12. " C8 i" I) {0 p* N, s1 A# }
  13. {& g, S+ S, d7 u; ~+ y
  14. - `# a; L- `& J( z! o  M4 L
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    # |* ~* P; \- ?( X

  16. ! o; m/ W. e, D8 r2 a1 k
  17. }
    7 ]# D# g! e- n- [* f
  18. 4 X; D, I5 z+ V( u
  19. /***********************************************************************/" f% C+ C; o& u$ x# B
  20. 6 D$ {# v2 l% g* X3 f
  21. int  EQ_is_gt (double s, double t), U- ]* f3 [9 f/ u( A* j! f# }6 M

  22. 5 z6 F- V! U! r" w" T
  23. {: S' ?. }' x/ z5 t1 ]6 a- x

  24. % K, t' r" ?3 w1 ]$ j% _
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }  J. q. C, i, d/ Z; T

  26.   y$ Y5 L* t+ [# c5 x
  27. }2 e$ S! g" g" V

  28. % |  W& X. X$ j/ x" J0 v
  29. /***********************************************************************/
    + m. \. t  v  \4 t
  30. & p5 t# ?. ]- w" @3 a1 G( w
  31. int  EQ_is_le (double s, double t)
    . q* D6 e3 Z1 U$ d

  32. " q* E  G( O( f8 O9 u
  33. {
    : y0 A- C! r/ J2 G. l" v

  34. 7 S( K+ |5 o2 s5 p3 J5 g& D) P* f$ x
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }
    & N; h5 O; t4 j" ^6 Z

  36. 2 E: a7 |* S! p4 F1 w
  37. }& L( g* y- Y2 r; A8 {
  38. 8 a+ v2 h/ L! P$ w
  39. /***********************************************************************/% @1 L2 Y3 \" E$ U" i3 H

  40. & }& a# z/ g" u. M9 M# s8 M
  41. int  EQ_is_lt (double s, double t), R5 P& ?, B$ `
  42. * C  W/ d& h6 N4 @* c; I8 F- i' E
  43. {
    4 q1 w. M7 x- W

  44. . S$ m6 r7 S' _
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }, l/ w, C8 f3 ?* X8 w

  46. 7 t) l- D+ H4 |& ]: x8 M9 G
  47. }" i! d) w1 r5 S! E

  48. 3 W+ G$ X! \. t5 r% }
  49. /***********************************************************************/& B9 v( n0 o+ e, y) j
  50. 4 s, Y" ?; g* b1 o# I. M& o; S
  51. int  EQ_is_zero (double s)) s) u4 g) `+ M- P$ Y1 V0 ?" ^8 L
  52. : r/ Q- b( A) ]
  53. {, x, C8 m: [3 Q7 c( n
  54. $ B8 j0 b' |0 S6 S2 b, ^
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }" x6 f; N( E# _1 g; @

  56. 7 j. \* O- A7 j( h; S( _* x
  57. }
    ! Y- r/ x  r7 d& b+ w
  58. 4 z+ I: }7 }) b1 j, J
  59. //=============================================================
    % @3 f- ~$ `, j( ]5 B/ n
  60. 6 y  z7 j% p9 Q) p; m+ O
  61. double ARCTAN1 (double y, double x )$ Z. a, N9 s1 O0 \5 N0 f# S; E: W6 ?: B

  62. 9 `' n" ~& [# ?2 L4 A$ V
  63. //#=============================================================
    1 W- q8 y2 D8 p" a9 y( x
  64. 3 n- Q9 {  r0 x# G* F$ |, Z9 q
  65. {) `7 K1 \; u9 Q  I3 w
  66. 3 L' D* o9 I* w1 y/ n. J# W, d+ R
  67.    double ang;" {. u) r3 ]. Q/ h- m: v

  68. ! D' L, N% I0 `, h, h( X
  69.    if (EQ_is_zero(y)) { y=0; }7 ]8 g4 R* S( ]" x( E% x
  70. 7 C2 u, L: t1 y$ ]2 l% r
  71.    if (EQ_is_zero(x)) { x=0; }
    , P) Y. \: ?( Z7 y% E4 |

  72. 9 w, p* t) k/ R, _, ~7 [
  73.    if (y == 0 && x == 0) { return(0); }
    " y  k. N8 F4 T4 |0 [. b
  74. / v) n# A- h! f( f1 V6 a0 y2 i9 e7 I
  75.    ang=atan2(y,x);$ h0 a  D9 ?  s
  76. * H6 K1 m+ R# z1 m2 n
  77.    if (ang < 0 ) {
    5 c; f# `: @0 u2 U. Q

  78. 5 S1 y2 H+ W- c8 h
  79.       return(ang + PI*2);' Z& Q1 o& \5 d- g( O

  80. 5 a2 @% I7 D" z0 g8 z$ p
  81.    }7 x, U: k2 h& m9 ]2 ]8 ^/ f
  82. 1 ]1 _& s7 _; `
  83.    return(ang);8 D3 d% w, ?7 Z6 S( G
  84. " o3 a5 |4 N: P* o, W1 Z
  85. }
    , T- d8 {% N& f% t' x! L: J
  86. 7 t1 k' b/ e( F- X
  87. //#=============================================================
    0 D- c) X- Q/ H, g8 Q' p- b% _, ~% V

  88. : u* }7 e7 d4 ~' V7 j
  89. double ARCTAN2 (double y, double x )$ p# c' U& z# x9 R$ W

  90. # S" z4 q6 c' |' K, u- H+ ~0 I
  91. //#=============================================================
    3 _" y0 y6 j# L6 t  L
  92. 9 b' x$ o/ R& ^* M4 k  D
  93. {2 m/ p& C# D! H+ J' T' w
  94. / D( @' W$ g2 L5 |
  95.    double ang;% x' [% R3 R& a/ o( j4 a9 h

  96. * ?  e1 o! j% `4 X* R
  97.    if (EQ_is_zero(y)) {
    # V) ]& A" s4 D" @. r$ j7 X

  98. 1 R, {& n4 z" V4 ~
  99.       if (x < 0.0) { return (PI); }
    & a+ H& c* a8 H" g7 e; t6 c
  100. + ^: z) P) v8 P  c- n* E: c  R
  101.       return (0.0);
    ) S; S% Z. {6 }" _2 J) \7 z

  102. ; O# h0 T- b+ T% y
  103.    }
    + u  K# H' g" T" {

  104. & y, a! e/ b1 b( b9 X6 M+ M6 t% A
  105.    if (EQ_is_zero(x)) {
    + S3 c: m( _- m& e( w
  106. $ K  F. S) L" A# T3 [2 Z6 F$ z
  107.       if (y < 0.0) { return(PI*1.5); }1 j% @, l6 _  Y& D; `, l/ o0 s
  108. ) F. M8 d& D# @2 J; l
  109.       return(PI*.5);
    , H0 B! p$ V6 D- k2 k
  110.   d$ ~0 u' n" k# T" z
  111.    }5 f6 \% z- G, c3 g4 U5 L# G

  112.   W# f4 l3 [# x* m- E8 b
  113.    ang=atan(y/x);& V1 ^# |, q, D, @0 S
  114. ) Y+ v5 H& A0 Z6 }2 M
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    8 x8 o$ q& T; s' S6 L3 g  z' J
  116. 8 B4 u2 B" h/ Z" Z5 E
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    6 v4 e( E8 {9 a1 q  i
  118. 9 I0 w& K, \  {6 D# z
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }: k% p) }3 Z3 H2 V* w: F& |$ ~& G
  120. $ ]) W* _. i0 k% O7 J3 T6 Q; ^
  121.    return(ang);) n" b& K0 W9 M: K
  122. 3 g! `' Z6 Y6 }: g6 _2 R: w& n
  123. }
    8 y  S0 w3 m- }" M- z9 [

  124. . x) i# r# }  f
  125. //#=============================================================
    1 T. X; l4 c5 `5 ~& K; D
  126. ( j$ Y! `7 [8 c2 i6 K: I
  127. double CheckConst ( double angle, double constvar  )! ?1 ~* n/ H6 l+ P0 X4 H

  128. - W- c! ?+ c% f+ R* B2 h
  129. //#=============================================================
    ; m$ n' n5 J) ^
  130. 0 k. {, ~/ p. d8 F, q$ P4 D5 i
  131. {' _" y& ~6 F4 D6 O# I# M3 c& J
  132. 5 o0 `6 J( [9 j+ f; ~+ R8 w
  133.    while (angle < -constvar) { angle+=constvar ; }
    - {" [  T8 o  R: c7 M

  134. & Z5 C& v4 K, _$ l/ g
  135.    while (angle >= constvar) { angle-=constvar ; }: @6 p" n' n* c  m

  136. ! @1 Q! \5 a1 }" ^3 Q
  137.    return (angle) ;- B! B% i% G; }. L9 W/ Q

  138. 2 b1 b9 I+ l. N1 X# U
  139. }
    * i: `! ]# S7 `9 z# a1 Z

  140. 3 p" \- v0 {2 d  q: B
  141. //#=============================================================
    8 i1 Z5 K( R& d" f
  142. - O* w2 ?$ m( }2 s1 u( n
  143. double Check360 ( double angle )& ?+ T% g& c: Z3 p! f' x) O
  144. ) |4 y6 K5 W9 \9 k. \
  145. //#=============================================================
    ( w+ |- I& ?+ d2 W0 ^

  146. 9 ~) {& R) H. b7 e. ^
  147. {) N2 u4 i0 @! T: v; ?# W

  148. / @2 b( I, W+ c0 a
  149.    while (angle < -360.) { angle+=360. ; }7 Y# K) t7 _. S( ?* }

  150. ' S& T& v) M( q/ d- E+ J) i
  151.    while (angle >= 360.) { angle-=360. ; }
    ; {0 V( ~- l) d

  152. ' J* [$ `3 ?/ U9 L; D7 u
  153.    return (angle) ;
    " Y5 o$ Z9 A6 {! y' v8 d, X# X1 m/ }
  154. 8 e: m" j. \: K6 S  ]  |2 C7 c' b
  155. }
    5 l' `% _  ^! }% }
  156. % k* l/ T* d" B$ m' d. T
  157. //#=============================================================0 L. o$ _, a/ @1 L8 d) ~

  158. * l6 U. E7 P* [
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    ( ?& P, ^" |2 H' m# W
  160. ; P0 q6 M& m; q5 t
  161. //#=============================================================; a* U1 v% m5 x3 [, w& ~3 ~% i
  162. ' @  e4 A+ }+ B- u8 j- e
  163. {# Y; y4 R4 _4 {6 }: N
  164. 7 {  E, Z3 B+ K% Q  s' [1 |, Q: D
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }% D6 U( ?  m! s' M& K" f9 J) ?& b
  166. 1 @$ ^8 R3 u* x
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }+ Z0 K- @+ h! O5 y7 o$ ?

  168. " i. ^$ U% ]* [; s8 w
  169.    return (angle) ;. m. W" J6 [% l/ S
  170. 5 _% ?" V) B6 Y
  171. }
复制代码

# a9 k% G* V1 E0 K; i8 _以下为摇篮5轴计算过程代码; ]+ H7 J4 q( c0 R, S8 `4 m
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);, c. h+ c0 R) n  Q

  2. ( d# d5 b% ?" l3 a# r; n' k
  3.          j=0.; B1=0.; B0=0.;0 }7 W0 G. D# R% O! [0 [
  4. 2 T7 V, {) T! I# i, ]: |
  5.           if (EQ_is_ge(i,0.)) {
    1 I: f$ p6 H0 q- P

  6. $ ?' c7 C- s* W  O
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }
    # ~& M( M! b% m4 O
  8. : f- `3 |& S/ m6 q  `  @% a' n
  9.           }
    9 m! X: S6 D, W0 I% F

  10. 9 B. u  r8 m1 e
  11.           if (EQ_is_lt(i,0.)) {$ U, Y4 [# x& A9 K8 g# H) p

  12. & V2 g. [( r+ H6 B' M0 d8 @
  13.              if (EQ_is_lt(k,0.)) {
    & H- T8 q' j: {1 T  u. V6 v6 x2 J

  14. ( d& H2 J$ G% L8 u) ?
  15.                 B0=atan(i/k); B1=B0+PI ;9 T: H0 W* k5 v0 z' m1 R

  16. , m" y, t5 Y8 Z) V6 _* D9 k
  17.              } else {# b  X0 Q8 J3 z" Q1 v) A3 I

  18. , `8 a1 l' \" N; U4 d8 t+ X
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }) I1 l- s8 S5 P( ]; t1 y* Y

  20. 0 z7 v3 r2 X) f' U4 v2 Y
  21.               B1=2.*PI+B0 ;+ W* t$ u6 O' Y3 I4 h6 K& w

  22. 6 x* [( Q& i6 r
  23.              }/ p9 {2 ?) \: G3 O0 q5 d* A+ m( Y
  24. & [3 \1 E' l6 r4 t. u
  25.           }
    ) G: F$ ]- a3 ^9 C

  26. ! S9 r6 U2 X3 z6 `6 Q/ `
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;
    . {/ d) B: v+ d2 E6 s! x- d9 d% W

  28. 0 `# L7 _& A+ k% n8 I& G  I
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    ; Z. N, f4 X9 s% I& b9 D
  30. , Q. {* j6 h6 t
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;6 a: t+ F4 p( i7 m( Y0 j6 D
  32. & t- {( F% a4 a) t0 j9 u! {
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
2 ?  ~7 k2 Y# Y* u
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。7 B# z0 ^) ?6 y1 c5 h6 ~! d; |

7 e. t+ V  [9 z/ r5 U, ^ 640.png ' t+ F$ x* a8 n, u( u2 `
测试结果:+ T; C, ], a5 h( _5 {& r0 |& O4 w
6420.png % t5 C4 s- Z; g) D

  M% V; Y2 R# U4 _! J: W反向测试结果 6410.png ' A. }) v3 l7 g4 C  I9 j$ e, p

0

主题

25

回帖

17

积分

新手上路

积分
17
发表于 2025-6-3 18:53:03 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

积分
332
发表于 2025-10-15 08:41:53 | 显示全部楼层
谢谢分享
回复

使用道具 举报

1

主题

136

回帖

354

积分

中级会员

积分
354
发表于 2025-10-15 12:52:53 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|Archiver|手机版|小黑屋|若枫后处理论坛 ( 苏ICP备11015087号-1|苏公网安备32059002001368号 )

GMT+8, 2026-10-13 07:10 , Processed in 0.188577 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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