Skip to content
8 changes: 5 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ docs/pcbgcode.lot
docs/pcbgcode.out
docs/pcbgcode.toc

*.b##
*.s##
~$*.xlsx
viewer/applet/data/optimize_me.txt
viewer/**/optimize_me.txt
*.b#1
*.b#*
.suo
*.sln
*.vcxproj
*.filters
*.user
26 changes: 22 additions & 4 deletions pcb-gcode.ulp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ string g_cmd_temp;
////////// mlmSolutions added 29 Jan 14

real m_v_x[], m_v_y[], m_v_rad[];
real m_v_xc[], m_v_yc[]; // JJ
real m_tool_x, m_tool_y, m_vx1, m_vy1, m_vx2, m_vy2, m_rad;
int m_v_index[], m_v_prev[], m_v_next[], m_v_step[], m_v_cont[], m_v_curve[], m_c_start[], m_c_end[];
int m_contours, m_cw, m_v_n=1, m_fwd, m_dist, m_dist_min, m_dist_min_index;
Expand Down Expand Up @@ -593,6 +594,8 @@ void spot_drill(UL_BOARD B)
real m_arc_begin_x;
real m_arc_begin_y;
real m_arc_radius;
real m_arc_center_x;
real m_arc_center_y;
int pair_count = 0;
int MAX_COORDS_PER_LINE = 4;
void device_draw(int x1, int y1, int x2, int y2, int state, real z_down_or_radius, real fr_xy, real fr_z)
Expand Down Expand Up @@ -710,9 +713,19 @@ void device_draw(int x1, int y1, int x2, int y2, int state, real z_down_or_radiu

////////// mlmSolutions 5 Feb 14

case ST_ARC:
i_coord = (rx2 - rx1) / 2;
j_coord = (ry2 - ry1) / 2;

case ST_ARC_CENTER:
sprintf(str, "ARC CENTER: rx1=%f, ry1=%f, rx2=%f, ry2=%f", rx1, ry1, rx2, ry2);
comm(str);
m_arc_center_x = rx1;
m_arc_center_y = ry1;
break;

case ST_ARC:
sprintf(str, "ARC: rx1=%f, ry1=%f, rx2=%f, ry2=%f, cx=%f, cy=%f", rx1, ry1, rx2, ry2, m_arc_center_x, m_arc_center_y);
comm(str);
i_coord = m_arc_center_x - rx1;
j_coord = m_arc_center_y - ry1;
if (m_z_up){
rz(DEFAULT_Z_UP);
rxy(rx1, ry1);
Expand All @@ -724,7 +737,7 @@ void device_draw(int x1, int y1, int x2, int y2, int state, real z_down_or_radiu
else {
fccwr(rx2, ry2, i_coord, j_coord, fr_xy);
}
break;
break;

//////////
}
Expand Down Expand Up @@ -1026,6 +1039,8 @@ void output_mill_code()
// save arc data
m_v_x[m_v_n] = P.arc.x1;
m_v_y[m_v_n] = P.arc.y1;
m_v_xc[m_v_n] = P.arc.xc;
m_v_yc[m_v_n] = P.arc.yc;
m_v_rad[m_v_n] = P.arc.radius;
m_v_curve[m_v_n] = W.curve;
m_v_prev[m_v_n] = m_v_n - 1;
Expand All @@ -1036,6 +1051,8 @@ void output_mill_code()

m_v_x[m_v_n] = P.arc.x2;
m_v_y[m_v_n] = P.arc.y2;
m_v_xc[m_v_n] = P.arc.xc;
m_v_yc[m_v_n] = P.arc.yc;
m_v_rad[m_v_n] = P.arc.radius;
m_v_curve[m_v_n] = W.curve;
m_v_prev[m_v_n] = m_v_n - 1;
Expand Down Expand Up @@ -1143,6 +1160,7 @@ void output_mill_code()
if (m_v_rad[m_j] > 0) { //its an arc
if ((m_j % 2) == 0) m_cw = false; else m_cw = true; //if its the end of an Eagle arc, m_cw=false
m_rad = m_v_rad[m_j]; if (abs(m_v_curve[m_j]) >180) m_rad = m_rad * -1;
device_draw(m_v_xc[m_j], m_v_yc[m_j], 0, 0, ST_ARC_CENTER, 0, 0, 0);
device_draw(m_vx1, m_vy1, m_vx2, m_vy2, ST_ARC, MILLING_DEPTH, FEED_RATE_MILL_XY, FEED_RATE_MILL_Z);
} else { //its a line
device_draw(m_vx1, m_vy1, m_vx2, m_vy2, state, MILLING_DEPTH, FEED_RATE_MILL_XY, FEED_RATE_MILL_Z);
Expand Down
15 changes: 8 additions & 7 deletions source/pcb-gcode.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,14 @@ enum { false = 0, true = 1 };

enum { TASK_INVALID, TASK_OUTLINES, TASK_FILL };

enum { ST_INVALID,
ST_START_LINE, ST_CONTINUE_LINE, ST_END_LINE,
ST_DRILL,
ST_FILL,
ST_ARC_BEGIN,
ST_ARC_END,
ST_ARC};
enum { ST_INVALID,
ST_START_LINE, ST_CONTINUE_LINE, ST_END_LINE,
ST_DRILL,
ST_FILL,
ST_ARC_BEGIN,
ST_ARC_END,
ST_ARC,
ST_ARC_CENTER};

enum { TOP = 0, BOTTOM = 1, MILL = 2, TEXT = 3, STENCIL = 4, ALL = 5 };

Expand Down