Add labels to some generators

This commit is contained in:
SuksAE 2022-05-14 10:35:58 +02:00 committed by GitHub
parent c998509a7e
commit ece304bf1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 91 additions and 87 deletions

View File

@ -1,12 +1,16 @@
class Color:
BLACK = [ 0.0, 0.0, 0.0 ]
BLUE = [ 0.0, 0.0, 1.0 ]
GREEN = [ 0.0, 1.0, 0.0 ]
RED = [ 1.0, 0.0, 0.0 ]
WHITE = [ 1.0, 1.0, 1.0 ]
BLACK = [ 0.0, 0.0, 0.0 ]
BLUE = [ 0.0, 0.0, 1.0 ]
GREEN = [ 0.0, 1.0, 0.0 ]
RED = [ 1.0, 0.0, 0.0 ]
CYAN = [ 0.0, 1.0, 1.0 ]
YELLOW = [ 1.0, 1.0, 0.0 ]
MAGENTA = [ 1.0, 0.0, 1.0 ]
WHITE = [ 1.0, 1.0, 1.0 ]
# TODO: Make this configurable
OUTER_CUT = BLACK
INNER_CUT = BLUE
ANNOTATIONS = RED
ETCHING = GREEN
ETCHING_DEEP = CYAN

View File

@ -1608,7 +1608,7 @@ class CabinetHingeEdge(BaseEdge):
th = 4*e+3*t+self.boxes.spacing
tw = max(e, 2*t) * pairs
if self.move(tw, th, move, True):
if self.move(tw, th, move, True, label="hinges"):
return
if self.settings.style == "outside":
@ -1631,7 +1631,7 @@ class CabinetHingeEdge(BaseEdge):
90, t, 90, (ax+t)-e, -90, l-3*t, (90, e))
self.moveTo(2*max(e, 1.5*t) + self.boxes.spacing)
self.move(tw, th, move)
self.move(tw, th, move, label="hinges")
return
if e <= 2*t:
@ -1651,7 +1651,7 @@ class CabinetHingeEdge(BaseEdge):
if i % 2:
self.moveTo(2*max(e, 2*t) + 2*self.boxes.spacing)
self.move(th, tw, move)
self.move(th, tw, move, label="hinges")
#############################################################################
#### Slide-on lid

View File

@ -117,28 +117,28 @@ class BinTray(Boxes):
# outer walls
e = ["F", "f", edges.SlottedEdge(self, self.sx[::-1], "G"), "f"]
self.rectangularWall(x, h, e, callback=[self.xHoles], move="right")
self.rectangularWall(y, h, "FFbF", callback=[self.yHoles, ], move="up")
self.rectangularWall(y, h, "FFbF", callback=[self.yHoles, ])
self.rectangularWall(x, h, "Ffef", callback=[self.xHoles, ], move="left")
self.rectangularWall(x, h, e, callback=[self.xHoles], move="right", label="bottom")
self.rectangularWall(y, h, "FFbF", callback=[self.yHoles, ], move="up", label="left")
self.rectangularWall(y, h, "FFbF", callback=[self.yHoles, ], label="right")
self.rectangularWall(x, h, "Ffef", callback=[self.xHoles, ], move="left", label="top")
self.rectangularWall(y, h, "FFBF", move="up only")
# floor
self.rectangularWall(x, y, "ffff", callback=[self.xSlots, self.ySlots],move="right")
self.rectangularWall(x, y, "ffff", callback=[self.xSlots, self.ySlots],move="right", label="back")
# Inner walls
for i in range(len(self.sx) - 1):
e = [edges.SlottedEdge(self, self.sy, "f"), "f", "B", "f"]
self.rectangularWall(y, hi, e, move="up")
self.rectangularWall(y, hi, e, move="up", label="inner vertical " + str(i+1))
for i in range(len(self.sy) - 1):
e = [edges.SlottedEdge(self, self.sx, "f", slots=0.5 * hi), "f",
edges.SlottedEdge(self, self.sx[::-1], "G"), "f"]
self.rectangularWall(x, hi, e, move="up")
self.rectangularWall(x, hi, e, move="up", label="inner horizontal " + str(i+1))
# Front walls
for i in range(len(self.sy)):
e = [edges.SlottedEdge(self, self.sx, "g"), "F", "e", "F"]
self.rectangularWall(x, self.sy[i]*self.front*2**0.5, e, callback=[self.frontHoles(i)], move="up")
self.rectangularWall(x, self.sy[i]*self.front*2**0.5, e, callback=[self.frontHoles(i)], move="up", label="retainer " + str(i+1))

