diff --git a/boxes/servos.py b/boxes/servos.py
index 606b4f3e..08d1c77c 100644
--- a/boxes/servos.py
+++ b/boxes/servos.py
@@ -1,14 +1,14 @@
+from __future__ import annotations
+
import math
import boxes.vectors
class EyeEdge(boxes.edges.FingerHoleEdge):
-
char = "m"
- def __init__(self, boxes, servo, fingerHoles=None, driven=False,
- outset=False, **kw) -> None:
+ def __init__(self, boxes, servo, fingerHoles=None, driven: bool = False, outset: bool = False, **kw) -> None:
self.servo = servo
self.outset = outset
self.driven = driven
@@ -20,18 +20,18 @@ def __call__(self, length, bedBolts=None, bedBoltSettings=None, **kw):
pos_axle = self.servo.hinge_depth()
self.ctx.save()
- self.hole(length/2.0, -pos_axle,
- self.servo.axle/2.0 if self.driven else
- self.servo.servo_axle/2.0)
+ self.hole(length / 2.0,
+ -pos_axle,
+ self.servo.axle / 2.0 if self.driven else self.servo.servo_axle / 2.0)
if self.outset:
- self.fingerHoles(t, self.thickness / 2, length-2*t, 0)
+ self.fingerHoles(t, self.thickness / 2, length - 2 * t, 0)
else:
self.fingerHoles(0, self.thickness / 2, length, 0)
self.ctx.restore()
r = self.servo.servo_axle * 2
- a, l = boxes.vectors.tangent(length/2, pos_axle, r)
+ a, l = boxes.vectors.tangent(length / 2, pos_axle, r)
angle = math.degrees(a)
- self.polyline(0, -angle, l, (2*angle, r), l, -angle, 0)
+ self.polyline(0, -angle, l, (2 * angle, r), l, -angle, 0)
def startwidth(self) -> float:
return self.fingerHoles.settings.thickness
@@ -39,37 +39,35 @@ def startwidth(self) -> float:
def margin(self) -> float:
return self.servo.hinge_depth() + self.fingerHoles.settings.thickness + self.servo.servo_axle * 2
-def buildEdges(boxes, servo, chars="mMnN"):
+
+def buildEdges(boxes, servo, chars: str = "mMnN"):
result = {}
for n, char in enumerate(chars):
- e = EyeEdge(boxes, servo, outset=(n<2), driven=(n % 2))
+ e = EyeEdge(boxes, servo, outset=(n < 2), driven=((n % 2) == 1))
e.char = char
result[char] = e
return result
-class ServoArg:
- def __init__(self, includenone=False) -> None:
+class ServoArg:
+ def __init__(self, includeNone: bool = False) -> None:
self.servos = ["Servo9g"]
- if includenone:
+ if includeNone:
self.servos[0:0] = ["none"]
- def __call__(self, arg):
+ def __call__(self, arg) -> str:
return str(arg)
- def choices(self):
+ def choices(self) -> list[str]:
return [name for name in self.servos]
- def html(self, name, default, translate):
- options = "\n".join(
- """""" %
- (name, ' selected="selected"' if name == default else "",
- name) for name in self.servos)
+ def html(self, name: str, default: str, translate) -> str:
+ options = "\n".join("""""".format(name, ' selected="selected"' if name == default else "", name) for name in self.servos)
return f"""\n"""
class Servo:
- def __init__(self, boxes, axle=3) -> None:
+ def __init__(self, boxes, axle: float = 3) -> None:
self.boxes = boxes
self.axle = axle
self._edges = buildEdges(boxes, self)
@@ -77,46 +75,47 @@ def __init__(self, boxes, axle=3) -> None:
def edges(self, edges):
return [self._edges.get(e, e) for e in edges]
-class Servo9g(Servo):
- height = 22.5
- length = 28.0 # one tab in the wall
- width = 12.0
- axle_pos = 6.0
- servo_axle = 4.6 # 6.9 for servo arm
+class Servo9g(Servo):
+ height: float = 22.5
+ length: float = 28.0 # one tab in the wall
+ width: float = 12.0
+ axle_pos: float = 6.0
+ servo_axle: float = 4.6 # 6.9 for servo arm
- def top(self, x=0.0, y=0.0, angle=90.0):
+ def top(self, x: float = 0.0, y: float = 0.0, angle: float = 90.0) -> None:
self.boxes.moveTo(x, y, angle)
self.boxes.hole(6, 0, 6)
self.boxes.hole(12, 0, 3)
- def bottom(self, x=0.0, y=0.0, angle=90.0):
+ def bottom(self, x: float = 0.0, y: float = 0.0, angle: float = 90.0) -> None:
self.boxes.moveTo(x, y, angle)
- self.boxes.hole(6, 0, self.axle/2.0)
+ self.boxes.hole(6, 0, self.axle / 2.0)
- def front(self, x=0.0, y=0.0, angle=90.0):
+ def front(self, x: float = 0.0, y: float = 0.0, angle: float = 90.0) -> None:
self.boxes.moveTo(x, y, angle)
self.boxes.rectangularHole(5.4, 0, 2.4, 12)
self.boxes.rectangularHole(17, 0, 4, 16)
- def hinge_width(self):
+ def hinge_width(self) -> float:
return self.height + self.boxes.thickness + 4.5
- def hinge_depth(self):
- return self.height # XXX
+ def hinge_depth(self) -> float:
+ return self.height # XXX
+
class Servo9gt(Servo9g):
height = 35
- def top(self, x=0.0, y=0.0, angle=90.0):
+ def top(self, x: float = 0.0, y: float = 0.0, angle: float = 90.0) -> None:
self.boxes.moveTo(x, y, angle)
self.boxes.hole(6, 0, 6)
self.boxes.hole(12, 0, 5)
- def bottom(self, x=0.0, y=0.0, angle=90.0):
+ def bottom(self, x: float = 0.0, y: float = 0.0, angle: float = 90.0) -> None:
self.boxes.moveTo(x, y, angle)
self.boxes.hole(6, 0, self.axle)
- def front(self, x=0.0, y=0.0, angle=90.0):
+ def front(self, x: float = 0.0, y: float = 0.0, angle: float = 90.0) -> None:
self.boxes.moveTo(x, y, angle)
self.boxes.rectangularHole(5.4, 0, 2.4, 12)