updates
This commit is contained in:
parent
0ec2ad29f7
commit
35bd0b6c05
|
@ -1,6 +1,6 @@
|
||||||
from .device import Device
|
from .device import Device
|
||||||
from .drawing import Drawing
|
from .drawing import Drawing
|
||||||
from .paths import simplify_paths, sort_paths, join_paths
|
from .paths import simplify_paths, sort_paths, join_paths, load_paths
|
||||||
from .planner import Planner
|
from .planner import Planner
|
||||||
from .turtle import Turtle
|
from .turtle import Turtle
|
||||||
from .util import draw, reset
|
from .util import draw, reset
|
||||||
|
|
|
@ -8,9 +8,9 @@ from serial.tools.list_ports import comports
|
||||||
|
|
||||||
from .planner import Planner
|
from .planner import Planner
|
||||||
|
|
||||||
TIMESLICE_MS = 10
|
TIMESLICE_MS = 20
|
||||||
|
|
||||||
MICROSTEPPING_MODE = 1
|
MICROSTEPPING_MODE = 2
|
||||||
STEP_DIVIDER = 2 ** (MICROSTEPPING_MODE - 1)
|
STEP_DIVIDER = 2 ** (MICROSTEPPING_MODE - 1)
|
||||||
|
|
||||||
STEPS_PER_INCH = 2032 / STEP_DIVIDER
|
STEPS_PER_INCH = 2032 / STEP_DIVIDER
|
||||||
|
@ -26,7 +26,7 @@ PEN_DOWN_DELAY = 0
|
||||||
|
|
||||||
ACCELERATION = 8
|
ACCELERATION = 8
|
||||||
MAX_VELOCITY = 8
|
MAX_VELOCITY = 8
|
||||||
CORNER_FACTOR = 0.005
|
CORNER_FACTOR = 0.0005
|
||||||
|
|
||||||
VID_PID = '04D8:FD92'
|
VID_PID = '04D8:FD92'
|
||||||
|
|
||||||
|
|
11
axi/paths.py
11
axi/paths.py
|
@ -3,6 +3,17 @@ from shapely.geometry import LineString
|
||||||
|
|
||||||
from .spatial import Index
|
from .spatial import Index
|
||||||
|
|
||||||
|
def load_paths(filename):
|
||||||
|
paths = []
|
||||||
|
with open(filename) as fp:
|
||||||
|
for line in fp:
|
||||||
|
points = filter(None, line.strip().split(';'))
|
||||||
|
if not points:
|
||||||
|
continue
|
||||||
|
path = [tuple(map(float, x.split(','))) for x in points]
|
||||||
|
paths.append(path)
|
||||||
|
return paths
|
||||||
|
|
||||||
def simplify_path(points, tolerance):
|
def simplify_path(points, tolerance):
|
||||||
if len(points) < 2:
|
if len(points) < 2:
|
||||||
return points
|
return points
|
||||||
|
|
|
@ -49,15 +49,23 @@ class Grid(object):
|
||||||
self.lines.pop((i, j))
|
self.lines.pop((i, j))
|
||||||
|
|
||||||
def max_angle(i, d):
|
def max_angle(i, d):
|
||||||
|
if d < 0.1:
|
||||||
|
return pi
|
||||||
|
return pi / 4
|
||||||
a1 = 2 * pi
|
a1 = 2 * pi
|
||||||
a2 = pi / 2
|
a2 = pi / 2
|
||||||
p = min(1, d / 20.0)
|
p = min(1, d / 20.0)
|
||||||
p = p ** 0.5
|
p = p ** 0.5
|
||||||
return a1 + (a2 - a1) * p
|
return a1 + (a2 - a1) * p
|
||||||
|
|
||||||
|
def new_angle(a, d):
|
||||||
|
if d < 0.1:
|
||||||
|
return random.random() * 2 * pi
|
||||||
|
else:
|
||||||
|
return random.gauss(a, pi / 10)
|
||||||
|
|
||||||
def choice(items):
|
def choice(items):
|
||||||
# return random.choice(items)
|
p = random.random() ** 0.5
|
||||||
p = random.random() ** 0.1
|
|
||||||
return items[int(p * len(items))]
|
return items[int(p * len(items))]
|
||||||
|
|
||||||
def poisson_disc(x1, y1, x2, y2, r, n):
|
def poisson_disc(x1, y1, x2, y2, r, n):
|
||||||
|
@ -76,8 +84,9 @@ def poisson_disc(x1, y1, x2, y2, r, n):
|
||||||
ax, ay, aa, ai, ad, ag = record = choice(active)
|
ax, ay, aa, ai, ad, ag = record = choice(active)
|
||||||
for i in range(n):
|
for i in range(n):
|
||||||
# a = random.random() * 2 * pi
|
# a = random.random() * 2 * pi
|
||||||
a = aa + (random.random() - 0.5) * max_angle(ai, ad)
|
# a = aa + (random.random() * 2 - 1) * max_angle(ai, ad)
|
||||||
# a = random.gauss(aa, pi / 8)
|
# a = random.gauss(aa, pi / 8)
|
||||||
|
a = new_angle(aa, ad)
|
||||||
d = random.random() * r + r
|
d = random.random() * r + r
|
||||||
x = ax + cos(a) * d
|
x = ax + cos(a) * d
|
||||||
y = ay + sin(a) * d
|
y = ay + sin(a) * d
|
||||||
|
@ -92,8 +101,6 @@ def poisson_disc(x1, y1, x2, y2, r, n):
|
||||||
pairs.append(pair)
|
pairs.append(pair)
|
||||||
active.append((x, y, a, ai + 1, ad + d, ag))
|
active.append((x, y, a, ai + 1, ad + d, ag))
|
||||||
active.sort(key=lambda x: -x[4])
|
active.sort(key=lambda x: -x[4])
|
||||||
# if random.random() < 0.5:
|
|
||||||
# active.remove(record)
|
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
active.remove(record)
|
active.remove(record)
|
||||||
|
@ -118,11 +125,11 @@ def make_path(pairs):
|
||||||
return path
|
return path
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
random.seed(1182)
|
# random.seed(1182)
|
||||||
points, pairs = poisson_disc(0, 0, 11, 8.5, 0.05, 24)
|
points, pairs = poisson_disc(0, 0, 11, 8.5, 0.035, 32)
|
||||||
path = make_path(pairs)
|
path = make_path(pairs)
|
||||||
drawing = axi.Drawing([path]).scale_to_fit(11, 8.5)
|
drawing = axi.Drawing([path]).scale_to_fit(11, 8.5)
|
||||||
# drawing.render().write_to_png('out.png')
|
drawing.render().write_to_png('out.png')
|
||||||
axi.draw(drawing)
|
axi.draw(drawing)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Loading…
Reference in New Issue