找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5968|回复: 3

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

[复制链接]

432

主题

5755

回帖

901万

积分

管理员

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

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

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

×
APT刀轨数据生成NC程序C++源代码,本功能仅作为技术交流研究之用,代码,功能可能存在缺失。需自行编写刀轨数据的读取与处理。以下仅为部分代码以下为头文件部分源代码
  1. int  EQ_is_equal (double s, double t);
    " G0 J( p, \! a
  2. int  EQ_is_ge (double s, double t);; P! V5 h3 w) Z2 h, B' K, G0 u" k+ F: V
  3. int  EQ_is_gt (double s, double t);0 Z8 }9 d" G6 C% g* P$ `  V
  4. int  EQ_is_le (double s, double t);
    " I2 h& X7 @+ H( o9 M
  5. int  EQ_is_lt (double s, double t);' u/ ^% B  ?7 l8 D. v
  6. int  EQ_is_zero (double s);& e1 v( L) E8 Z
  7. //=============================================================
    + u$ C' F/ V7 F; [+ q3 J
  8. double ARCTAN1 (double y, double x );  F7 [/ \6 N4 z8 s; B
  9. //#=============================================================; {1 M' X$ Q+ u
  10. double ARCTAN2 (double y, double x );4 X; N8 n0 L% m" V( L3 L
  11. //#=============================================================
    1 u. l  v/ [( Z
  12. double CheckConst ( double angle, double constvar  );  @# A* \+ h5 t
  13. //#=============================================================, ?/ F! V6 E# L8 R$ z. F& `( q
  14. double Check360 ( double angle );
    . f7 X* [. I6 d6 l
  15. //#=============================================================
    ) X+ F% V9 s' t$ t
  16. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit );* n* \: G2 O8 S
  17. //#=============================================================
复制代码
+ ], ^; ]) O) }; z+ }
以下为部分源代码,用于判断,计算角度等% B. }0 W* s( [( h# v- j# S
  1. int  EQ_is_equal (double s, double t)
    ; B6 k3 {+ N  ]8 w# ~1 ?

  2. % h! ?+ b/ E( k, o0 t: [7 I
  3. {
    4 K( \! G! `# C' F

  4. - S6 I6 x" e( v* G* t$ v1 B* M* a
  5.   if (fabs(s-t)<= system_tolerance)  { return(1); } else { return(0) ; }
    . y$ F1 A7 |. K

  6. & @# K6 l5 U# o4 [' b3 Z
  7. }2 M. @8 p4 T- k3 n
  8.   U! a0 C, D! Z5 a/ a: r0 J
  9. /***********************************************************************/2 U; A8 w& c1 U3 Q+ G

  10. 6 f" y& J7 l1 o% `# |! K
  11. int  EQ_is_ge (double s, double t)
    / `4 E. W2 D  `3 P- [1 M3 y' ]

  12. , v; ?3 W; X( C  r
  13. {
    ) t' I& j# r2 g& B3 Y) e: S- {1 T
  14. 8 |! A) R! X" l) D2 y5 I
  15.   if (s > (t - system_tolerance)) { return(1); } else { return(0) ; }
    - b8 Y8 p. g4 O) ]# ^) I/ ]# c# T

  16. * J" R) q/ z" j( v' C4 x
  17. }* E+ D7 i7 a6 y6 s

  18. : L' v' h! {- D2 L4 W/ J$ Q5 ?. t! z
  19. /***********************************************************************/
    5 p4 `" }; z5 E, W4 b( A3 U

  20. / F* H  {6 s/ B1 S( r5 Y
  21. int  EQ_is_gt (double s, double t)$ @# Z+ |. Z8 K  ~5 T. x
  22. $ W2 v0 N& z; A8 q5 L
  23. {5 ^5 A/ H+ Z" T* _
  24. / U: x  Q' e* v8 m8 i. h7 |! _
  25.   if (s > (t + system_tolerance)) { return(1); } else { return(0) ; }2 x- J# W9 [& [5 G, f
  26. % X) j+ t( n( z" A! t( t+ H
  27. }
      O0 M/ D/ V0 p. H0 c

  28. 0 [" _- \2 r/ L, t
  29. /***********************************************************************/) G) L" s  W6 r8 E; t) e! @$ A
  30. " b& o& q  e5 g7 W4 R
  31. int  EQ_is_le (double s, double t)
    : C$ A  M6 U) s, y0 |' @5 Q

  32. 7 L) R9 E9 n$ r, N
  33. {2 S4 f- z7 ?! g, `
  34. 2 C& c7 b1 j( a" H0 S+ `
  35.   if (s < (t + system_tolerance)) { return(1); } else { return(0) ; }5 R5 v3 }1 d! ]$ P$ h
  36. 1 @2 U9 G6 P- \* N! h1 N! G1 y# h
  37. }4 i" P0 b9 r: g7 }( w' D8 I

  38. - {$ s3 c8 I# y
  39. /***********************************************************************/  `2 M: S* B2 C" n

  40. # }, @, ^- }: G  B1 C1 F
  41. int  EQ_is_lt (double s, double t)
    9 t3 U. U( X! L8 k5 Z( d2 a
  42. % c" H' n3 I$ p0 e3 _5 N
  43. {! J/ s+ h6 P8 L! i* A1 R

  44. ! x1 |4 U% O6 ~7 M
  45.   if (s < (t - system_tolerance)) { return(1); } else { return(0) ; }8 }0 e! m; C" t+ I  |  G! G$ D4 D

  46. " x" V. x3 d# R. D) F
  47. }
    $ ~$ v9 X0 ]$ L- \' ?

  48.   a5 A8 P9 {4 F; C
  49. /***********************************************************************/
    . g& B1 ^4 k5 u- e1 g4 C$ p, Y& ?- s
  50. & Y1 |# e% ?+ M$ p% M8 p% }
  51. int  EQ_is_zero (double s)
    ( `6 W$ Q! d8 |2 W. d& T
  52. 5 X* T4 Q0 ~/ z% {. D: J! g
  53. {
    " b2 K- v# L8 h1 b

  54. / k! v. y3 V* {: T: l$ ~. X
  55.   if (fabs(s)<= system_tolerance)  { return(1); } else { return(0) ; }6 a/ N( z0 O& o! z1 Z4 o
  56. 8 a  m4 V! R& N# o7 Q, Y3 I
  57. }
    $ A7 B; L2 M9 i
  58. 7 k  x: I7 A  K7 |& T7 N
  59. //=============================================================, L# `6 b1 E, u7 ]

  60.   S3 }' V" d4 G$ H& g" J
  61. double ARCTAN1 (double y, double x )
    + r$ k. Y! t; a' I* x) ?4 L
  62. ' }3 v/ `- U! _, ~. Z5 O
  63. //#=============================================================9 V  k1 E3 }: G4 k$ ~2 E  B: s

  64. 7 S- o( p) c8 I# i
  65. {
    : W, L; [/ W) _

  66. 2 D: f* l% ~5 K2 E& F% u3 I5 c# W% K
  67.    double ang;
    " v- W, J9 H) |) `- T, Z9 H

  68. $ u. i' [& ^1 ^1 v; [" d
  69.    if (EQ_is_zero(y)) { y=0; }0 U: s+ m5 Y7 \' X! H

  70. 5 ~0 P' j1 y& T) m! ]
  71.    if (EQ_is_zero(x)) { x=0; }
    ' ~& _+ \0 H- y5 q* y5 M
  72. + Z; b/ `5 U+ E
  73.    if (y == 0 && x == 0) { return(0); }
      z& o0 b0 s9 h- h7 L! P6 W

  74.   Z* j! N5 W' l  {! }+ ~. G
  75.    ang=atan2(y,x);; K7 I8 ~8 |& q, B9 \
  76. 8 }+ A" L9 F6 y8 e
  77.    if (ang < 0 ) {
    % Y+ k) K! m- l; m. I  X

  78. 2 N7 i$ V2 r# n! J- {; Y
  79.       return(ang + PI*2);8 K; q% m6 X" i4 j3 D7 h8 k

  80. 4 P' j* B0 h( K
  81.    }
    8 p9 L1 G) a$ ^" p( `% F: C
  82. 5 i0 q5 |  B) H* z
  83.    return(ang);
    5 g+ t6 k+ O5 e# P* {3 w5 [

  84. , s* e4 G/ K& U# v+ j% }1 {4 b
  85. }
    6 a) w, ^+ b0 j9 A; A& }, \1 Q

  86. - @* ]) [% d3 Z& _  H
  87. //#=============================================================$ T& O! O7 q4 |$ n% q# _/ k# i8 y

  88. - V, K2 G5 A( O# a
  89. double ARCTAN2 (double y, double x )
    7 S; Z: E9 l6 T* m5 |# u% {+ e2 f

  90. " z1 ~7 T% ?& L, W& S3 V
  91. //#=============================================================
    8 I' }* W& B% v: t5 D) s

  92. 5 g, e3 H, U  E. G
  93. {
    ; z& V! `' U, [! Y

  94. ' v2 z. X. [2 G1 ^0 X
  95.    double ang;+ j# Z; D; U. O5 @

  96.   E; ^  I; t* B6 t% j+ S/ J
  97.    if (EQ_is_zero(y)) {
    * D4 ^2 M0 G; L& Y/ A3 f/ ]8 I& w3 v
  98. / p* J% h/ G* z9 s( y
  99.       if (x < 0.0) { return (PI); }9 _; x: Y+ y7 [8 n5 i" u
  100. ' v% y/ H! S" l% u( I
  101.       return (0.0);
    8 c" `" s% h) |; v7 d' T. D

  102. 0 V% T( l. x2 M8 t. g/ h' ?% U
  103.    }8 s! Z8 J$ V; _  x/ `+ F4 t7 x
  104. 1 T6 O: ]% F% y) I3 P$ A6 ~, \" z$ D+ _
  105.    if (EQ_is_zero(x)) {9 q& ?. {3 h5 Y6 ^3 X% f, V( b) w

  106. 8 p* ]* Y. K, n2 R% g3 Z0 }2 }8 q
  107.       if (y < 0.0) { return(PI*1.5); }$ V& M. a9 ]0 M6 y
  108. 8 k$ R; [( z6 d& {* ^* j& u4 {
  109.       return(PI*.5);
    2 o/ j; x. u4 s+ M
  110. 2 F# T/ W9 [! B+ c" C' m. P% t
  111.    }
    ( K9 }2 U5 o" z% n( z/ d
  112. / M6 {7 O: M6 s* R% _2 ^; [! O
  113.    ang=atan(y/x);
    1 d% [  x5 t3 V& U: S% t3 h3 g

  114. ( f3 y' k8 Q: ]7 b, u. {* _
  115.    if (x > 0.0 && y < 0.0) { return(ang+PI*2.0); }
    , P+ y# T) c8 Z2 o6 ^8 p

  116.   k+ V# U$ \0 r) Q& u9 R8 Z
  117.    if (x < 0.0 && y < 0.0) { return(ang+PI); }
    3 U0 @/ f, U* I8 B
  118. ( A+ d7 l4 r3 ?& l
  119.    if (x < 0.0 && y > 0.0) { return(ang+PI); }
    0 G+ c  @: L% ]3 ?/ n0 G

  120. , o7 G0 j4 R# v1 m2 [
  121.    return(ang);
    $ Q% z3 N+ B: M' j- V

  122. 4 W+ I7 Z% X( ]2 b2 {! b
  123. }
    2 a; D6 E& O, z; ~+ }7 L: V$ o8 d7 b

  124. 9 p( \4 \8 L9 C! |3 R9 y& V. N
  125. //#=============================================================
    4 K" ]( J' X7 J0 P: S; ]! c, n* T3 }

  126. 5 X& F' Y. u8 l+ u; L
  127. double CheckConst ( double angle, double constvar  )
    4 A; U+ i; C/ E
  128. 9 M# D& @) v6 }; R  c4 L' e" D
  129. //#=============================================================
    $ f; c. z5 s  J, v

  130. 6 m4 X" n! _5 m9 f$ Q
  131. {7 e# E1 Y$ z' V5 O; S
  132. " ~* i: K: `3 H9 B) z
  133.    while (angle < -constvar) { angle+=constvar ; }
    9 D! j0 w% C6 g& E3 x- O

  134. ! j# {  Q) r! |3 g6 p
  135.    while (angle >= constvar) { angle-=constvar ; }  D* R; ]+ [5 {+ [* n
  136. : V3 e+ w* q9 K/ |5 B! u
  137.    return (angle) ;
    " Q6 |. l0 N7 L& C  X
  138. 9 z+ I. ~8 c$ O% V( e- b+ B
  139. }
    3 E4 y8 o3 Z% Q6 S  a

  140. + k: B% a5 F5 M: `6 w) U! b
  141. //#=============================================================
    & m3 ~# U! q: \5 E2 J& B' w

  142. + z& `. m9 h$ M& R- \  D5 l5 O
  143. double Check360 ( double angle )$ {, w' A. f  N" T" P( }
  144. - G  \4 n7 ~, ~
  145. //#=============================================================
    ' n& \( Z# c6 o
  146. 9 c  D6 c6 e1 R; j
  147. {
    ! b( z  |" O+ k4 d0 s8 d7 \
  148. 1 `( L' R$ R$ [  x$ ?; u
  149.    while (angle < -360.) { angle+=360. ; }( \9 N& y+ @$ t: x0 p

  150. , @, q2 d0 c" S
  151.    while (angle >= 360.) { angle-=360. ; }
    & m# S; }' f7 E5 y% A1 ^; v8 J

  152. . h  C' ], Z1 o4 {; X& ^
  153.    return (angle) ;
    4 [" d" V; o. m3 C. N: [* v) L5 [
  154.   D% I& w- @! [
  155. }
    * U. y) w* Q  r0 i) A$ Y. @
  156. 2 D3 F8 ]/ o( g0 m
  157. //#=============================================================( v4 y6 B, ^2 Z6 C2 i8 J8 v* {

  158. , E# @. K, N4 L1 W1 c* f/ N, f. _
  159. double CheckLimit ( double angle, double kin_axis_min_limit, double kin_axis_max_limit )
    / M" E7 s* ]( t
  160. 4 P' t( M! z* A5 X( E  s6 w; d3 ?
  161. //#=============================================================
    ' J7 ~$ s: S$ O9 |' Z9 y4 `

  162. 9 K7 [/ E, g" _2 B2 ^
  163. {
    " s4 H6 h) {/ h6 O& a4 v

  164. . E  ?+ j$ E2 J' G, {
  165.    while ((angle-kin_axis_min_limit) > 360.) { angle-=360. ; }+ y: [- c6 z2 w# |" B9 m
  166. ; z- [8 Q# w- \- m( z
  167.    while ((kin_axis_max_limit-angle) <= -360.) { angle+=360. ; }8 w( q0 m4 x6 m$ W* h. X# m

  168. : P4 b5 Y$ ^, A2 s$ S1 d
  169.    return (angle) ;$ y# L* y& h5 C$ L
  170. ! K- z: b0 c6 J- [# o8 [* y
  171. }
复制代码

* J1 j4 \: y% N7 k4 T+ P以下为摇篮5轴计算过程代码- G: `% T! a. B. f) M' v
  1. i=sin(ang_rad[1]);  j=0.0;  k=cos(ang_rad[1]);
    ! I3 ?" X$ G4 D8 m

  2. , \1 u4 w% L( b' v/ d# n
  3.          j=0.; B1=0.; B0=0.;
    ; B% e% f4 `# \% O

  4. ! v  P/ U; [$ _. [# D9 I7 G
  5.           if (EQ_is_ge(i,0.)) {( k$ O# V, X& @. o
  6. ( `* B! I' n4 P, N- H4 L
  7.              if (EQ_is_gt(k,0.)) { B0=acos(k); B1=B0; } else { B0=acos(k); B1=B0; }3 [8 C0 p. d" N* l

  8. : Q$ F+ b2 Z) {( U8 @; ]" V3 z& q# l
  9.           }( a6 F: o* H3 ~  X% O7 U: Y

  10. # Z/ f" O9 ]  k& T$ N1 @6 f, t
  11.           if (EQ_is_lt(i,0.)) {
    : \0 }/ U# K1 o3 m% v; n8 `

  12. ! [/ F3 v) n8 {( @; o
  13.              if (EQ_is_lt(k,0.)) {8 s/ F6 |; f9 H: s7 N
  14. & `( b& ]1 b) I6 m' L* v
  15.                 B0=atan(i/k); B1=B0+PI ;  Q+ D9 {+ f- E6 B/ D+ V0 n- Z

  16. ( F  m! U4 {& h0 |
  17.              } else {+ j" J8 f$ \# C8 f
  18. ! |4 ^$ _4 D2 z8 R7 l9 f
  19.               if (EQ_is_zero(k)) { B0=-PI/2. ; } else { B0=atan(i/k); }: C0 C7 P/ X! b8 r2 l  v* c

  20. # ~) J/ h' E( J$ t
  21.               B1=2.*PI+B0 ;
    0 @+ W( r3 @& m, Q+ m! u

  22.   t% r0 d' c2 ~! ~/ ]
  23.              }* w; T2 B+ t- Z5 p- `2 o

  24. 9 q! _* q7 I" E, v
  25.           }
    : C( Q- ]: O* q0 ^9 W7 S$ b( b

  26. ) |- b2 d/ j8 }2 J, F
  27.           if (EQ_is_ge(B1,0.)) B0=1.; else B0=-1. ;; {. b* Z) i# k) R( I! _

  28. ) U9 t, h0 E3 x7 O
  29.           B2=(-1.)*B0*(2*PI-fabs(B1));
    # u/ j& X+ _% ^0 g9 F2 u# h& Q
  30. 9 f" k: F2 F8 T
  31.           ang_rad[0]=0.; ang_rad[1]=B1; ang_rad[2]=0.;, N5 i9 h+ X  q) f$ u" L
  32. & n- k/ y; d1 \4 s4 I
  33.           ang_rad[3]=0.; ang_rad[4]=B2; ang_rad[5]=0.;
复制代码
  @9 ?* `- q/ v4 _
通过输出的NC程序,反向输出的刀轨数据与原始刀轨文件对比,其数据结果一致。9 l# `# k) C9 H$ a9 P7 h
6 M# `% p  C( C9 t- r
640.png 1 y. _" _( f  p
测试结果:. e& M3 u/ w5 T, G
6420.png 4 C4 {, n- e; f5 q; |. G( l

  a8 e( z- ?" I% c# g反向测试结果 6410.png . l: [( Q5 i, ]1 X& @) z3 M

0

主题

25

回帖

17

积分

新手上路

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

使用道具 举报

0

主题

293

回帖

327

积分

中级会员

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

使用道具 举报

1

主题

136

回帖

172

积分

注册会员

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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-12-17 11:20 , Processed in 0.328448 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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