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