#!/usr/bin/python # # gnuplot the outline # def outline_gnuplot(points): x0 = points[0] y0 = points[1] while len(points): print points.pop(0), points.pop(0) print x0, y0 # # make a HeeksCAD sketch of the outline # def cad_line(sk, x0, y0, x1, y1): cad.line(x0, y0, x1, y1) cad.add(sk, cad.getlastobj()) def outline_cad(points): cad.sketch() sk = cad.getlastobj() x0 = points.pop(0) y0 = points.pop(0) last_x = x0 last_y = y0 while len(points): x = points.pop(0) y = points.pop(0) cad_line(sk, last_x, last_y, x, y) last_x = x last_y = y cad_line(sk, last_x, last_y, x0, y0) cad.reorder(sk) return sk def closed_outline(*args): do(list(args)) # # Make the cover sheet 2 mm larger than the counterweight on all sides. We need # the following exceptions to avoid mechanical interference: # # - at the power connector, keep the ymin edge flush with the counterweight # - follow the counterweight's J-shaped space for the reset button, with the # border reduced from 2 mm to 0.5 mm # - next to the long side of the battery, follow the counterweight's edge # - also follow the counterweight's bay for the battery cover's tongue and # make it even 0.5 mm larger, anticipating imperfect registration # # Also, as a simplification, we don't follow steps and recesses in these cases: # # - 1 mm steps on the left and right side. Just use the larger size. # - the whole sponge area. Just put the cover on top of the sponge. # - all recesses near the batter, except the one for the lid's central tongue # # The above simplifications are possible, because, being on top of the # counterweight, we've already cleared the obstacles these steps and recesses # are designed to avoid. # # # Note: to visualize the shape defined below, plot the counterweight in 2D with # gnuplot and follow the shape it the mouse. # # To visualize the result, do this: # # ./cw.py >cw.gnuplot # ./cvr.py >cvr.gnuplot # gnuplot # gnuplot> set style data lines # gnuplot> plot "cw.gnuplot", "cvr.gnuplot" # def outline(): closed_outline( # counterweight corners: (16, 46) and (15, 60) 13, 46, # (15, 69.5) 13, 71.5, # (82.5, 65), (82.5, 64), (89.5, 64), (89.5, 69) 83, 71.5, 83, 64.5, 89, 64.5, 89, 71, # (100, 69) 102, 71, # (99.5, 46) 102, 44, # (88, 46) 86, 44, # (88, 55), (82, 50) 86, 50, # (59.5, 55), (59.5, 56.5), (52.5, 56.5), (52.5, 55) 60, 50, 60, 57, 52, 57, 52, 50, # (24, 55) 26, 50, # (24, 46) 26, 46) if __name__ == "__main__": do = outline_gnuplot else: import HeeksPython as cad do = outline_cad outline()