Rounded hexagons for interior planes
This commit is contained in:
		@@ -10,10 +10,12 @@ parser.add_argument('--dimension', default=5, type=int, help='Grid dimension')
 | 
			
		||||
parser.add_argument('--height', type=float, help='Height of battery')
 | 
			
		||||
parser.add_argument('--hole', default='AA', help='Hole diameter (mm or A, AA, AAA)')
 | 
			
		||||
parser.add_argument('--kerf', default=.1, type=float, help='Kerf')
 | 
			
		||||
parser.add_argument('--horizontal-finger', default=10.0, type=float, help='Width of horizontal fingers')
 | 
			
		||||
parser.add_argument('--corner-length', default=4, help='Length of stretch corner in material thicknesses')
 | 
			
		||||
parser.add_argument('--stretch', default=1.05, type=float, help='Reduction factor of stretch material')
 | 
			
		||||
parser.add_argument('--horizontal-finger', default=5.0, type=float, help='Width of horizontal fingers')
 | 
			
		||||
parser.add_argument('--vertical-finger', default=5.0, type=float, help='Width of vertical fingers')
 | 
			
		||||
parser.add_argument('--padding', default=1.5, type=float, help='Padding around holes')
 | 
			
		||||
parser.add_argument('--outside-padding', default=2, type=float, help='Extra padding between holes and wall')
 | 
			
		||||
parser.add_argument('--outside-padding', default=4, type=float, help='Extra padding between holes and wall')
 | 
			
		||||
parser.add_argument('--thickness', default=3.0, type=float, help='Thickness of material')
 | 
			
		||||
parser.add_argument('--lid', default=0.2, type=float, help='How much extra play to give the lid')
 | 
			
		||||
 | 
			
		||||
@@ -39,9 +41,13 @@ else:
 | 
			
		||||
args.kerf2         = args.kerf/2
 | 
			
		||||
args.grid          = args.hole+args.padding
 | 
			
		||||
args.radius        = args.hole/2
 | 
			
		||||
args.corner        = args.corner_length*args.thickness
 | 
			
		||||
args.corner_s      = args.corner*args.stretch
 | 
			
		||||
args.corner_radius = 3*args.corner_s/math.pi
 | 
			
		||||
args.corner_inset  = args.corner_s*math.sqrt(3)/math.pi
 | 
			
		||||
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.interior_leg  = (args.interior_edge-args.horizontal_finger-args.kerf)/2-args.corner_inset
 | 
			
		||||
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
 | 
			
		||||
@@ -49,6 +55,8 @@ args.n_ver_fingers = int(args.height/args.vertical_finger/2)
 | 
			
		||||
args.vertical_finger = args.height/args.n_ver_fingers/2
 | 
			
		||||
args.slots         = [args.vertical_finger*2.5-args.thickness*0.5, args.vertical_finger*4.5-args.thickness*0.5]
 | 
			
		||||
 | 
			
		||||
print(args, file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
DIMX   = 5.0*args.grid*args.dimension
 | 
			
		||||
DIMY   = 3.0*args.grid*args.dimension
 | 
			
		||||
PI3    = math.pi/3
 | 
			
		||||
@@ -75,8 +83,9 @@ def draw_plane(cx, cy, interior=False):
 | 
			
		||||
    turtle.penup()
 | 
			
		||||
    turtle.forward(edge)
 | 
			
		||||
    turtle.right(120)
 | 
			
		||||
    turtle.pendown()
 | 
			
		||||
    if interior:
 | 
			
		||||
        turtle.forward(args.corner_inset)
 | 
			
		||||
        turtle.pendown()
 | 
			
		||||
        for side in range(5):
 | 
			
		||||
            turtle.forward(args.interior_leg)
 | 
			
		||||
            turtle.left(90)
 | 
			
		||||
@@ -87,9 +96,11 @@ def draw_plane(cx, cy, interior=False):
 | 
			
		||||
            turtle.forward(args.thickness)
 | 
			
		||||
            turtle.left(90)
 | 
			
		||||
            turtle.forward(args.interior_leg)
 | 
			
		||||
            turtle.right(60)
 | 
			
		||||
        turtle.forward(args.interior_edge)
 | 
			
		||||
            turtle.circle(-args.corner_radius, 60, 5)
 | 
			
		||||
        turtle.forward(args.interior_edge-2.0*args.corner_inset)
 | 
			
		||||
        turtle.circle(-args.corner_radius, 60, 5)
 | 
			
		||||
    else:
 | 
			
		||||
        turtle.pendown()
 | 
			
		||||
        for side in range(5):
 | 
			
		||||
            for finger in range(args.n_hor_fingers):
 | 
			
		||||
                turtle.forward(args.exterior_leg if finger == 0 else args.horizontal_finger+args.kerf)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								svgturtle.py
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								svgturtle.py
									
									
									
									
									
								
							@@ -40,6 +40,36 @@ class SvgTurtle():
 | 
			
		||||
    def right(self, angle):
 | 
			
		||||
        self.heading = (self.heading + angle*self.cvtangle) % math.tau
 | 
			
		||||
 | 
			
		||||
    def circle(self, radius, extent=360, steps=None):
 | 
			
		||||
        if steps:
 | 
			
		||||
            w  = 1.0*extent/steps
 | 
			
		||||
            w2 = 0.5*w
 | 
			
		||||
            l  = 2.0*radius*math.sin(w2*math.pi/180.0)
 | 
			
		||||
            if radius < 0:
 | 
			
		||||
                l, w, w2 = -l, -w, -w2
 | 
			
		||||
            self.left(w2)
 | 
			
		||||
            for i in range(steps):
 | 
			
		||||
                self.forward(l)
 | 
			
		||||
                self.left(w)
 | 
			
		||||
            self.right(w2)
 | 
			
		||||
        else:
 | 
			
		||||
            ra  = extent*self.cvtangle
 | 
			
		||||
            h   = self.heading-.5*ra if radius>0 else self.heading+.5*ra
 | 
			
		||||
            dx  = abs(radius)*math.cos(h)
 | 
			
		||||
            dy  = abs(radius)*math.sin(h)
 | 
			
		||||
            lg  = 1 if extent >= 180 else 0
 | 
			
		||||
            sw  = 0 if radius > 0 else 1
 | 
			
		||||
            if self.pen:
 | 
			
		||||
                self.path += " a %.2f %.2f %.2f %d %d %.2f %.2f" % (radius, radius, extent, lg, sw, dx, dy)
 | 
			
		||||
            elif self.path != '':
 | 
			
		||||
                self.path += " m %.2f, %.2f" % (dx, dy)
 | 
			
		||||
            self.x += dx
 | 
			
		||||
            self.y += dy
 | 
			
		||||
            if radius > 0:
 | 
			
		||||
                self.left(extent)
 | 
			
		||||
            else:
 | 
			
		||||
                self.right(extent)
 | 
			
		||||
 | 
			
		||||
    def to_s(self):
 | 
			
		||||
        return self.path
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user