View File

@ -31,7 +31,7 @@ class StorageShelf(_TopEdge):
"top_edge")
self.argparser.add_argument(
"--retainer", action="store", type=float, default=0.0,
help="height of wall atthe front edges")
help="height of retaining wall at the front edges")
self.argparser.add_argument(
"--retainer_hole_edge", action="store", type=boolarg, default=False,
help="use finger hole edge for retainer walls")
@ -92,15 +92,15 @@ class StorageShelf(_TopEdge):
# outer walls
# XXX retainer
self.rectangularWall(x, h, [b, "F", t1, "e"], callback=[None, self.hHoles, ], move="up")
self.rectangularWall(x, h, [b, "e", t3, "F"], callback=[None, self.hHoles, ], move="up")
self.rectangularWall(x, h, [b, "F", t1, "e"], callback=[None, self.hHoles, ], move="up", label="left")
self.rectangularWall(x, h, [b, "e", t3, "F"], callback=[None, self.hHoles, ], move="up", label="right")
# floor
if b != "e":
e = "fffe"
if self.retainer:
e = "ffff"
self.rectangularWall(x, y, e, callback=[None, self.yHoles], move="up")
self.rectangularWall(x, y, e, callback=[None, self.yHoles], move="up", label="bottom")
# inner walls
@ -111,22 +111,22 @@ class StorageShelf(_TopEdge):
if self.retainer:
e[3] = "f"
self.rectangularWall(x, y, e, move="up")
self.rectangularWall(x, y, e, move="up", label="inner horizontal " + str(i+1))
# top / lid
if self.closedtop:
e = "FFFe" if self.top_edge == "f" else "fffe"
self.rectangularWall(x, y, e, callback=[None, self.yHoles, ], move="up")
self.rectangularWall(x, y, e, callback=[None, self.yHoles, ], move="up", label="top")
else:
self.drawLid(x, y, self.top_edge)
self.ctx.restore()
self.rectangularWall(x, h, "ffff", move="right only")
self.rectangularWall(x, h, "ffff", move="right only", label="invisible")
# y walls
# outer walls
self.rectangularWall(y, h, [b, "f", t2, "f"], callback=[self.ySlots, self.hSlots,], move="up")
self.rectangularWall(y, h, [b, "f", t2, "f"], callback=[self.ySlots, self.hSlots,], move="up", label="back")
# inner walls
for i in range(len(self.sy) - 1):
@ -135,7 +135,7 @@ class StorageShelf(_TopEdge):
"e", "f"]
if self.closedtop:
e = [be, edges.SlottedEdge(self, self.sh, "e", slots=0.5 * x),"f", "f"]
self.rectangularWall(x, h, e, move="up")
self.rectangularWall(x, h, e, move="up", label="inner vertical " + str(i+1))
if self.retainer:
@ -144,4 +144,4 @@ class StorageShelf(_TopEdge):
e = "FEeE"
if self.retainer_hole_edge or (i == 0 and b == "h"):
e = "hEeE"
self.rectangularWall(y, self.retainer, e, move="up")
self.rectangularWall(y, self.retainer, e, move="up", label="retainer " + str(i+1))

View File

@ -85,13 +85,13 @@ When turned by 90°, it can be also used to create a bottle holder."""
def frontCB(self):
self.hole(self.h/2, self.h/2, self.h/2-self.thickness)
def wall(self, h1, h2, w, edges="ffef", callback=None, move=""):
def wall(self, h1, h2, w, edges="ffef", callback=None, move="", label = ""):
edges = [self.edges.get(e, e) for e in edges]
edges += edges # append for wrapping around
overallwidth = w + edges[-1].spacing() + edges[1].spacing()
overallheight = max(h1, h2) + edges[0].spacing() + edges[2].spacing()
if self.move(overallwidth, overallheight, move, before=True):
if self.move(overallwidth, overallheight, move, before=True, label= label):
return
a = math.atan((h2-h1)/float(w))
@ -112,7 +112,7 @@ When turned by 90°, it can be also used to create a bottle holder."""
edges[3](h1)
self.edgeCorner(edges[3], edges[3 + 1], 90)
self.move(overallwidth, overallheight, move)
self.move(overallwidth, overallheight, move, label = label)
def render(self):
# adjust to the variables you want in the local scope
@ -126,44 +126,44 @@ When turned by 90°, it can be also used to create a bottle holder."""
self.addPart(ShadyEdge(self, None))
# back
self.rectangularWall(th, h, "FFFF", callback=[self.backCB], move="up")
self.rectangularWall(th, h, "FFFF", callback=[self.backCB], move="up", label = "back")
if self.upright:
# sides
self.rectangularWall(th, d, "fFsF", callback=[self.sideCB], move="up")
self.rectangularWall(th, d, "fFsF", callback=[self.sideCB], move="up")
self.rectangularWall(th, d, "fFsF", callback=[self.sideCB], move="up", label = "left")
self.rectangularWall(th, d, "fFsF", callback=[self.sideCB], move="up", label = "right")
# horizontal Walls / blinds tops
e = edges.CompoundEdge(self, "fF", (d, s))
e2 = edges.CompoundEdge(self, "Ff", (s, d))
for i in range(n):
self.rectangularWall(h, d+s, ['f', e, 'e', e2],
move="right" if i<n-1 else "right up")
move="right" if i<n-1 else "right up", label="horizontal Wall " + str(i+1))
else:
# bottom
self.rectangularWall(th, d, "fFeF", callback=[self.sideCB],
move="up")
move="up", label="bottom")
# top
self.rectangularWall(th, d+s, "fFeF", callback=[self.topCB],
move="up")
move="up", label="top")
# vertical walls
for i in range(n):
self.wall(d, d+s, h, move="right" if i<n-1 else "right up")
self.wall(d, d+s, h, move="right" if i<n-1 else "right up", label="vertical wall " + str(i+1))
# fronts
for i in range(n):
self.rectangularWall(h, h, "efef", callback=[self.frontCB],
move="left" if i<n-1 else "left up")
move="left" if i<n-1 else "left up", label="front " + str(i+1))
if self.upright:
# bottom wall
self.rectangularWall(h, d, "ffef", move="up")
self.rectangularWall(h, d, "ffef", move="up", label="bottom wall")
else:
# vertical wall
self.wall(d, d+s, h, move="up")
self.wall(d, d+s, h, move="up", label="vertical wall")
# Colored windows
for i in range(n):
self.parts.disc(h-2*t, move="right")
self.parts.disc(h-2*t, move="right", label="colored window " + str(i+1))

View File

@ -37,14 +37,14 @@ class UBox(_TopEdge, _ChestLid):
help="additional lid")
self.angle = 0
def U(self, x, y, r, edge="e", move=None):
def U(self, x, y, r, edge="e", move=None, label=""):
e = self.edges.get(edge, edge)
w = self.edges["f"].spacing()
tw = x+2*w
th = y+w+e.spacing()
if self.move(tw, th, move, True):
if self.move(tw, th, move, True, label=label):
return
self.moveTo(w+r, w)
@ -57,9 +57,9 @@ class UBox(_TopEdge, _ChestLid):
self.edges["f"](y-r)
self.corner(90, r)
self.move(tw, th, move)
self.move(tw, th, move, label=label)
def Uwall(self, x, y, h, r, edges="ee", move=None):
def Uwall(self, x, y, h, r, edges="ee", move=None, label=""):
e = [self.edges.get(edge, edge) for edge in edges]
@ -68,7 +68,7 @@ class UBox(_TopEdge, _ChestLid):
tw = 2*y + x - 4*(cl-r) + e[0].spacing() + e[1].spacing()
th = h + 2*w
if self.move(tw, th, move, True):
if self.move(tw, th, move, True, label=label):
return
self.moveTo(e[0].spacing())
@ -86,7 +86,7 @@ class UBox(_TopEdge, _ChestLid):
e[nr](h)
self.edgeCorner(e[nr], "F")
self.move(tw, th, move)
self.move(tw, th, move, label=label)
def render(self):
x, y, h, r = self.x, self.y, self.h, self.radius
@ -96,10 +96,10 @@ class UBox(_TopEdge, _ChestLid):
t1, t2, t3, t4 = self.topEdges(self.top_edge)
self.U(x, y, r, t1, move="right")
self.U(x, y, r, t3, move="up")
self.U(x, y, r, t3, move="left only")
self.Uwall(x, y, h, r, [t2, t4], move="up")
self.U(x, y, r, t1, move="right", label="left")
self.U(x, y, r, t3, move="up", label="right")
self.U(x, y, r, t3, move="left only", label="invisible")
self.Uwall(x, y, h, r, [t2, t4], move="up", label="wall")
self.drawLid(x, h, self.top_edge)
self.drawAddOnLid(x, h, self.lid)

View File

@ -80,29 +80,29 @@ class UniversalBox(_TopEdge, _ChestLid):
with self.saved_context():
self.rectangularWall(x, h, [b, sideedge, t1, sideedge],
ignore_widths=[1, 6],
bedBolts=[d2], move="up")
bedBolts=[d2], move="up", label="left")
self.rectangularWall(x, h, [b, sideedge, t3, sideedge],
ignore_widths=[1, 6],
bedBolts=[d2], move="up")
bedBolts=[d2], move="up", label="right")
if self.bottom_edge != "e":
self.rectangularWall(x, y, "ffff", bedBolts=[d2, d3, d2, d3], move="up")
self.rectangularWall(x, y, "ffff", bedBolts=[d2, d3, d2, d3], move="up", label="bottom")
if self.top_edge in "fF":
self.set_source_color(Color.RED)
self.set_source_color(Color.MAGENTA) # I don't know why this part has a different color, but RED is not a good choice because RED is used for annotations
self.rectangularWall(x+4*t, y+4*t, callback=[
lambda:self.top_hole(x, y, self.top_edge)], move="up")
lambda:self.top_hole(x, y, self.top_edge)], move="up", label="top hole")
self.set_source_color(Color.BLACK)
self.drawLid(x, y, self.top_edge, [d2, d3])
self.drawAddOnLid(x, y, self.lid)
self.rectangularWall(x, h, [b, sideedge, t3, sideedge],
ignore_widths=[1, 6],
bedBolts=[d2], move="right only")
bedBolts=[d2], move="right only", label="invisible")
self.rectangularWall(y, h, [b, "f", t2, "f"],
ignore_widths=[1, 6],
bedBolts=[d3], move="up")
bedBolts=[d3], move="up", label="back")
self.rectangularWall(y, h, [b, "f", t4, "f"],
ignore_widths=[1, 6],
bedBolts=[d3], move="up")
bedBolts=[d3], move="up", label="front")

View File

@ -24,7 +24,7 @@ class _ChestLid(Boxes):
r = d / 2.0 / math.cos(math.radians(angle))
return r
def side(self, x, angle=0, move=""):
def side(self, x, angle=0, move="", label=""):
if "a" not in self.edges:
s = edges.FingerJointSettings(self.thickness, True,
finger=1.0, space=1.0)
@ -32,7 +32,7 @@ class _ChestLid(Boxes):
t = self.thickness
r = self.getR(x, angle)
if self.move(x+2*t, 0.5*x+3*t, move, True):
if self.move(x+2*t, 0.5*x+3*t, move, True, label=label):
return
self.moveTo(t, 0)
@ -43,9 +43,9 @@ class _ChestLid(Boxes):
self.edges["a"](3*t)
self.corner(90+angle)
self.move(x+2*t, 0.5*x+3*t, move, False)
self.move(x+2*t, 0.5*x+3*t, move, False, label=label)
def top(self, x, y, angle=0, move=None):
def top(self, x, y, angle=0, move=None, label=""):
if "a" not in self.edges:
s = edges.FingerJointSettings(self.thickness, True,
finger=1.0, space=1.0)
@ -57,7 +57,7 @@ class _ChestLid(Boxes):
tw = l + 6*t
th = y+2*t
if self.move(tw, th, move, True):
if self.move(tw, th, move, True, label=label):
return
self.edges["A"](3*t)
@ -73,17 +73,17 @@ class _ChestLid(Boxes):
self.edge(y+2*t)
self.corner(90)
self.move(tw, th, move)
self.move(tw, th, move, label=label)
def drawAddOnLid(self, x, y, style):
if style == "flat":
self.rectangularWall(x, y, "eeee", move="right")
self.rectangularWall(x, y, "EEEE", move="up")
self.rectangularWall(x, y, "eeee", move="right", label="lid bottom")
self.rectangularWall(x, y, "EEEE", move="up", label="lid top")
elif style == "chest":
self.side(x, move="right")
self.side(x, move="up")
self.side(x, move="left only")
self.top(x, y, move="up")
self.side(x, move="right", label="lid right")
self.side(x, move="up", label="lid left")
self.side(x, move="left only", label="invisible")
self.top(x, y, move="up", label="lid top")
else:
return False
return True
@ -122,32 +122,32 @@ class _TopEdge(Boxes):
def drawLid(self, x, y, top_edge, bedBolts=[None, None]):
d2, d3 = bedBolts
if top_edge == "c":
self.rectangularWall(x, y, "CCCC", bedBolts=[d2, d3, d2, d3], move="up")
self.rectangularWall(x, y, "CCCC", bedBolts=[d2, d3, d2, d3], move="up", label="top")
elif top_edge == "f":
self.rectangularWall(x, y, "FFFF", move="up")
self.rectangularWall(x, y, "FFFF", move="up", label="top")
elif top_edge in "FhŠ":
self.rectangularWall(x, y, "ffff", move="up")
self.rectangularWall(x, y, "ffff", move="up", label="top")
elif top_edge == "L":
self.rectangularWall(x, y, "nlmE", move="up")
self.rectangularWall(x, y, "nlmE", move="up", label="lid top")
elif top_edge == "i":
self.rectangularWall(x, y, "IEJe", move="up")
self.rectangularWall(x, y, "IEJe", move="up", label="lid top")
elif top_edge == "k":
outset = self.edges["k"].settings.outset
self.edges["k"].settings.setValues(self.thickness, outset=True)
lx = x/2.0-0.1*self.thickness
self.edges['k'].settings.setValues(self.thickness, grip_length=5)
self.rectangularWall(lx, y, "IeJe", move="right")
self.rectangularWall(lx, y, "IeJe", move="up")
self.rectangularWall(lx, y, "IeJe", move="left only")
self.rectangularWall(lx, y, "IeJe", move="right", label="lid top left")
self.rectangularWall(lx, y, "IeJe", move="up", label="lid top right")
self.rectangularWall(lx, y, "IeJe", move="left only", label="invisible")
self.edges["k"].settings.setValues(self.thickness, outset=outset)
elif top_edge == "S":
self.rectangularWall(x, y, "ffff", move="up")
self.rectangularWall(x, 0, "sFeF", move="up")
self.rectangularWall(x, 0, "sFeF", move="up")
self.rectangularWall(y, 0, "sfef", move="up")
self.rectangularWall(y, 0, "sfef", move="up")
self.rectangularWall(x, y, "ffff", move="up", label="lid top")
self.rectangularWall(x, 0, "sFeF", move="up", label="lid top left")
self.rectangularWall(x, 0, "sFeF", move="up", label="lid top right")
self.rectangularWall(y, 0, "sfef", move="up", label="lid top front")
self.rectangularWall(y, 0, "sfef", move="up", label="lid top back")
elif top_edge == "v":
self.rectangularWall(x, y, "VEEE", move="up")
self.rectangularWall(x, y, "VEEE", move="up", label="lid top")
self.edges["v"].parts(move="up")
else:
return False

View File

@ -25,7 +25,7 @@ class Parts:
def __getattr__(self, name):
return getattr(self.boxes, name)
def disc(self, diameter, hole=0, callback=None, move=""):
def disc(self, diameter, hole=0, callback=None, move="", label=""):
"""Simple disc
:param diameter: diameter of the disc
@ -36,7 +36,7 @@ class Parts:
size = diameter
r = diameter / 2.0
if self.move(size, size, move, before=True):
if self.move(size, size, move, before=True, label=label):
return
self.moveTo(size / 2, size / 2)
@ -47,7 +47,7 @@ class Parts:
self.cc(callback, None, 0, 0)
self.moveTo(r + self.burn, 0, 90)
self.corner(360, r, tabs=6)
self.move(size, size, move)
self.move(size, size, move, label=label)
def waivyKnob(self, diameter, n=20, angle=45, hole=0, callback=None, move=""):
"""Disc with a waivy edge to be easier to be gripped