From 5dd4fe4117144444299149b79da85fd6ab139e8c Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Mon, 15 Nov 2021 03:54:48 +0100 Subject: [PATCH] First prototype of bottom case: sides don't overlap enough, interior guides too widely apart, should align with fingers --- battery-case-generator.py | 108 +++++++++++++++++++++++++++++--------- 1 file changed, 82 insertions(+), 26 deletions(-) diff --git a/battery-case-generator.py b/battery-case-generator.py index a162ba5..6e458d2 100755 --- a/battery-case-generator.py +++ b/battery-case-generator.py @@ -36,33 +36,43 @@ else: args.hole = float(args.hole) assert(args.height != None) -GRID = args.hole+args.padding -RADIUS = args.hole/2 -DIMX = 2*(args.dimension+1)*GRID -DIMY = 2*(args.dimension+1)*GRID +args.kerf2 = args.kerf/2 +args.grid = args.hole+args.padding +args.radius = args.hole/2 +args.interior_edge = args.grid*args.dimension*0.5+args.outside_padding +args.exterior_edge = args.interior_edge+args.thickness +args.interior_leg = (args.interior_edge-args.horizontal_finger-args.kerf)/2 +args.n_hor_fingers = int(args.exterior_edge/args.horizontal_finger/2) +args.exterior_leg = (args.exterior_edge-(2*args.n_hor_fingers-1)*args.horizontal_finger+args.kerf)/2 +args.exterior_slot = (args.exterior_edge-args.horizontal_finger+args.kerf)/2 +args.n_ver_fingers = int(args.height/args.vertical_finger/2) +args.vertical_finger = args.height/args.n_ver_fingers/2 + +DIMX = 2.9*args.grid*args.dimension +DIMY = 3.8*args.grid*args.dimension PI3 = math.pi/3 def draw_grid(cx, cy): for row in range(-int(args.dimension/2), int((args.dimension+1)/2)): - cyr = cy+GRID*row*math.sin(PI3) + cyr = cy+args.grid*row*math.sin(PI3) num_col = args.dimension-abs(row) - cxr = cx-.5*GRID*(num_col-1.0) + cxr = cx-.5*args.grid*(num_col-1.0) for col in range(num_col): - print('' % (cxr+col*GRID, cyr, RADIUS)) + print('' % (cxr+col*args.grid, cyr, args.radius)) def draw_plane(cx, cy, interior=False): - radius = GRID*args.dimension*0.5+args.outside_padding - if not interior: - radius += args.thickness + if interior: + edge = args.interior_edge + else: + edge = args.exterior_edge turtle = svgturtle.SvgTurtle(cx, cy) turtle.penup() - turtle.forward(radius) + turtle.forward(edge) turtle.right(120) turtle.pendown() if interior: - leg = (radius-args.horizontal_finger-args.kerf)/2 for side in range(6): - turtle.forward(leg) + turtle.forward(args.interior_leg) turtle.left(90) turtle.forward(args.thickness) turtle.right(90) @@ -70,30 +80,76 @@ def draw_plane(cx, cy, interior=False): turtle.right(90) turtle.forward(args.thickness) turtle.left(90) - turtle.forward(leg) + turtle.forward(args.interior_leg) turtle.right(60) else: - num_fingers = int(radius/args.horizontal_finger/2) - leg = (radius-(2*num_fingers-1)*args.horizontal_finger-args.kerf)/2 for side in range(6): - turtle.forward(leg) - for finger in range(num_fingers): + for finger in range(args.n_hor_fingers): + turtle.forward(args.exterior_leg if finger == 0 else args.horizontal_finger+args.kerf) turtle.right(90) turtle.forward(args.thickness) turtle.left(90) - turtle.forward(args.horizontal_finger+args.kerf) + turtle.forward(args.horizontal_finger-args.kerf) turtle.left(90) turtle.forward(args.thickness) turtle.right(90) - turtle.forward(leg if finger == num_fingers-1 else args.horizontal_finger-args.kerf) + turtle.forward(args.exterior_leg) turtle.right(60) print('' % turtle.to_s()) +def draw_side(x0, y0, h, slots): + turtle = svgturtle.SvgTurtle(x0, y0+args.thickness) + for finger in range(args.n_hor_fingers): + turtle.forward(args.exterior_leg-args.kerf if finger == 0 else args.horizontal_finger-args.kerf) + turtle.left(90) + turtle.forward(args.thickness) + turtle.right(90) + turtle.forward(args.horizontal_finger+args.kerf) + turtle.right(90) + turtle.forward(args.thickness) + turtle.left(90) + turtle.forward(args.exterior_leg-args.kerf-args.thickness) + turtle.right(90) + for finger in range(args.n_ver_fingers): + turtle.forward(args.vertical_finger-(args.kerf/2 if finger==0 else args.kerf)) + turtle.left(90) + turtle.forward(args.thickness) + turtle.right(90) + turtle.forward(args.vertical_finger+args.kerf) + turtle.right(90) + if finger < args.n_ver_fingers-1: + turtle.forward(args.thickness) + turtle.left(90) + turtle.forward(args.exterior_edge-args.thickness) + turtle.right(90) + for finger in range(args.n_ver_fingers): + turtle.forward(args.vertical_finger-(args.kerf/2 if finger==0 else args.kerf)) + turtle.left(90) + turtle.forward(args.thickness) + turtle.right(90) + turtle.forward(args.vertical_finger+args.kerf) + turtle.right(90) + if finger < args.n_ver_fingers-1: + turtle.forward(args.thickness) + turtle.left(90) + print('' % turtle.to_s()) + for slot in slots: + x = x0+args.exterior_slot + y = y0+slot + w = args.horizontal_finger-args.kerf + h = args.thickness-args.kerf + print('' % (x, y, w, h)) + print('' % (DIMX, DIMY, DIMX, DIMY)) -draw_grid(GRID*(0.5*args.dimension+0.5), GRID*(0.5*args.dimension+1)) -draw_grid(GRID*(1.5*args.dimension+1.5), GRID*(0.5*args.dimension+1)) -draw_plane(GRID*(0.5*args.dimension+0.5), GRID*(0.5*args.dimension+1), True) -draw_plane(GRID*(1.5*args.dimension+1.5), GRID*(0.5*args.dimension+1), True) -draw_plane(GRID*(0.5*args.dimension+0.5), GRID*(1.5*args.dimension+1)) -draw_plane(GRID*(1.5*args.dimension+1.5), GRID*(1.5*args.dimension+1)) +draw_grid(0.65*args.grid*args.dimension, 0.60*args.grid*args.dimension) +draw_plane(0.65*args.grid*args.dimension, 0.60*args.grid*args.dimension, True) +draw_grid(1.90*args.grid*args.dimension, 0.60*args.grid*args.dimension) +draw_plane(1.90*args.grid*args.dimension, 0.60*args.grid*args.dimension, True) +draw_plane(0.65*args.grid*args.dimension, 1.90*args.grid*args.dimension) +draw_side(0.05*args.grid*args.dimension, 2.50*args.grid*args.dimension, args.height, [args.height*.3, args.height*.7]) +draw_side(0.75*args.grid*args.dimension, 2.50*args.grid*args.dimension, args.height, [args.height*.3, args.height*.7]) +draw_side(1.45*args.grid*args.dimension, 2.50*args.grid*args.dimension, args.height, [args.height*.3, args.height*.7]) +draw_side(2.15*args.grid*args.dimension, 2.50*args.grid*args.dimension, args.height, [args.height*.3, args.height*.7]) +draw_side(1.35*args.grid*args.dimension, 1.25*args.grid*args.dimension, args.height, [args.height*.3, args.height*.7]) +draw_side(2.05*args.grid*args.dimension, 1.25*args.grid*args.dimension, args.height, [args.height*.3, args.height*.7]) print('')