pen test
This commit is contained in:
parent
506e8b6744
commit
6ff92b3a4f
|
@ -0,0 +1,136 @@
|
|||
import axi
|
||||
import math
|
||||
import random
|
||||
|
||||
H, W = axi.A3_SIZE
|
||||
|
||||
def text(font):
|
||||
text = ''.join(map(chr, range(32, 128)))
|
||||
n = 96 // 3
|
||||
text = '\n'.join(text[i:i+n] for i in range(0, 96, n))
|
||||
d = font.wrap(text, W, 1.5)
|
||||
d = d.center(12, 8.5)
|
||||
return d
|
||||
|
||||
def vertical_stack(ds, spacing=0):
|
||||
result = axi.Drawing()
|
||||
y = 0
|
||||
for d in ds:
|
||||
d = d.origin().translate(-d.width / 2, y)
|
||||
result.add(d)
|
||||
y += d.height + spacing
|
||||
return result
|
||||
|
||||
def horizontal_stack(ds, spacing=0):
|
||||
result = axi.Drawing()
|
||||
x = 0
|
||||
for d in ds:
|
||||
d = d.origin().translate(x, -d.height / 2)
|
||||
result.add(d)
|
||||
x += d.width + spacing
|
||||
return result
|
||||
|
||||
def circle(cx, cy, r, revs, points_per_rev):
|
||||
points = []
|
||||
a0 = random.random() * 2 * math.pi
|
||||
n = int(revs * points_per_rev)
|
||||
for i in range(n + 1):
|
||||
a = a0 + revs * 2 * math.pi * i / n
|
||||
x = cx + math.cos(a) * r
|
||||
y = cy + math.sin(a) * r
|
||||
points.append((x, y))
|
||||
return points
|
||||
|
||||
def fill_circle(cx, cy, r1, r2, revs, points_per_rev):
|
||||
points = []
|
||||
a0 = random.random() * 2 * math.pi
|
||||
n = int(revs * points_per_rev)
|
||||
for i in range(n + 1):
|
||||
a = a0 + revs * 2 * math.pi * i / n
|
||||
r = r1 + (r2 - r1) * min(1, float(i) / (n - points_per_rev))
|
||||
x = cx + math.cos(a) * r
|
||||
y = cy + math.sin(a) * r
|
||||
points.append((x, y))
|
||||
return points
|
||||
|
||||
def circles():
|
||||
x = 0
|
||||
r = 0
|
||||
paths = []
|
||||
while x + r < W:
|
||||
paths.append(circle(x, 0, r, 2, 360))
|
||||
x += r
|
||||
r += 0.0025
|
||||
x += r
|
||||
x += 0.1
|
||||
return axi.Drawing(paths)
|
||||
|
||||
def fill_circles():
|
||||
x = 0
|
||||
r = 0
|
||||
paths = []
|
||||
while x + r < W:
|
||||
revs = (r * 80) + 2
|
||||
paths.append(fill_circle(W - x, 0, 0, r, revs, 360))
|
||||
x += r
|
||||
r += 0.0025
|
||||
x += r
|
||||
x += 0.1
|
||||
return axi.Drawing(paths)
|
||||
|
||||
def line():
|
||||
return axi.Drawing([[(0, 0), (W, 0)]])
|
||||
|
||||
def lines():
|
||||
x = 0
|
||||
s0 = 0.01 / 25.4
|
||||
s1 = 3 / 25.4
|
||||
h = 0.5
|
||||
paths = []
|
||||
i = 0
|
||||
while x < W:
|
||||
if i % 2 == 0:
|
||||
paths.append([(x, 0), (x, h)])
|
||||
else:
|
||||
paths.append([(x, h), (x, 0)])
|
||||
pct = x / W
|
||||
# pct = pct ** 2
|
||||
s = s0 + (s1 - s0) * pct
|
||||
x += s
|
||||
i += 1
|
||||
# print(len(paths))
|
||||
return axi.Drawing(paths).join_paths(100)
|
||||
|
||||
def title(name):
|
||||
font = axi.Font(axi.FUTURAL, 18)
|
||||
d = font.wrap(name, W, 1.5)
|
||||
return d
|
||||
|
||||
def main():
|
||||
name = 'Rapidograph 0.1mm'
|
||||
ds = []
|
||||
for font in [axi.FUTURAL, axi.TIMESR, axi.TIMESIB]:
|
||||
d = text(axi.Font(font, 13))
|
||||
ds.append(d)
|
||||
d = horizontal_stack(ds, 0.2).center(W, H)
|
||||
d = vertical_stack([title(name), d], 0.2)
|
||||
d = vertical_stack([d, line()], 0.2)
|
||||
d = vertical_stack([d, line()], 0.1)
|
||||
d = vertical_stack([d, circles()], 0.2)
|
||||
d = vertical_stack([d, fill_circles()], 0.1)
|
||||
d = vertical_stack([d, lines()], 0.2)
|
||||
d = d.move(W / 2, 0, 0.5, 0)
|
||||
d = d.translate(0, 0)
|
||||
print(d.bounds)
|
||||
|
||||
# d = d.sort_paths()
|
||||
# d = d.join_paths(0.01)
|
||||
d = d.simplify_paths(0.001)
|
||||
d = d.rotate(-90).move(0, W / 2, 0, 0.5)
|
||||
print(d.bounds)
|
||||
|
||||
d.dump('out.axi')
|
||||
d.render(bounds=axi.A3_BOUNDS).write_to_png('out.png')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue