找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7399|回复: 3

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

[复制链接]

433

主题

5757

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
      D% U( H+ i6 \# S, n2 z" e
  2. int  EQ_is_ge (double s, double t);) n: T0 N5 Z% V4 a+ \
  3. int  EQ_is_gt (double s, double t);) m) r/ I. g0 m% ?+ z9 L% `
  4. int  EQ_is_le (double s, double t);6 l* o9 G5 d* k; p
  5. int  EQ_is_lt (double s, double t);0 }& F6 e+ `, ?1 V) A
  6. int  EQ_is_zero (double s);
    - K. M9 k  P2 i$ D2 C
  7. //=============================================================
    ( l6 f' V( h+ l, n; Y3 t2 V/ C
  8. double ARCTAN1 (double y, double x );5 R. Z- J6 h8 n
  9. //#=============================================================8 o# C, q9 |0 l5 j' }
  10. double ARCTAN2 (double y, double x );6 Y$ Z; P- p* D. a$ Z$ {8 H
  11. //#=============================================================
    + W2 Q9 L$ q9 K9 ?* A) R
  12. double CheckConst ( double angle, double constvar  );/ A7 F8 A' B' t+ g
  13. //#=============================================================
    ) d* g, v' M+ \+ z  ?
  14. double Check360 ( double angle );
    ) ]# |. s' i1 U5 I
  15. //#=============================================================
    & r& h. s7 x7 L& J) g
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );! x) U+ }9 B) A2 M/ O% S' s7 u
  17. //#=============================================================
复制代码

3 q! U7 d' Q' d, G以下为部分源代码,用于判断,计算角度等2 x3 o, n. B# O; s9 y
  1. int  EQ_is_equal (double s, double t)
    & j* N5 G; ]/ x1 i  P7 K& X

  2. ; a( y- T! w/ ~6 p, K
  3. {
    9 U% m  y! {% h0 S! }! g6 q% N9 d
  4. 9 m* s# A7 \. ^: I( i" k
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    0 E) p1 y# i; [' J1 u* B$ |

  6. % h) a. T' P: T9 y
  7. }( \( e; O0 }1 L, J
  8. . r3 D, t! d2 L$ D1 ]; S& @4 s% J4 ~
  9. /***********************************************************************/
    . h! M5 |1 y- t  d. \& R- f
  10. 0 _( \+ J* k; a3 J% O
  11. int  EQ_is_ge (double s, double t), G5 L1 b7 A- P: Z

  12. : w  N) j8 D) a* o3 p6 d" n8 P
  13. {
    " I% {" `7 D0 z3 R/ g5 c3 R9 h
  14. & \) v3 f5 M( \4 k
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }( z3 U) a( a9 n3 ]& q7 I$ o

  16. 2 }2 S2 Z7 p! ~  Y1 N2 a( Z/ O
  17. }  V& v0 W  b7 {1 j+ B" q  m  d

  18. 7 h! J/ }& M% N1 H+ e2 ~" d/ L- _
  19. /***********************************************************************/8 w  m6 W2 n8 G( G
  20. % _, n" H( j+ Q: L9 V" b. z/ v
  21. int  EQ_is_gt (double s, double t)$ W  x. C/ }) [
  22. - _' X, w6 K& C
  23. {: D' L$ K4 H& t% ^

  24. ; O8 H' j' s1 Y% M# [
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }
      H, R! d- }: _, e

  26. & {* J0 S3 K$ ]4 M0 N4 @3 T
  27. }/ W) c& M" `2 x% c; o7 P: N
  28. 4 f( Y+ }1 O4 X" M/ Z
  29. /***********************************************************************/
    ( i, A5 b+ J% `6 w) A$ N
  30.   |  W; M. ?  C! H, |
  31. int  EQ_is_le (double s, double t)" V9 x5 b  i0 ?
  32. 6 J/ V) X( j8 a3 y9 y
  33. {1 V: J: L" o$ Q! R% C* H+ u
  34. 3 E; o4 R# b& n8 f5 A* z
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }$ J! |) F8 x* Y

  36. , z5 U0 ]; L! E/ z* x2 B
  37. }5 i) ^5 q5 \! N- }# P

  38. 4 K' J+ ~) C# X9 u* j9 ^" B
  39. /***********************************************************************/
    0 Z! |* D9 b$ a

  40. 2 s) P9 {3 G) r5 H. q/ p% @
  41. int  EQ_is_lt (double s, double t)% O' J7 w  R: P: p

  42. : I9 S$ q. I$ U! t/ y
  43. {- d" T) t6 }4 a- P. D" l
  44. 5 _( c. N9 ~6 R* [. K- y
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }
    2 A- }4 n; d2 @; b9 z: W! w

  46. 0 Z7 `, y( N! u, O8 T$ T
  47. }( m" Y5 e# g; W3 h* w
  48. 9 U4 s3 t# s: b- b
  49. /***********************************************************************/
    9 {! i0 c7 T, [: W8 _# I- x
  50. % g. \! ]' C+ S- O- o( b6 b
  51. int  EQ_is_zero (double s)
    ; N2 K' @( F1 e+ O/ Z3 L0 ^

  52. : X9 l' j0 M1 [
  53. {' E" ~8 z2 _& l4 s* x. t  a' ^0 t
  54. 6 n9 r( w8 `$ ]' S( Z: j( S3 v5 ]
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }" j* n2 i; o2 m' p6 c5 a+ U9 _
  56. ! s9 R( u' o$ O- {- w, `8 a
  57. }$ k6 M$ `, \% _% ?- j% z

  58. * O  {6 z/ k9 K* ?' H2 p3 O
  59. //=============================================================/ L7 J5 L1 h* f+ g

  60. 3 t! H7 _3 M8 ~
  61. double ARCTAN1 (double y, double x )
    1 z( X6 E; T( Z5 ?+ K2 V
  62. 4 w8 g; f& I& K
  63. //#=============================================================
    7 p8 v. ?3 l; t* F0 v* ^+ u
  64. $ J0 D# U5 v4 f2 h5 a
  65. {0 T2 `" D# k" p- ]( q
  66. % M" P* T2 b% B
  67.    double ang;. D, `9 z/ `3 e* f; }9 O0 B5 ^- t# W

  68. ) v+ R& t5 z* ]% [; A2 m0 q6 V
  69.    if (EQ_is_zero(y)) { y=0; }
    $ O! J3 E/ u* a% ]; d5 ]6 m

  70. ( |  P  s9 z! t- j. T9 l
  71.    if (EQ_is_zero(x)) { x=0; }4 s) F& z2 g# Z5 C9 M! ]

  72. : @5 [3 S$ G# i2 D
  73.    if (y == 0 && x == 0) { return(0); }
    . H7 J0 z! ~! [. M) I- q% s$ i
  74. 8 G6 S2 ]" V* H
  75.    ang=atan2(y,x);
    % ?' ]' j) K: N
  76. 0 a* Y$ C- I& e
  77.    if (ang < 0 ) {7 W6 C+ b6 s1 V1 ]' M: o/ J

  78. % I# _. Q, X+ U  Q/ S( `1 G
  79.       return(ang + PI*2);
      v& x* g* g* |. {0 F+ |
  80. $ \( j: i/ Q3 E1 K" R
  81.    }
    " T7 o& G' y. z! Z
  82. / l  s. w7 Y  s2 r- {5 ]( E" a
  83.    return(ang);
    & U" n0 G# E. s: K$ {9 Z" G
  84. 8 Y9 v$ {3 K. T' M
  85. }
    , C5 N$ |2 T* I
  86. : _+ n" G- {) {; g
  87. //#=============================================================
    3 H) Q1 H8 P# n

  88. : E  @  [0 t% l  l
  89. double ARCTAN2 (double y, double x )
    $ n1 N2 u/ W1 a4 B! [# n1 T

  90. / W5 I* [7 T; p8 K) u7 e
  91. //#=============================================================* L0 O* h2 ~1 z* ]8 {5 u4 I

  92. - w  C  ]! g2 z& R( Q* v
  93. {
    6 \1 w, M, l5 G! X- Q  `$ S6 D# P; t. L$ B
  94. 1 W) V8 a* \' y" K3 ?
  95.    double ang;( r; d, R  ^% b& }0 m
  96.   |! W' K( w. D+ r0 ]) w
  97.    if (EQ_is_zero(y)) {
    ) M8 ?% U  \3 e* H5 B
  98. ) q4 `6 U+ s5 ]; r
  99.       if (x < 0.0) { return (PI); }$ m; V5 X: @2 r" z+ r3 @

  100. ! |* \3 G5 P$ m, D  s# X
  101.       return (0.0);- k& I  J8 m% l% m

  102. ' j& k1 k2 h0 n" t$ g% R
  103.    }
    ' b: h2 \8 J* I6 M  N. B
  104. + N& p( v6 L% y
  105.    if (EQ_is_zero(x)) {3 B' b. A: r+ L8 G) g

  106. : x; u  ^& i8 N; I0 u7 V
  107.       if (y < 0.0) { return(PI*1.5); }
    5 w2 t+ l2 J1 p0 Y! s
  108. 0 X. H+ W! O/ E+ J* W
  109.       return(PI*.5);. H9 ]6 M! m" l5 c
  110. . K' j; p+ L1 Z8 C% z2 X# m
  111.    }
    3 J! o8 P' D( |! H

  112. # I! Y6 Y7 ?  g( P" O4 M
  113.    ang=atan(y/x);  E' |% f5 j" K( U5 u& n* X

  114. 7 r; t9 t# k! e5 d9 Y( m9 @! m
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }6 T  L. S( s! Z& K/ G
  116. ( M: w8 L* Z' {- L! q2 n& e: H. J
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    8 |% x" L  P" q1 r" Q' \
  118. $ }) u! k7 r: `$ I
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }' G2 M- V; S* J5 ]

  120. " r" j3 N* X, k7 l
  121.    return(ang);
    ; T- B6 k9 N2 C- J( ?: s+ }
  122. ( R0 X) A4 D# f$ ?3 M
  123. }/ u  m1 Z3 i& a' a! I! ]! p( t1 ~

  124. 7 r/ b$ b5 f5 ]) G& N3 ?' {7 v
  125. //#=============================================================
    4 k' ]% @8 H: ^% `3 b- g
  126.   k7 |( H) g" X$ y% g
  127. double CheckConst ( double angle, double constvar  )$ k+ A+ [( n& M- `
  128. 4 ^; a# c4 ?. V9 N5 D2 L' r
  129. //#=============================================================
    . ~) r7 o. T  x' v
  130. * Y: W( D6 g# F% b! g
  131. {
    4 G3 x) t1 d, x/ F3 ]* h. B

  132. + J) o, k8 U& e9 T% T  N
  133.    while (angle < -constvar) { angle+=constvar ; }  n5 I7 w9 P' D) v- V* E
  134. 0 N8 v7 @6 h7 r' O  z
  135.    while (angle >= constvar) { angle-=constvar ; }
    + ?( n& C; M! i: O
  136. ' B4 x9 j: Z/ l2 d$ A. G: l
  137.    return (angle) ;
    " j/ e& O) ?6 A, C

  138. ) O" Z- Y, R/ D, ^, Y& N* k8 P
  139. }9 B7 o' @. a2 e6 z5 l
  140. 4 o. }" U) ?% G' g) [9 O! f' }  D
  141. //#=============================================================  Z3 a8 A, x2 w% K& y

  142. 6 L3 K: g! F$ u, _  w
  143. double Check360 ( double angle )
    9 T- t- I+ N* i2 J$ t. R

  144. 8 S8 F: ^" R( _' F, c/ X) Q
  145. //#=============================================================
    # q5 q0 F0 a' G$ |& o! m; u: l. y+ M
  146.   z% V; f0 q' u( H
  147. {3 O9 @/ i* E( L4 c7 i
  148. ! b& g' ?. v- z% e; o- e
  149.    while (angle < -360.) { angle+=360. ; }! T/ z$ |" E/ f5 B; `/ O& U

  150. 1 w1 M4 ~0 V9 o0 Z
  151.    while (angle >= 360.) { angle-=360. ; }5 [( q" k8 A' o' w

  152. 0 E: g8 W) g4 M3 i8 ~) E
  153.    return (angle) ;) y# c0 t7 q# }  V. H' |* B# |+ D
  154. 3 i; A: }' _, _3 L
  155. }
    1 k0 u4 P+ `- d& F

  156. 2 y& t3 j( @5 \& q
  157. //#=============================================================' J  D  O2 h" P# c

  158. 0 o( k; }  A/ K, y, m
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit ): M5 V5 r- Z& v  u; _# v+ g
  160. + x8 r  X1 O$ k7 e2 B6 p
  161. //#=============================================================; G* O; w: c0 r: g/ `9 h- E

  162. 9 {$ M- b: e$ o& I* Q( u# P% Z! q8 U
  163. {
    6 Z: b  a# O& @" e$ s
  164. 5 H4 V; [5 d( Z" p5 M8 n
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }6 c7 X# G% \0 q- Y" a: f
  166. 7 v# J/ T# A- v5 b6 S9 {+ v) n' ~
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }8 M, k/ p8 g; Y8 q: D( c0 h. ?
  168. # X/ p3 \) s. @6 l& I
  169.    return (angle) ;2 B5 U0 l/ A9 I4 r

  170. 2 q  u* m' \) ^
  171. }
复制代码

" C* J2 C8 [5 ~8 O' s8 ~& ^) W5 [以下为摇篮5轴计算过程代码
% E; P4 U5 V% r- y
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);9 Q* p/ ~7 N0 k' P' F! p- M
  2. ( R. C) b$ g9 h7 H: r; Q3 g
  3.          j=0.; B1=0.; B0=0.;# k: R, F# Z0 J* T% N) }: J

  4. ( x0 K& o) d, J! V& H: @
  5.           if (EQ_is_ge(i,0.)) {
    : J2 v7 H: p- b( h; p3 [& \

  6. " B) u  m1 u; J
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }6 D4 D( [3 J2 q6 v
  8. 6 j+ h7 T7 G3 Q& }5 d
  9.           }" k8 G* h: k: V% B# y
  10. ' C4 E) b+ J/ A7 B7 D6 m6 Q2 i
  11.           if (EQ_is_lt(i,0.)) {
    4 g. j  ?% t0 Z

  12. 2 M5 }. D$ F' F! G/ b2 f2 a( c
  13.              if (EQ_is_lt(k,0.)) {( N8 c5 t; x; s' r7 A- T& B

  14. ( I  A0 z& N# n5 S" D) l7 I2 X
  15.                 B0=atan(i/k); B1=B0+PI ;" A1 I0 \# }' S# x! J( b

  16. " O3 x6 b- p+ f" c' _- k& G; W0 F3 O( j
  17.              } else {
    2 C; Z0 v9 L* z- W1 }# i" ^
  18.   q8 q+ }' v9 X7 O! d2 z: u
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }: b" L% Q- d6 g* M, h& h
  20. . g: P2 f2 ^5 N2 _- M. \, w: h5 d
  21.               B1=2.*PI+B0 ;
    8 t; Z: _) M- Z: R1 p4 f

  22. , h6 {4 }# z; T6 |. u; o
  23.              }0 j  _) ^7 H/ o# `" F

  24. ; W. [6 g* y+ s" k
  25.           }
    , [3 B! i6 d+ l  U8 ~
  26. 7 J( K# Y4 G! w- H( M: @/ r
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;) s# M0 s9 J  r% G: i$ i, }
  28. # Z2 R; a+ J  @4 G
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    6 `7 _% C/ [6 W( o+ g, [9 X
  30. + A& ?: H* r: C* C: f
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;2 h8 ?$ J; i; T# H; V# l+ s; N# j, A
  32. : d' X- D! o* D5 H6 e
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
: X7 d5 `5 X( a- i
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。
4 f4 b8 l: j; \% Y  d! T
, c! r% `- w( J' E! Z  A5 G 640.png . f- ~8 M' g: h1 ~- `
测试结果:
/ Z) |& }9 z8 q 6420.png 4 T. `" U2 x, H

5 {% r# H1 R3 D# O. [3 ^反向测试结果 6410.png
% }3 B, k' R4 K- R# E+ n8 \! I

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

294

回帖

332

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

231

积分

中级会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2026-4-27 03:02 , Processed in 0.577333 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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