edges: code style

This commit is contained in:
Rotzbua 2023-01-23 20:08:03 +01:00 committed by Florian Festi
parent 7cdb8749bf
commit 2a044e7829
1 changed files with 234 additions and 203 deletions

View File

@ -57,6 +57,7 @@ def argparseSections(s):
return result return result
def getDescriptions(): def getDescriptions():
d = {edge.char: edge.description for edge in globals().values() d = {edge.char: edge.description for edge in globals().values()
if inspect.isclass(edge) and issubclass(edge, BaseEdge) if inspect.isclass(edge) and issubclass(edge, BaseEdge)
@ -285,6 +286,7 @@ class Settings:
return self.values[name] return self.values[name]
raise AttributeError raise AttributeError
############################################################################# #############################################################################
### Edges ### Edges
############################################################################# #############################################################################
@ -367,6 +369,7 @@ class OutSetEdge(Edge):
def startwidth(self): def startwidth(self):
return self.boxes.thickness return self.boxes.thickness
############################################################################# #############################################################################
#### MountingEdge #### MountingEdge
############################################################################# #############################################################################
@ -544,7 +547,6 @@ class GroovedEdgeBase(BaseEdge):
def is_inverse(self): def is_inverse(self):
return self.settings.inverse != self.inverse return self.settings.inverse != self.inverse
def groove_arc(self, width, angle=90, inv=-1.0): def groove_arc(self, width, angle=90, inv=-1.0):
side_length = width / math.sin(math.radians(angle)) / 2 side_length = width / math.sin(math.radians(angle)) / 2
self.corner(inv * -angle) self.corner(inv * -angle)
@ -552,7 +554,6 @@ class GroovedEdgeBase(BaseEdge):
self.corner(inv * angle, side_length) self.corner(inv * angle, side_length)
self.corner(inv * -angle) self.corner(inv * -angle)
def groove_soft_arc(self, width, angle=60, inv=-1.0): def groove_soft_arc(self, width, angle=60, inv=-1.0):
side_length = width / math.sin(math.radians(angle)) / 4 side_length = width / math.sin(math.radians(angle)) / 4
self.corner(inv * -angle, side_length) self.corner(inv * -angle, side_length)
@ -560,7 +561,6 @@ class GroovedEdgeBase(BaseEdge):
self.corner(inv * angle, side_length) self.corner(inv * angle, side_length)
self.corner(inv * -angle, side_length) self.corner(inv * -angle, side_length)
def groove_triangle(self, width, angle=45, inv=-1.0): def groove_triangle(self, width, angle=45, inv=-1.0):
side_length = width / math.cos(math.radians(angle)) / 2 side_length = width / math.cos(math.radians(angle)) / 2
self.corner(inv * -angle) self.corner(inv * -angle)
@ -569,7 +569,6 @@ class GroovedEdgeBase(BaseEdge):
self.edge(side_length) self.edge(side_length)
self.corner(inv * -angle) self.corner(inv * -angle)
def __call__(self, length, **kw): def __call__(self, length, **kw):
if length == 0.0: if length == 0.0:
return return
@ -674,6 +673,7 @@ Values:
edges = [GrippingEdge(boxes, self)] edges = [GrippingEdge(boxes, self)]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class GrippingEdge(BaseEdge): class GrippingEdge(BaseEdge):
description = """Corrugated edge useful as an gipping area""" description = """Corrugated edge useful as an gipping area"""
char = 'g' char = 'g'
@ -867,6 +867,7 @@ Values:
] ]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class FingerJointBase: class FingerJointBase:
def calcFingers(self, length, bedBolts): def calcFingers(self, length, bedBolts):
@ -905,6 +906,7 @@ class FingerJointBase:
spacerecess = -math.sin(math.radians(b)) * fingerlength spacerecess = -math.sin(math.radians(b)) * fingerlength
return fingerlength + self.settings.extra_length, spacerecess return fingerlength + self.settings.extra_length, spacerecess
class FingerJointEdge(BaseEdge, FingerJointBase): class FingerJointEdge(BaseEdge, FingerJointBase):
"""Finger joint edge """ """Finger joint edge """
char = 'f' char = 'f'
@ -1063,6 +1065,7 @@ class FingerHoles(FingerJointBase):
self.boxes.rectangularHole(pos + 0.5 * f, 0, self.boxes.rectangularHole(pos + 0.5 * f, 0,
f + p, self.settings.width + p) f + p, self.settings.width + p)
class FingerHoleEdge(BaseEdge): class FingerHoleEdge(BaseEdge):
"""Edge with holes for a parallel finger joint""" """Edge with holes for a parallel finger joint"""
char = 'h' char = 'h'
@ -1101,6 +1104,7 @@ class FingerHoleEdge(BaseEdge):
else: else:
return 0 return 0
class CrossingFingerHoleEdge(Edge): class CrossingFingerHoleEdge(Edge):
"""Edge with holes for finger joints 90° above""" """Edge with holes for finger joints 90° above"""
@ -1121,6 +1125,7 @@ class CrossingFingerHoleEdge(Edge):
def startwidth(self): def startwidth(self):
return self.outset return self.outset
############################################################################# #############################################################################
#### Stackable Joints #### Stackable Joints
############################################################################# #############################################################################
@ -1169,6 +1174,7 @@ Values:
] ]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class StackableBaseEdge(BaseEdge): class StackableBaseEdge(BaseEdge):
"""Edge for having stackable Boxes. The Edge creates feet on the bottom """Edge for having stackable Boxes. The Edge creates feet on the bottom
and has matching recesses on the top corners.""" and has matching recesses on the top corners."""
@ -1218,6 +1224,7 @@ class StackableBaseEdge(BaseEdge):
else: else:
return self.settings.height return self.settings.height
class StackableEdge(StackableBaseEdge): class StackableEdge(StackableBaseEdge):
"""Edge for having stackable Boxes. The Edge creates feet on the bottom """Edge for having stackable Boxes. The Edge creates feet on the bottom
and has matching recesses on the top corners.""" and has matching recesses on the top corners."""
@ -1233,11 +1240,13 @@ class StackableEdge(StackableBaseEdge):
length, 0) length, 0)
super().__call__(length, **kw) super().__call__(length, **kw)
class StackableEdgeTop(StackableBaseEdge): class StackableEdgeTop(StackableBaseEdge):
char = "S" char = "S"
description = "Stackable (top)" description = "Stackable (top)"
bottom = False bottom = False
class StackableFeet(StackableBaseEdge): class StackableFeet(StackableBaseEdge):
char = "š" char = "š"
description = "Stackable feet (bottom)" description = "Stackable feet (bottom)"
@ -1245,6 +1254,7 @@ class StackableFeet(StackableBaseEdge):
def _height(self): def _height(self):
return self.settings.height return self.settings.height
class StackableHoleEdgeTop(StackableBaseEdge): class StackableHoleEdgeTop(StackableBaseEdge):
char = "Š" char = "Š"
description = "Stackable edge with finger holes (top)" description = "Stackable edge with finger holes (top)"
@ -1261,6 +1271,7 @@ class StackableHoleEdgeTop(StackableBaseEdge):
length, 0) length, 0)
super().__call__(length, **kw) super().__call__(length, **kw)
############################################################################# #############################################################################
#### Hinges #### Hinges
############################################################################# #############################################################################
@ -1311,6 +1322,7 @@ Values:
] ]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class Hinge(BaseEdge): class Hinge(BaseEdge):
char = 'i' char = 'i'
description = "Straight edge with hinge eye" description = "Straight edge with hinge eye"
@ -1526,6 +1538,7 @@ class HingePin(BaseEdge):
self.edge(l - plen - glen, tabs=2) self.edge(l - plen - glen, tabs=2)
getattr(self, self.settings.style, self.outset)(True) getattr(self, self.settings.style, self.outset)(True)
############################################################################# #############################################################################
#### Chest Hinge #### Chest Hinge
############################################################################# #############################################################################
@ -1574,8 +1587,8 @@ Values:
] ]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class ChestHinge(BaseEdge):
class ChestHinge(BaseEdge):
description = "Edge with chest hinge" description = "Edge with chest hinge"
char = "o" char = "o"
@ -1631,6 +1644,7 @@ class ChestHinge(BaseEdge):
return 0 return 0
return self.settings.pin_height + self.settings.hinge_strength return self.settings.pin_height + self.settings.hinge_strength
class ChestHingeTop(ChestHinge): class ChestHingeTop(ChestHinge):
"""Edge above a chest hinge""" """Edge above a chest hinge"""
@ -1681,8 +1695,8 @@ class ChestHingeTop(ChestHinge):
else: else:
return 1 * (self.settings.play + self.settings.pin_height + self.settings.hinge_strength) return 1 * (self.settings.play + self.settings.pin_height + self.settings.hinge_strength)
class ChestHingePin(BaseEdge):
class ChestHingePin(BaseEdge):
description = "Edge with pins for an chest hinge" description = "Edge with pins for an chest hinge"
char = "q" char = "q"
@ -1710,7 +1724,6 @@ class ChestHingePin(BaseEdge):
class ChestHingeFront(Edge): class ChestHingeFront(Edge):
description = "Edge opposing a chest hinge" description = "Edge opposing a chest hinge"
char = "Q" char = "Q"
@ -1718,6 +1731,7 @@ class ChestHingeFront(Edge):
def startwidth(self): def startwidth(self):
return self.settings.pin_height + self.settings.hinge_strength return self.settings.pin_height + self.settings.hinge_strength
############################################################################# #############################################################################
#### Cabinet Hinge #### Cabinet Hinge
############################################################################# #############################################################################
@ -1762,6 +1776,7 @@ Values:
e.char = c e.char = c
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class CabinetHingeEdge(BaseEdge): class CabinetHingeEdge(BaseEdge):
"""Edge with cabinet hinges""" """Edge with cabinet hinges"""
@ -1777,7 +1792,6 @@ class CabinetHingeEdge(BaseEdge):
def startwidth(self): def startwidth(self):
return self.settings.thickness if self.top and self.angled else 0.0 return self.settings.thickness if self.top and self.angled else 0.0
def __poly(self): def __poly(self):
n = self.settings.eyes_per_hinge n = self.settings.eyes_per_hinge
p = self.settings.play p = self.settings.play
@ -1909,6 +1923,7 @@ class CabinetHingeEdge(BaseEdge):
self.move(th, tw, move, label="hinges") self.move(th, tw, move, label="hinges")
############################################################################# #############################################################################
#### Slide-on lid #### Slide-on lid
############################################################################# #############################################################################
@ -1953,6 +1968,7 @@ Values:
] ]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class LidEdge(FingerJointEdge): class LidEdge(FingerJointEdge):
char = "l" char = "l"
description = "Edge for slide on lid (back)" description = "Edge for slide on lid (back)"
@ -1966,6 +1982,7 @@ class LidEdge(FingerJointEdge):
else: else:
super().__call__(length) super().__call__(length)
class LidHoleEdge(FingerHoleEdge): class LidHoleEdge(FingerHoleEdge):
char = "L" char = "L"
description = "Edge for slide on lid (box back)" description = "Edge for slide on lid (box back)"
@ -1979,6 +1996,7 @@ class LidHoleEdge(FingerHoleEdge):
else: else:
super().__call__(length) super().__call__(length)
class LidRight(BaseEdge): class LidRight(BaseEdge):
char = "n" char = "n"
description = "Edge for slide on lid (right)" description = "Edge for slide on lid (right)"
@ -2029,11 +2047,13 @@ class LidRight(BaseEdge):
else: else:
return 0.0 return 0.0
class LidLeft(LidRight): class LidLeft(LidRight):
char = "m" char = "m"
description = "Edge for slide on lid (left)" description = "Edge for slide on lid (left)"
rightside = False rightside = False
class LidSideRight(BaseEdge): class LidSideRight(BaseEdge):
char = "N" char = "N"
description = "Edge for slide on lid (box right)" description = "Edge for slide on lid (box right)"
@ -2082,11 +2102,13 @@ class LidSideRight(BaseEdge):
def margin(self): def margin(self):
return self.boxes.thickness + self.settings.edge_width + self.settings.play / 2 if not self.rightside else 0.0 return self.boxes.thickness + self.settings.edge_width + self.settings.play / 2 if not self.rightside else 0.0
class LidSideLeft(LidSideRight): class LidSideLeft(LidSideRight):
char = "M" char = "M"
description = "Edge for slide on lid (box left)" description = "Edge for slide on lid (box left)"
rightside = False rightside = False
############################################################################# #############################################################################
#### Click Joints #### Click Joints
############################################################################# #############################################################################
@ -2119,6 +2141,7 @@ Values:
ClickEdge(boxes, self)] ClickEdge(boxes, self)]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class ClickConnector(BaseEdge): class ClickConnector(BaseEdge):
char = "c" char = "c"
description = "Click on (bottom side)" description = "Click on (bottom side)"
@ -2266,6 +2289,7 @@ Values:
DoveTailJointCounterPart(boxes, self)] DoveTailJointCounterPart(boxes, self)]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class DoveTailJoint(BaseEdge): class DoveTailJoint(BaseEdge):
"""Edge with dove tail joints """ """Edge with dove tail joints """
@ -2357,6 +2381,7 @@ Values:
if self.width < 0.1: if self.width < 0.1:
raise ValueError("Flex Settings: width parameter must be > 0.1mm") raise ValueError("Flex Settings: width parameter must be > 0.1mm")
class FlexEdge(BaseEdge): class FlexEdge(BaseEdge):
"""Edge with flex cuts - use straight edge for the opposing side""" """Edge with flex cuts - use straight edge for the opposing side"""
char = 'X' char = 'X'
@ -2411,6 +2436,7 @@ class FlexEdge(BaseEdge):
self.ctx.line_to(x, 0) self.ctx.line_to(x, 0)
self.ctx.translate(*self.ctx.get_current_point()) self.ctx.translate(*self.ctx.get_current_point())
class GearSettings(Settings): class GearSettings(Settings):
"""Settings for rack (and pinion) edge """Settings for rack (and pinion) edge
Values: Values:
@ -2431,8 +2457,8 @@ Values:
relative_params = {} relative_params = {}
class RackEdge(BaseEdge):
class RackEdge(BaseEdge):
char = "R" char = "R"
description = "Rack (and pinion) Edge" description = "Rack (and pinion) Edge"
@ -2457,6 +2483,7 @@ class RackEdge(BaseEdge):
def margin(self): def margin(self):
return self.settings.dimension * 1.1 return self.settings.dimension * 1.1
class RoundedTriangleEdgeSettings(Settings): class RoundedTriangleEdgeSettings(Settings):
"""Settings for RoundedTriangleEdge """Settings for RoundedTriangleEdge
Values: Values:
@ -2488,11 +2515,13 @@ Values:
RoundedTriangleFingerHolesEdge(boxes, self)] RoundedTriangleFingerHolesEdge(boxes, self)]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
class RoundedTriangleEdge(Edge): class RoundedTriangleEdge(Edge):
"""Makes an 'edge' with a rounded triangular bumpout and """Makes an 'edge' with a rounded triangular bumpout and
optional hole""" optional hole"""
description = "Triangle for handle" description = "Triangle for handle"
char = "t" char = "t"
def __call__(self, length, **kw): def __call__(self, length, **kw):
length += 2 * self.settings.outset length += 2 * self.settings.outset
r = self.settings.radius r = self.settings.radius
@ -2525,8 +2554,8 @@ class RoundedTriangleEdge(Edge):
def margin(self): def margin(self):
return self.settings.height + self.settings.radius return self.settings.height + self.settings.radius
class RoundedTriangleFingerHolesEdge(RoundedTriangleEdge):
class RoundedTriangleFingerHolesEdge(RoundedTriangleEdge):
char = "T" char = "T"
def startwidth(self): def startwidth(self):
@ -2572,6 +2601,7 @@ Values:
HandleHoleEdge(boxes, self)] HandleHoleEdge(boxes, self)]
return self._edgeObjects(edges, boxes, chars, add) return self._edgeObjects(edges, boxes, chars, add)
# inspiration came from https://www.thingiverse.com/thing:327393 # inspiration came from https://www.thingiverse.com/thing:327393
class HandleEdge(Edge): class HandleEdge(Edge):
@ -2631,6 +2661,7 @@ class HandleEdge(Edge):
def margin(self): def margin(self):
return self.settings.height return self.settings.height
class HandleHoleEdge(HandleEdge): class HandleHoleEdge(HandleEdge):
"""Extends an 'edge' by adding a rounded bumpout with optional holes and holes for parallel finger joint""" """Extends an 'edge' by adding a rounded bumpout with optional holes and holes for parallel finger joint"""
description = "Handle with holes for parallel finger joint" description = "Handle with holes for parallel finger joint"