untested cleanup
19
.gitignore
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# Byte-compiled / optimized
|
||||
*.pyc
|
||||
*.pyo
|
||||
__pycache__/
|
||||
|
||||
# Virtual environments
|
||||
venv/
|
||||
.venv/
|
||||
env/
|
||||
|
||||
# IDE
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*~
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
62
Command.py
@@ -1,82 +1,74 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import math
|
||||
|
||||
|
||||
class Command:
|
||||
inicoms= ("IN", "SP", "LT") # nicht benutzt
|
||||
scalecoms=("PA", "PD", "PR", "PU", "CI" ) # Liste skalierbarer HPGL-Befehle
|
||||
movecoms=("PA", "PD", "PU" ) # Liste verschiebbarer HPGL-Befehle
|
||||
inicoms = ("IN", "SP", "LT") # nicht benutzt
|
||||
scalecoms = ("PA", "PD", "PR", "PU", "CI") # Liste skalierbarer HPGL-Befehle
|
||||
movecoms = ("PA", "PD", "PU") # Liste verschiebbarer HPGL-Befehle
|
||||
abscoms = ("PA", "PD", "PU")
|
||||
relcoms = ("PR")
|
||||
arccoms = ("CI", "AA")
|
||||
|
||||
def __init__(self, name, *args):
|
||||
self.name = name # Befehlname
|
||||
self.args = args # Argsliste
|
||||
self.name = name
|
||||
self.args = args
|
||||
|
||||
@property
|
||||
def scalable(self):
|
||||
return True \
|
||||
if self.name in Command.scalecoms and self.args else \
|
||||
False
|
||||
return self.name in Command.scalecoms and self.args
|
||||
|
||||
@property
|
||||
def movable(self):
|
||||
return True \
|
||||
if self.name in Command.movecoms and self.args else \
|
||||
False
|
||||
return self.name in Command.movecoms and self.args
|
||||
|
||||
@property
|
||||
def x(self):
|
||||
#Baustelle da es Befehle gibt die mehrere Args haben
|
||||
return self.args[0] \
|
||||
if self.movable else\
|
||||
None
|
||||
return self.args[0] if self.args else None
|
||||
|
||||
@property
|
||||
def y(self):
|
||||
if len(self.args)<2 :
|
||||
return None
|
||||
return self.args[1] \
|
||||
if self.movable else\
|
||||
None
|
||||
return self.args[-1] if self.args else None
|
||||
|
||||
def __trunc__(self):
|
||||
return Command(self.name,*[int(arg) for arg in self.args])
|
||||
return Command(self.name, *[int(arg) for arg in self.args])
|
||||
|
||||
def __len__(self):
|
||||
return len(str(self)) # Byte-L<>nge des Befehls
|
||||
return len(str(self))
|
||||
|
||||
def __str__(self):
|
||||
return self.name + ",".join(str(int(arg)) for arg in self.args) + ";"
|
||||
|
||||
def __mul__(self, factor): # multipliziert falls skalable mit factor
|
||||
def __mul__(self, factor):
|
||||
if not self.scalable:
|
||||
return self
|
||||
if type(factor) == type(0) or type(factor) == type(0.0):
|
||||
# Faktor kann skalar oder Tuple sein
|
||||
factor = (factor, factor)
|
||||
return Command(self.name,(self.args[0] * factor[0]),(self.args[1] * factor[1])) \
|
||||
if len(self.args)>1 else\
|
||||
Command(self.name,(self.args[0]*factor[0]) ) # wichtig f<>r Befehle mit nur einem Argument
|
||||
return Command(self.name, (self.args[0] * factor[0]), (self.args[1] * factor[1])) \
|
||||
if len(self.args) > 1 else \
|
||||
Command(self.name, (self.args[0] * factor[0]))
|
||||
|
||||
def __add__(self, addend):
|
||||
if not self.movable:
|
||||
return self
|
||||
if type(addend) == type(0) or type(addend) == type(0.0):
|
||||
addend = (addend, addend)
|
||||
#print( "ADD ", self.name )
|
||||
return Command(self.name,(self.x + addend[0]),(self.y + addend[1]))
|
||||
return Command(self.name, (self.x + addend[0]), (self.y + addend[1]))
|
||||
|
||||
def __sub__(self, addend):
|
||||
if type(addend) == type(0) or type(addend) == type(0.0):
|
||||
addend = (addend, addend)
|
||||
return self + (-addend[0], -addend[1])
|
||||
|
||||
def rotate(self, angl): # multiplikation mit Rot-Matrix
|
||||
def rotate(self, angl):
|
||||
if not self.movable:
|
||||
return self
|
||||
cosa=math.cos(angl*math.pi/180)
|
||||
sina=math.sin(angl*math.pi/180)
|
||||
return Command((self.name,self.x*cosa-self.y*sina),(self.y*cosa+self.x*sina))
|
||||
cosa = math.cos(angl * math.pi / 180)
|
||||
sina = math.sin(angl * math.pi / 180)
|
||||
return Command(self.name, (self.x * cosa - self.y * sina), (self.y * cosa + self.x * sina))
|
||||
|
||||
def flip(self): # Spiegelung
|
||||
def flip(self):
|
||||
if not self.movable:
|
||||
return self
|
||||
return Command(self.name,self.y,-self.x)
|
||||
return Command(self.name, self.x, -self.y)
|
||||
|
||||
BIN
Fensterplott.zip
65
Plotter.py
@@ -1,22 +1,23 @@
|
||||
from __future__ import division
|
||||
import pyserial
|
||||
import serial
|
||||
|
||||
|
||||
class Plotter:
|
||||
|
||||
def __init__(self,boundaries=None):
|
||||
self.__boundaries=boundaries
|
||||
self.p0incenter = True
|
||||
def __init__(self, boundaries=None):
|
||||
self.boundaries = boundaries
|
||||
self.p0incenter = False
|
||||
if not boundaries:
|
||||
s=self.getoutput('OW;')
|
||||
s = self.getoutput(b'OW;')
|
||||
print(s)
|
||||
if not s:
|
||||
self.ser=None
|
||||
self.ser = None
|
||||
else:
|
||||
self.__boundaries = tuple(int(x) for x in "".join(s).split(","))
|
||||
self.boundaries = tuple(int(x) for x in "".join(s).split(","))
|
||||
|
||||
def getoutput(self,outstr):
|
||||
def getoutput(self, outstr):
|
||||
try:
|
||||
self.ser = serial.Serial('/dev/ttyUSB0',timeout=15)
|
||||
self.ser = serial.Serial('/dev/ttyUSB0', timeout=15)
|
||||
print('try to get Status')
|
||||
if not self.ser:
|
||||
print('Plotter not available')
|
||||
@@ -26,64 +27,60 @@ class Plotter:
|
||||
s = []
|
||||
while True:
|
||||
x = self.ser.read()
|
||||
|
||||
if x == "\x0d" or not x:
|
||||
if x == b"\x0d" or not x:
|
||||
break
|
||||
s.append(x)
|
||||
return ''.join(s)
|
||||
return b''.join(s).decode()
|
||||
except OSError:
|
||||
return None
|
||||
|
||||
@property
|
||||
def xmin(self):
|
||||
return self.__boundaries[0]
|
||||
return self.boundaries[0]
|
||||
|
||||
@property
|
||||
def ymin(self):
|
||||
return self.__boundaries[1]
|
||||
return self.boundaries[1]
|
||||
|
||||
@property
|
||||
def xmax(self):
|
||||
return self.__boundaries[2]
|
||||
return self.boundaries[2]
|
||||
|
||||
@property
|
||||
def ymax(self):
|
||||
return self.__boundaries[3]
|
||||
return self.boundaries[3]
|
||||
|
||||
@property
|
||||
def center(self):
|
||||
return (self.xmin + self.xmax)/2, (self.ymin + self.ymax)/2
|
||||
return (self.xmin + self.xmax) / 2, (self.ymin + self.ymax) / 2
|
||||
|
||||
def write(self,programm):
|
||||
self.ser.write(str(programm))
|
||||
def write(self, programm):
|
||||
self.ser.write(str(programm).encode())
|
||||
|
||||
@property
|
||||
def winsize(self):
|
||||
return self.xmax-self.xmin , self.ymax - self.ymin
|
||||
return self.xmax - self.xmin, self.ymax - self.ymin
|
||||
|
||||
def oob(self, prog):
|
||||
return (prog.xmax > self.xmax or prog.xmin < self.xmin or prog.ymin < self.ymin or prog.ymax > self.ymax)
|
||||
return (prog.xmax > self.xmax or prog.xmin < self.xmin or
|
||||
prog.ymin < self.ymin or prog.ymax > self.ymax)
|
||||
|
||||
def full(self,prog):
|
||||
arg = min(self.winsize[0]/prog.winsize[0],self.winsize[1]/prog.winsize[1])
|
||||
#print self.winsize[0]/prog.winsize[0],self.winsize[1]/prog.winsize[1])
|
||||
print('Scale Factor', arg)
|
||||
return prog*arg
|
||||
def full(self, prog):
|
||||
"""Scale program to fit plotter bounds."""
|
||||
arg = min(self.winsize[0] / prog.winsize[0], self.winsize[1] / prog.winsize[1])
|
||||
return prog * arg
|
||||
|
||||
def plot(self,prog):
|
||||
if self.ready and (not self.oob(prog)) :
|
||||
def plot(self, prog):
|
||||
if self.ready and (not self.oob(prog)):
|
||||
self.write(prog)
|
||||
|
||||
if self.oob(prog):
|
||||
print('programm out of bound')
|
||||
if not self.ready:
|
||||
print('device not ready')
|
||||
|
||||
def centralize(self, prog):
|
||||
return prog - prog.center if self.p0incenter else prog - (prog.xmin, prog.ymin)
|
||||
|
||||
def centralize(self,prog):
|
||||
return prog-prog.center \
|
||||
if self.p0incenter else \
|
||||
prog-(prog.xmin,prog.ymin)
|
||||
@property
|
||||
def ready(self):
|
||||
return bool(self.getoutput('OS;'))
|
||||
|
||||
|
||||
123
Program.py
@@ -1,35 +1,75 @@
|
||||
|
||||
import math
|
||||
from Command import *
|
||||
import tkinter as tk
|
||||
|
||||
|
||||
class Program:
|
||||
|
||||
def __init__(self, commands=None):
|
||||
self.commands = commands or []
|
||||
self.active=True
|
||||
self.visible=False
|
||||
self.filename=''
|
||||
self.commands = commands if commands is not None else []
|
||||
self.active = True
|
||||
self.visible = False
|
||||
self.filename = ''
|
||||
if self.commands:
|
||||
self.xmin, self.ymin, self.xmax, self.ymax = self.__simulate()
|
||||
else:
|
||||
self.xmin = self.ymin = self.xmax = self.ymax = 0
|
||||
|
||||
def __simulate(self):
|
||||
(x, y) = (0, 0)
|
||||
xy = []
|
||||
for command in self.commands:
|
||||
if not command.args:
|
||||
continue
|
||||
elif command.name in command.abscoms:
|
||||
x, y = command.x, command.y
|
||||
xy.append((x, y))
|
||||
elif command.name in command.relcoms:
|
||||
x, y = x + command.x, y + command.y
|
||||
xy.append((x, y))
|
||||
elif command.name in command.arccoms:
|
||||
xy += [(x + command.x, y + command.x), (x - command.x, y - command.x)]
|
||||
if not xy:
|
||||
return [0, 0, 0, 0]
|
||||
return [m([v[i] for v in xy]) for m, i in ((min, 0), (min, 1), (max, 0), (max, 1))]
|
||||
|
||||
def parsefile(self, filename):
|
||||
@staticmethod
|
||||
def parsefile(filename):
|
||||
with open(filename) as file:
|
||||
self.parse( file.read())
|
||||
return Program.parse(file.read())
|
||||
|
||||
def parse(self, code):
|
||||
@staticmethod
|
||||
def parse(code):
|
||||
commands = []
|
||||
for command in code.strip().split(";")[:-1]:
|
||||
name, args = command[:2], command[2:]
|
||||
args = [float(arg) for arg in args.split(",")] if args else []
|
||||
# Experimental
|
||||
#if name=='CI':
|
||||
#self.commands.append(Command('PR',args[0]))
|
||||
#self.commands.append(Command('PR',args[0]))
|
||||
#self.commands.append(Command('PR',args[0]))
|
||||
if name in Command.movecoms and len(args) > 2:
|
||||
for i in range(0, len(args), 2):
|
||||
commands.append(Command(name, args[i], args[i + 1]))
|
||||
else:
|
||||
commands.append(Command(name, *args))
|
||||
return Program(commands)
|
||||
|
||||
self.commands.append(Command(name, *args))
|
||||
|
||||
|
||||
def __trunc__ (self):
|
||||
return Program([int(command) for command in self.commands])
|
||||
def show(self, w=None):
|
||||
p = self.flip()
|
||||
p = p.rotate(270)
|
||||
p = p.fitin((0, 0, 1024, 600), (0, 0))
|
||||
win = tk.Tk()
|
||||
win.title('HPGLPLOTTER')
|
||||
canvas = tk.Canvas(win, width=p.winsize[0], height=p.winsize[1])
|
||||
canvas.grid(row=0, column=0)
|
||||
x = y = 0
|
||||
for command in p.commands:
|
||||
if command.name == 'PU':
|
||||
x, y = command.x, command.y
|
||||
elif command.name == 'PD':
|
||||
canvas.create_line(x, y, command.x, command.y)
|
||||
x, y = command.x, command.y
|
||||
elif command.name == 'CI':
|
||||
r = command.args[0]
|
||||
canvas.create_oval(x - r, y - r, x + r, y + r)
|
||||
win.mainloop()
|
||||
|
||||
def __str__(self):
|
||||
return "".join(str(command) for command in self.commands)
|
||||
@@ -38,8 +78,8 @@ class Program:
|
||||
return Program([command * arg for command in self.commands])
|
||||
|
||||
def __add__(self, arg):
|
||||
if type(arg)== type(self):
|
||||
return Program( self.commands + arg.commands )
|
||||
if type(arg) == type(self):
|
||||
return Program(self.commands + arg.commands)
|
||||
return Program([command + arg for command in self.commands])
|
||||
|
||||
def __sub__(self, arg):
|
||||
@@ -54,22 +94,37 @@ class Program:
|
||||
def flip(self):
|
||||
return Program([command.flip() for command in self.commands if command])
|
||||
|
||||
@property
|
||||
def xmax(self):
|
||||
return max(command.x for command in self.commands if command.x and command.movable)
|
||||
@property
|
||||
def xmin(self):
|
||||
return min(command.x for command in self.commands if command.x and command.movable)
|
||||
@property
|
||||
def ymax(self):
|
||||
return max(command.y for command in self.commands if command.y and command.movable)
|
||||
@property
|
||||
def ymin(self):
|
||||
return min(command.y for command in self.commands if command.y and command.movable)
|
||||
def scaleto(self, ab):
|
||||
a, b = ab
|
||||
w, h = self.winsize
|
||||
if w == 0 or h == 0:
|
||||
return self
|
||||
return self * min(a / w, b / h)
|
||||
|
||||
def moveto(self, ab):
|
||||
a, b = ab
|
||||
return self - (self.xmin - a, self.ymin - b)
|
||||
|
||||
def fitin(self, xys, fxy):
|
||||
(x1, y1, x2, y2) = xys
|
||||
(fx, fy) = fxy
|
||||
p = self.scaleto((x2 - x1, y2 - y1))
|
||||
return p.moveto((x1 + fx * (x2 - x1 - p.winsize[0]), y1 + fy * (y2 - y1 - p.winsize[1])))
|
||||
|
||||
def multi(self, w, h):
|
||||
dist = 40
|
||||
out = self
|
||||
p = self.winsize
|
||||
for i in range(w):
|
||||
for j in range(h):
|
||||
if w != 0 and h != 0:
|
||||
out = out + (self + (i * p[0] + i * dist, j * p[1] + j * dist))
|
||||
return out
|
||||
|
||||
@property
|
||||
def center(self):
|
||||
return ((self.xmin+self.xmax)/2),((self.ymin+self.ymax)/2)
|
||||
return ((self.xmin + self.xmax) / 2), ((self.ymin + self.ymax) / 2)
|
||||
|
||||
@property
|
||||
def winsize(self):
|
||||
return self.xmax-self.xmin , self.ymax - self.ymin
|
||||
return self.xmax - self.xmin, self.ymax - self.ymin
|
||||
|
||||
42
README.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# HPGL Plotter Manager
|
||||
|
||||
Manage HPGL files and send them to a plotter. Single core library (refac version at root), generators, and unified output folder for all graphics.
|
||||
|
||||
## Folder structure
|
||||
|
||||
```
|
||||
mimaki/
|
||||
├── Command.py, Program.py, Plotter.py # Core HPGL library (parse, scale, send to plotter)
|
||||
├── main.py # Main entry: load HPGL, scale, send to plotter
|
||||
├── maintk.py, hpglView.py # Tk-based viewer / GUI
|
||||
├── output/ # All HPGL and SVG files
|
||||
│ ├── hpgl/ # HPGL plot files
|
||||
│ └── svg/ # SVG and related assets
|
||||
├── generators/ # Scripts that generate HPGL (or related graphics)
|
||||
│ ├── hilbert.py, koche.py, koch.py, kochger.py
|
||||
│ ├── mandelbrot.py, moebius.py, potter.py
|
||||
│ ├── refac/ # hilbert, lorenz, K18650, Kleber
|
||||
│ └── apollon/ # Apollonian gasket → SVG/HPGL
|
||||
└── docs/ # HPGL / plotter documentation (PDFs)
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
- **Run main (load file and send to plotter):**
|
||||
From project root: `python main.py`
|
||||
Edit `main.py` to change the file (default: `output/hpgl/kreis.hpgl`).
|
||||
|
||||
- **Load HPGL and show in window:**
|
||||
`python show_hpgl.py`
|
||||
|
||||
- **Run a generator:**
|
||||
From project root, e.g.
|
||||
`python generators/potter.py`
|
||||
|
||||
- **Open/save files in GUI:**
|
||||
`python maintk.py` — use File → Open and point to files under `output/hpgl/` or `output/svg/`.
|
||||
|
||||
## Paths
|
||||
|
||||
- All HPGL and SVG live under **`output/hpgl/`** and **`output/svg/`**.
|
||||
- Run scripts from the project root so paths like `output/hpgl/...` resolve correctly.
|
||||
BIN
TUlogo.png
|
Before Width: | Height: | Size: 28 KiB |
4
apollon-master/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
*~
|
||||
*pyc
|
||||
__pycache__/
|
||||
html/
|
||||
1338
apollon.html
63
docs/refac-vs-root-diff.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# refac vs root (historical)
|
||||
|
||||
**The refac version is now the main version** (root Command.py, Program.py, Plotter.py). This doc is kept for reference.
|
||||
|
||||
Original comparison of the core modules: **Command.py**, **Program.py**, **Plotter.py**.
|
||||
|
||||
---
|
||||
|
||||
## Command.py
|
||||
|
||||
| Aspect | Root | refac |
|
||||
|--------|------|--------|
|
||||
| **import math** | ❌ Missing (bug: `rotate()` uses `math.cos`/`math.sin`) | ✅ Present |
|
||||
| **Class attributes** | `inicoms`, `scalecoms`, `movecoms` only | Same + **`abscoms`**, **`relcoms`**, **`arccoms`** (for PA/PD/PU, PR, CI/AA) |
|
||||
| **scalable / movable** | `return True if ... else False` | `return self.name in ... and self.args` (shorter, same meaning) |
|
||||
| **x** | `self.args[0] if self.movable else None` | `self.args[0] if self.args else None` |
|
||||
| **y** | `self.args[1] if self.movable else None` (and `len(self.args)<2` check with wrong indent) | `self.args[-1] if self.args else None` (works for single-arg commands like CI) |
|
||||
| **rotate()** | `Command((self.name, ...), (...))` → **bug**: first arg is a tuple, not name | ✅ `Command(self.name, ...)` |
|
||||
| **flip()** | `Command(self.name, self.y, -self.x)` → **wrong**: swaps x/y | ✅ `Command(self.name, self.x, -self.y)` (mirror in y) |
|
||||
|
||||
**Summary:** refac fixes missing `math`, corrects `rotate()` and `flip()`, and adds command-type sets used by Program parsing/simulation.
|
||||
|
||||
---
|
||||
|
||||
## Program.py
|
||||
|
||||
| Aspect | Root | refac |
|
||||
|--------|------|--------|
|
||||
| **__init__** | `commands or []`; no bounds | `commands` (can be None); if commands given, **computes bounds once** via `__simulate()` |
|
||||
| **Bounds (xmin, xmax, …)** | **@property** – computed from commands each time | Set once in **__init__** from `__simulate()` (no property; no update if commands change) |
|
||||
| **parsefile / parse** | **Instance methods**: `p.parsefile(f)` mutates `self.commands` | **@staticmethod**: `Program.parsefile(f)` / `Program.parse(code)` **return new Program** |
|
||||
| **Parsing** | One Command per semicolon; all args in one list | **Multi-point PA/PD/PU**: if `len(args)>2`, splits into (x,y) pairs and creates one Command per point |
|
||||
| **show()** | ❌ Not in Program (show in main.py) | ✅ **Program.show()**: flip, rotate 270°, fitin to 1024×600, Tk canvas |
|
||||
| **fitin(), scaleto(), moveto()** | ❌ Not in root | ✅ Present (scale/move to rectangle with alignment fx, fy) |
|
||||
| **multi(w, h)** | ❌ Not in root | ✅ Tile program in w×h grid with spacing |
|
||||
| **Program.parse() return** | N/A (mutates self) | Returns **Program(commands)** |
|
||||
|
||||
**Summary:** refac adds static parsing (return new Program), multi-point parsing, simulation for bounds, and helpers: show(), fitin(), scaleto(), moveto(), multi().
|
||||
|
||||
---
|
||||
|
||||
## Plotter.py
|
||||
|
||||
| Aspect | Root | refac |
|
||||
|--------|------|--------|
|
||||
| **Import** | `import pyserial` (wrong name; should be `serial`) | `import serial` |
|
||||
| **Boundaries storage** | `self.__boundaries` (private) | `self.boundaries` (public) |
|
||||
| **p0incenter** | `True` | `False` |
|
||||
| **getoutput()** | `self.ser.read()` → str; returns `''.join(s)` | **Bytes**: `outstr` used as-is; `x == b"\x0d"`; returns `b''.join(s).decode()` |
|
||||
| **write()** | `self.ser.write(str(programm))` (str) | `self.ser.write(str(programm).encode())` (bytes) |
|
||||
| **full(prog)** | ✅ Scale prog to fit plotter bounds | ❌ **Removed** (scaling done elsewhere, e.g. Program.fitin) |
|
||||
| **centralize()** | Same logic | Same logic (behavior differs only if p0incenter differs) |
|
||||
|
||||
**Summary:** refac uses proper `serial` and bytes for Python 3; drops `full()`; different default for `p0incenter`.
|
||||
|
||||
---
|
||||
|
||||
## Overall
|
||||
|
||||
- **refac** = cleaned-up, Python‑3‑friendly version: correct Command (math, rotate, flip), static Program parsing, multi-point parsing, bounds simulation, fitin/show/multi, and serial over bytes.
|
||||
- **Root** = older version: Command has bugs (no math, wrong rotate/flip), instance-method parsing only, no fitin/show/multi, and broken `pyserial` import.
|
||||
|
||||
Recommendation: use **refac** as the main implementation and, if needed, replace root with it (or make root a thin wrapper around refac).
|
||||
@@ -1,6 +1,9 @@
|
||||
import math
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from hilbertcurve.hilbertcurve import HilbertCurve
|
||||
penthickness=28
|
||||
penthickness = 28
|
||||
import Program
|
||||
import Command
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import math
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
import Program
|
||||
import Command
|
||||
|
||||
C = math.sqrt( 3 )
|
||||
C = math.sqrt(3)
|
||||
|
||||
def koch( x, y, smin=1, nmax=None ):
|
||||
r=min(x,y)
|
||||
@@ -1,3 +1,6 @@
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from Plotter import *
|
||||
from Command import *
|
||||
from Program import *
|
||||
@@ -25,9 +28,8 @@ def show(p):
|
||||
canvas.create_oval(x-r,y-r,x+r,y+r)
|
||||
win.mainloop()
|
||||
|
||||
plt=Plotter()
|
||||
p=Program()
|
||||
p.parsefile('hpgl/Lars.plt')
|
||||
plt = Plotter()
|
||||
p = Program.parsefile('output/hpgl/Lars.plt')
|
||||
p=p.flip()
|
||||
p=plt.full(p)
|
||||
p=plt.centralize(p)
|
||||
@@ -1,3 +1,6 @@
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '..'))
|
||||
from Command import *
|
||||
from Program import *
|
||||
import math
|
||||
@@ -1,3 +1,6 @@
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '..'))
|
||||
from Command import *
|
||||
from Program import *
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import math
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '..'))
|
||||
from Program import Program
|
||||
from Command import Command
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import numpy as np
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '..'))
|
||||
from scipy.integrate import odeint
|
||||
import matplotlib.pyplot as plt
|
||||
from mpl_toolkits.mplot3d import Axes3D
|
||||
@@ -1 +0,0 @@
|
||||
IN;SP1;PU0,0;PD0,90;PU736,445;PD739,444,745,465,746,465,759,499,761,498,776,520,777,519,794,539,794,538,813,557,814,556,836,571,837,569,858,577,858,575,880,578,880,576,901,575,900,573,910,571,909,569,919,565,917,562,929,552,927,550,936,536,934,535,942,512,940,511,943,486,940,486,938,468,937,468,933,448,932,448,926,425,921,428,919,433,919,435,726,435,728,440,732,444,737,445,739,444,745,465,746,465,753,482;PU945,276;PD940,277,935,275,932,270,931,265,934,260,936,259,927,244,910,221,909,222,890,200,889,201,868,182,867,183,845,170,845,171,822,161,821,162,798,154,798,156,774,152,774,154,751,156,751,157,740,160,741,162,731,166,731,167,722,174,723,175,714,182,715,184,701,202,703,203,692,226,694,227,689,251,691,251,692,276,693,276,696,303,697,303,703,333,707,331,710,327,711,324,1136,323,1134,329,1131,332,1128,333,1143,387,1142,387,1152,434,1151,434,1154,457,1155,477,1154,477,1152,513,1151,513,1147,550,1146,549,1136,584,1135,584,1129,600,1128,600,1119,616,1118,615,1099,641,1097,640,1073,663,1072,662,1045,681,1045,680,1016,696,1015,695,986,706,986,705,956,712,955,711,924,715,924,714,893,715,893,714,859,712,859,711,826,706,794,698,794,697,762,686,762,685,727,670,727,669,694,651,694,650,662,629,662,628,632,605,633,604,604,576,577,545,578,545,554,512,533,478,533,477,513,439,514,438,496,398,497,398,483,356,484,356,473,314,474,314,468,275,469,275,465,235,466,235,467,196,469,196,476,158,477,158,487,131,488,132,501,106,503,106,519,82,520,83,540,62,541,63,560,48,560,49,581,37,582,38,604,28,604,29,626,21,627,21,650,15,650,16,674,12,674,13,722,10,722,11,775,13,775,14,802,18,828,24,827,25,853,33,878,43,878,44,926,68,925,69,971,98,971,99,1013,133,1012,134,1033,155,1054,180,1054,181,1078,210,1073,212,1067,211,1063,208,1062,207,932,272,931,266,933,261,936,259,927,244,913,226;PU1796,241;PD1796,241,1769,197,1768,197,1743,161,1742,161,1717,130,1716,131,1692,107,1691,107,1665,85,1665,86,1637,65,1637,66,1608,48,1608,49,1586,38,1586,39,1564,30,1564,31,1518,18,1517,19,1468,11,1468,12,1418,10,1418,11,1363,15,1363,16,1335,20,1336,22,1309,29,1309,30,1289,39,1289,40,1269,50,1270,51,1251,64,1252,65,1235,80,1237,81,1220,102,1221,103,1207,127,1208,127,1197,153,1198,153,1190,179,1191,179,1188,197,1189,197,1187,217,1188,217,1187,259,1188,259,1190,308,1195,306,1198,302,1199,298,1428,298,1427,293,1423,289,1418,288,1416,288,1413,270,1414,270,1410,240,1412,240,1414,213,1415,213,1418,200,1420,201,1424,188,1426,189,1438,171,1440,173,1456,159,1458,161,1477,153,1478,155,1499,152,1499,155,1519,157,1518,159,1538,165,1537,166,1561,179,1560,180,1581,196,1580,198,1600,220,1599,221,1617,246,1616,246,1643,291,1647,287,1648,282,1648,281,1812,247,1809,242,1805,239,1799,239,1796,241,1775,207;PU1636,431;PD1632,435,1631,441,1633,446,1637,449,1642,450,1644,468,1643,468,1644,498,1643,498,1642,519,1641,519,1639,529,1638,529,1634,538,1632,537,1623,549,1621,547,1609,555,1608,553,1594,558,1593,555,1578,557,1578,555,1557,553,1558,551,1538,545,1539,542,1527,535,1528,534,1517,525,1518,524,1500,503,1501,502,1490,485,1480,467,1481,466,1463,429,1464,428,1437,357,1422,314,1418,317,1416,322,1415,324,1187,324,1188,329,1192,332,1197,334,1200,333,1223,399,1224,399,1247,455,1260,482,1260,481,1273,504,1274,504,1295,535,1319,565,1320,564,1346,593,1346,592,1374,618,1375,618,1401,639,1402,639,1430,659,1430,658,1460,676,1460,675,1492,689,1492,688,1528,701,1529,700,1566,709,1566,708,1605,714,1605,713,1643,715,1667,714,1667,713,1691,711,1691,710,1714,705,1714,704,1737,698,1737,697,1756,690,1756,689,1775,680,1775,679,1793,668,1792,667,1808,654,1807,653,1824,635,1823,635,1837,615,1836,614,1847,593,1846,592,1855,570,1854,569,1857,554,1856,554,1859,536,1858,536,1860,499,1859,499,1858,455,1853,457,1849,461,1848,464,1631,439,1632,444,1636,448,1641,450,1642,450,1644,468,1643,468,1644,490;PU203,21;PD198,19,194,16,193,11,127,10,127,12,95,15,95,17,79,20,80,21,65,27,65,28,49,37,50,38,35,50,36,51,23,64,24,65,14,81,15,82,10,95,12,96,9,110,11,110,10,139,12,139,18,167,19,167,24,184,23,184,124,535,118,535,114,533,111,528,111,526,17,526,18,531,22,535,27,536,29,535,77,702,81,699,84,695,84,693,178,693,177,698,173,701,172,702,236,857,241,854,243,849,243,848,452,848,450,843,446,839,441,838,439,838,395,683,400,683,404,686,407,690,407,693,550,693,549,687,545,684,540,683,538,683,490,516,485,519,483,524,483,526,340,526,341,521,345,517,347,516,282,288,282,289,273,262,273,261,267,238,268,237,265,216,266,215,267,203,269,203,273,191,276,192,288,178,290,180,306,170,307,173,330,168,330,170,354,170,354,171,403,175,402,170,398,166,393,164,390,165,348,19,344,22,341,27,286,18,286,19,237,13,193,10,193,11,153,11;SP0;PU0,0;IN;
|
||||
326
janos.hpgl~
@@ -1,326 +0,0 @@
|
||||
##sK1 1 2
|
||||
document()
|
||||
layout('A4',(595.276,841.89),0)
|
||||
grid((0,0,2.83465,2.83465),0,("RGB",0.0,0.0,1.0),'Gitter')
|
||||
page('','A4',(595.276,841.89),0)
|
||||
layer('PLT_objects',1,1,0,0,("RGB",0.196,0.314,0.635))
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(172.984,382.535,0)
|
||||
bs(173.693,381.827,0)
|
||||
bs(173.976,381.827,0)
|
||||
bs(174.543,382.039,0)
|
||||
bs(174.969,381.898,0)
|
||||
bs(175.11,381.26,0)
|
||||
bs(175.11,376.299,0)
|
||||
bs(175.323,376.087,0)
|
||||
bs(176.669,376.087,0)
|
||||
bs(176.811,376.299,0)
|
||||
bs(176.811,381.26,0)
|
||||
bs(176.669,382.252,0)
|
||||
bs(176.173,382.961,0)
|
||||
bs(175.465,383.457,0)
|
||||
bs(174.543,383.598,0)
|
||||
bs(173.48,383.315,0)
|
||||
bs(172.913,382.819,0)
|
||||
bs(172.984,382.535,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(180.709,382.535,0)
|
||||
bs(181.063,382.394,0)
|
||||
bs(181.205,382.11,0)
|
||||
bs(181.063,381.756,0)
|
||||
bs(180.709,381.614,0)
|
||||
bs(180.425,381.756,0)
|
||||
bs(180.283,382.11,0)
|
||||
bs(180.425,382.394,0)
|
||||
bs(180.709,382.535,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(179.929,378,0)
|
||||
bs(179.646,377.504,0)
|
||||
bs(179.717,377.291,0)
|
||||
bs(181.559,376.228,0)
|
||||
bs(181.843,376.228,0)
|
||||
bs(182.197,376.866,0)
|
||||
bs(182.126,377.22,0)
|
||||
bs(180.213,378.071,0)
|
||||
bs(179.929,378,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(180.496,380.764,0)
|
||||
bs(181.276,380.976,0)
|
||||
bs(181.205,380.48,0)
|
||||
bs(180.709,380.339,0)
|
||||
bs(179.646,380.48,0)
|
||||
bs(179.362,380.268,0)
|
||||
bs(179.291,379.559,0)
|
||||
bs(179.433,379.276,0)
|
||||
bs(180.85,379.134,0)
|
||||
bs(181.701,379.276,0)
|
||||
bs(182.268,379.559,0)
|
||||
bs(182.551,380.126,0)
|
||||
bs(182.693,380.976,0)
|
||||
bs(182.693,383.315,0)
|
||||
bs(182.48,383.528,0)
|
||||
bs(181.984,383.528,0)
|
||||
bs(181.772,383.386,0)
|
||||
bs(181.63,383.102,0)
|
||||
bs(181.205,383.386,0)
|
||||
bs(180.354,383.598,0)
|
||||
bs(179.291,383.244,0)
|
||||
bs(178.937,382.181,0)
|
||||
bs(179.291,381.189,0)
|
||||
bs(179.787,380.906,0)
|
||||
bs(180.496,380.764,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(184.819,379.488,0)
|
||||
bs(185.031,379.276,0)
|
||||
bs(185.528,379.276,0)
|
||||
bs(185.669,379.346,0)
|
||||
bs(185.882,379.772,0)
|
||||
bs(186.378,379.346,0)
|
||||
bs(187.37,379.134,0)
|
||||
bs(188.22,379.346,0)
|
||||
bs(188.858,379.772,0)
|
||||
bs(189.213,380.48,0)
|
||||
bs(189.354,381.331,0)
|
||||
bs(189.354,383.315,0)
|
||||
bs(189.142,383.528,0)
|
||||
bs(188.008,383.528,0)
|
||||
bs(187.866,383.315,0)
|
||||
bs(187.866,381.331,0)
|
||||
bs(187.654,380.764,0)
|
||||
bs(187.087,380.551,0)
|
||||
bs(186.52,380.693,0)
|
||||
bs(186.307,381.26,0)
|
||||
bs(186.307,383.315,0)
|
||||
bs(186.094,383.528,0)
|
||||
bs(185.031,383.528,0)
|
||||
bs(184.819,383.315,0)
|
||||
bs(184.819,379.488,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(193.323,382.252,0)
|
||||
bs(193.961,381.969,0)
|
||||
bs(194.173,381.331,0)
|
||||
bs(193.961,380.764,0)
|
||||
bs(193.323,380.48,0)
|
||||
bs(192.756,380.764,0)
|
||||
bs(192.543,381.331,0)
|
||||
bs(192.756,381.969,0)
|
||||
bs(193.323,382.252,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(193.323,379.134,0)
|
||||
bs(194.173,379.346,0)
|
||||
bs(194.882,379.772,0)
|
||||
bs(195.378,380.48,0)
|
||||
bs(195.591,381.331,0)
|
||||
bs(195.378,382.252,0)
|
||||
bs(194.882,382.961,0)
|
||||
bs(194.173,383.457,0)
|
||||
bs(193.323,383.598,0)
|
||||
bs(192.472,383.457,0)
|
||||
bs(191.764,382.961,0)
|
||||
bs(191.339,382.252,0)
|
||||
bs(191.126,381.331,0)
|
||||
bs(191.339,380.48,0)
|
||||
bs(191.764,379.772,0)
|
||||
bs(192.472,379.346,0)
|
||||
bs(193.323,379.134,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(197.22,383.031,0)
|
||||
bs(197.575,382.323,0)
|
||||
bs(197.858,382.181,0)
|
||||
bs(198.78,382.465,0)
|
||||
bs(198.992,382.323,0)
|
||||
bs(198.85,382.11,0)
|
||||
bs(198.354,381.827,0)
|
||||
bs(197.504,381.26,0)
|
||||
bs(197.22,380.409,0)
|
||||
bs(197.575,379.488,0)
|
||||
bs(198.071,379.276,0)
|
||||
bs(198.85,379.134,0)
|
||||
bs(200.268,379.488,0)
|
||||
bs(200.339,379.772,0)
|
||||
bs(199.984,380.48,0)
|
||||
bs(199.772,380.551,0)
|
||||
bs(198.85,380.268,0)
|
||||
bs(198.638,380.409,0)
|
||||
bs(199.063,380.764,0)
|
||||
bs(200.126,381.331,0)
|
||||
bs(200.409,381.685,0)
|
||||
bs(200.551,382.252,0)
|
||||
bs(200.409,382.748,0)
|
||||
bs(200.126,383.173,0)
|
||||
bs(199.559,383.528,0)
|
||||
bs(198.78,383.598,0)
|
||||
bs(197.858,383.457,0)
|
||||
bs(197.291,383.244,0)
|
||||
bs(197.22,383.031,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(208.843,381.969,0)
|
||||
bs(209.339,381.756,0)
|
||||
bs(209.551,381.189,0)
|
||||
bs(209.268,380.693,0)
|
||||
bs(208.701,380.48,0)
|
||||
bs(207.85,380.48,0)
|
||||
bs(207.85,381.969,0)
|
||||
bs(208.843,381.969,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(208.701,379.063,0)
|
||||
bs(209.197,378.85,0)
|
||||
bs(209.409,378.354,0)
|
||||
bs(209.197,377.787,0)
|
||||
bs(208.701,377.575,0)
|
||||
bs(207.85,377.575,0)
|
||||
bs(207.85,379.063,0)
|
||||
bs(208.701,379.063,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(206.22,376.299,0)
|
||||
bs(206.362,376.087,0)
|
||||
bs(208.843,376.087,0)
|
||||
bs(209.764,376.228,0)
|
||||
bs(210.472,376.654,0)
|
||||
bs(210.969,377.291,0)
|
||||
bs(211.11,378.071,0)
|
||||
bs(210.685,379.063,0)
|
||||
bs(209.906,379.701,0)
|
||||
bs(210.827,380.339,0)
|
||||
bs(211.181,380.835,0)
|
||||
bs(211.323,381.472,0)
|
||||
bs(211.181,382.252,0)
|
||||
bs(210.685,382.89,0)
|
||||
bs(209.906,383.315,0)
|
||||
bs(209.055,383.528,0)
|
||||
bs(206.362,383.528,0)
|
||||
bs(206.22,383.315,0)
|
||||
bs(206.22,376.299,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(213.378,379.488,0)
|
||||
bs(213.52,379.276,0)
|
||||
bs(214.654,379.276,0)
|
||||
bs(214.866,379.488,0)
|
||||
bs(214.866,381.402,0)
|
||||
bs(215.079,381.969,0)
|
||||
bs(215.575,382.252,0)
|
||||
bs(216,381.969,0)
|
||||
bs(216.213,381.472,0)
|
||||
bs(216.213,379.488,0)
|
||||
bs(216.425,379.276,0)
|
||||
bs(217.488,379.276,0)
|
||||
bs(217.701,379.488,0)
|
||||
bs(217.701,383.315,0)
|
||||
bs(217.488,383.528,0)
|
||||
bs(216.992,383.528,0)
|
||||
bs(216.78,383.315,0)
|
||||
bs(216.638,382.961,0)
|
||||
bs(216.142,383.386,0)
|
||||
bs(215.22,383.598,0)
|
||||
bs(214.37,383.457,0)
|
||||
bs(213.803,382.961,0)
|
||||
bs(213.449,382.252,0)
|
||||
bs(213.378,381.402,0)
|
||||
bs(213.378,379.488,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(221.882,379.134,0)
|
||||
bs(222.803,379.346,0)
|
||||
bs(223.512,379.913,0)
|
||||
bs(223.441,380.197,0)
|
||||
bs(222.803,380.835,0)
|
||||
bs(222.591,380.764,0)
|
||||
bs(221.953,380.48,0)
|
||||
bs(221.315,380.764,0)
|
||||
bs(221.102,381.402,0)
|
||||
bs(221.315,381.969,0)
|
||||
bs(221.953,382.252,0)
|
||||
bs(222.661,381.898,0)
|
||||
bs(222.874,381.827,0)
|
||||
bs(223.512,382.394,0)
|
||||
bs(223.583,382.677,0)
|
||||
bs(222.874,383.386,0)
|
||||
bs(221.882,383.598,0)
|
||||
bs(221.031,383.457,0)
|
||||
bs(220.252,382.961,0)
|
||||
bs(219.756,382.252,0)
|
||||
bs(219.614,381.402,0)
|
||||
bs(219.756,380.48,0)
|
||||
bs(220.323,379.772,0)
|
||||
bs(221.031,379.346,0)
|
||||
bs(221.882,379.134,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(225.425,376.299,0)
|
||||
bs(225.638,376.087,0)
|
||||
bs(226.772,376.087,0)
|
||||
bs(226.984,376.299,0)
|
||||
bs(226.984,380.835,0)
|
||||
bs(228.26,379.346,0)
|
||||
bs(228.543,379.276,0)
|
||||
bs(229.748,379.276,0)
|
||||
bs(229.89,379.346,0)
|
||||
bs(229.89,379.559,0)
|
||||
bs(228.472,381.189,0)
|
||||
bs(230.173,383.173,0)
|
||||
bs(230.244,383.386,0)
|
||||
bs(230.031,383.528,0)
|
||||
bs(228.614,383.528,0)
|
||||
bs(228.402,383.386,0)
|
||||
bs(226.984,381.543,0)
|
||||
bs(226.984,383.315,0)
|
||||
bs(226.772,383.528,0)
|
||||
bs(225.638,383.528,0)
|
||||
bs(225.425,383.315,0)
|
||||
bs(225.425,376.299,0)
|
||||
bC()
|
||||
masterlayer('MasterLayer 1',1,1,0,0,("RGB",0.196,0.314,0.635))
|
||||
guidelayer('Hilfslinien',1,0,0,1,("RGB",0.0,0.3,1.0))
|
||||
326
kanamen.sk1
@@ -1,326 +0,0 @@
|
||||
##sK1 1 2
|
||||
document()
|
||||
layout('A4',(595.276,841.89),0)
|
||||
grid((0,0,2.83465,2.83465),0,("RGB",0.0,0.0,1.0),'Gitter')
|
||||
page('','A4',(595.276,841.89),0)
|
||||
layer('PLT_objects',1,1,0,0,("RGB",0.196,0.314,0.635))
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(172.984,382.535,0)
|
||||
bs(173.693,381.827,0)
|
||||
bs(173.976,381.827,0)
|
||||
bs(174.543,382.039,0)
|
||||
bs(174.969,381.898,0)
|
||||
bs(175.11,381.26,0)
|
||||
bs(175.11,376.299,0)
|
||||
bs(175.323,376.087,0)
|
||||
bs(176.669,376.087,0)
|
||||
bs(176.811,376.299,0)
|
||||
bs(176.811,381.26,0)
|
||||
bs(176.669,382.252,0)
|
||||
bs(176.173,382.961,0)
|
||||
bs(175.465,383.457,0)
|
||||
bs(174.543,383.598,0)
|
||||
bs(173.48,383.315,0)
|
||||
bs(172.913,382.819,0)
|
||||
bs(172.984,382.535,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(180.709,382.535,0)
|
||||
bs(181.063,382.394,0)
|
||||
bs(181.205,382.11,0)
|
||||
bs(181.063,381.756,0)
|
||||
bs(180.709,381.614,0)
|
||||
bs(180.425,381.756,0)
|
||||
bs(180.283,382.11,0)
|
||||
bs(180.425,382.394,0)
|
||||
bs(180.709,382.535,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(179.929,378,0)
|
||||
bs(179.646,377.504,0)
|
||||
bs(179.717,377.291,0)
|
||||
bs(181.559,376.228,0)
|
||||
bs(181.843,376.228,0)
|
||||
bs(182.197,376.866,0)
|
||||
bs(182.126,377.22,0)
|
||||
bs(180.213,378.071,0)
|
||||
bs(179.929,378,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(180.496,380.764,0)
|
||||
bs(181.276,380.976,0)
|
||||
bs(181.205,380.48,0)
|
||||
bs(180.709,380.339,0)
|
||||
bs(179.646,380.48,0)
|
||||
bs(179.362,380.268,0)
|
||||
bs(179.291,379.559,0)
|
||||
bs(179.433,379.276,0)
|
||||
bs(180.85,379.134,0)
|
||||
bs(181.701,379.276,0)
|
||||
bs(182.268,379.559,0)
|
||||
bs(182.551,380.126,0)
|
||||
bs(182.693,380.976,0)
|
||||
bs(182.693,383.315,0)
|
||||
bs(182.48,383.528,0)
|
||||
bs(181.984,383.528,0)
|
||||
bs(181.772,383.386,0)
|
||||
bs(181.63,383.102,0)
|
||||
bs(181.205,383.386,0)
|
||||
bs(180.354,383.598,0)
|
||||
bs(179.291,383.244,0)
|
||||
bs(178.937,382.181,0)
|
||||
bs(179.291,381.189,0)
|
||||
bs(179.787,380.906,0)
|
||||
bs(180.496,380.764,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(184.819,379.488,0)
|
||||
bs(185.031,379.276,0)
|
||||
bs(185.528,379.276,0)
|
||||
bs(185.669,379.346,0)
|
||||
bs(185.882,379.772,0)
|
||||
bs(186.378,379.346,0)
|
||||
bs(187.37,379.134,0)
|
||||
bs(188.22,379.346,0)
|
||||
bs(188.858,379.772,0)
|
||||
bs(189.213,380.48,0)
|
||||
bs(189.354,381.331,0)
|
||||
bs(189.354,383.315,0)
|
||||
bs(189.142,383.528,0)
|
||||
bs(188.008,383.528,0)
|
||||
bs(187.866,383.315,0)
|
||||
bs(187.866,381.331,0)
|
||||
bs(187.654,380.764,0)
|
||||
bs(187.087,380.551,0)
|
||||
bs(186.52,380.693,0)
|
||||
bs(186.307,381.26,0)
|
||||
bs(186.307,383.315,0)
|
||||
bs(186.094,383.528,0)
|
||||
bs(185.031,383.528,0)
|
||||
bs(184.819,383.315,0)
|
||||
bs(184.819,379.488,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(193.323,382.252,0)
|
||||
bs(193.961,381.969,0)
|
||||
bs(194.173,381.331,0)
|
||||
bs(193.961,380.764,0)
|
||||
bs(193.323,380.48,0)
|
||||
bs(192.756,380.764,0)
|
||||
bs(192.543,381.331,0)
|
||||
bs(192.756,381.969,0)
|
||||
bs(193.323,382.252,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(193.323,379.134,0)
|
||||
bs(194.173,379.346,0)
|
||||
bs(194.882,379.772,0)
|
||||
bs(195.378,380.48,0)
|
||||
bs(195.591,381.331,0)
|
||||
bs(195.378,382.252,0)
|
||||
bs(194.882,382.961,0)
|
||||
bs(194.173,383.457,0)
|
||||
bs(193.323,383.598,0)
|
||||
bs(192.472,383.457,0)
|
||||
bs(191.764,382.961,0)
|
||||
bs(191.339,382.252,0)
|
||||
bs(191.126,381.331,0)
|
||||
bs(191.339,380.48,0)
|
||||
bs(191.764,379.772,0)
|
||||
bs(192.472,379.346,0)
|
||||
bs(193.323,379.134,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(197.22,383.031,0)
|
||||
bs(197.575,382.323,0)
|
||||
bs(197.858,382.181,0)
|
||||
bs(198.78,382.465,0)
|
||||
bs(198.992,382.323,0)
|
||||
bs(198.85,382.11,0)
|
||||
bs(198.354,381.827,0)
|
||||
bs(197.504,381.26,0)
|
||||
bs(197.22,380.409,0)
|
||||
bs(197.575,379.488,0)
|
||||
bs(198.071,379.276,0)
|
||||
bs(198.85,379.134,0)
|
||||
bs(200.268,379.488,0)
|
||||
bs(200.339,379.772,0)
|
||||
bs(199.984,380.48,0)
|
||||
bs(199.772,380.551,0)
|
||||
bs(198.85,380.268,0)
|
||||
bs(198.638,380.409,0)
|
||||
bs(199.063,380.764,0)
|
||||
bs(200.126,381.331,0)
|
||||
bs(200.409,381.685,0)
|
||||
bs(200.551,382.252,0)
|
||||
bs(200.409,382.748,0)
|
||||
bs(200.126,383.173,0)
|
||||
bs(199.559,383.528,0)
|
||||
bs(198.78,383.598,0)
|
||||
bs(197.858,383.457,0)
|
||||
bs(197.291,383.244,0)
|
||||
bs(197.22,383.031,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(208.843,381.969,0)
|
||||
bs(209.339,381.756,0)
|
||||
bs(209.551,381.189,0)
|
||||
bs(209.268,380.693,0)
|
||||
bs(208.701,380.48,0)
|
||||
bs(207.85,380.48,0)
|
||||
bs(207.85,381.969,0)
|
||||
bs(208.843,381.969,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(208.701,379.063,0)
|
||||
bs(209.197,378.85,0)
|
||||
bs(209.409,378.354,0)
|
||||
bs(209.197,377.787,0)
|
||||
bs(208.701,377.575,0)
|
||||
bs(207.85,377.575,0)
|
||||
bs(207.85,379.063,0)
|
||||
bs(208.701,379.063,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(206.22,376.299,0)
|
||||
bs(206.362,376.087,0)
|
||||
bs(208.843,376.087,0)
|
||||
bs(209.764,376.228,0)
|
||||
bs(210.472,376.654,0)
|
||||
bs(210.969,377.291,0)
|
||||
bs(211.11,378.071,0)
|
||||
bs(210.685,379.063,0)
|
||||
bs(209.906,379.701,0)
|
||||
bs(210.827,380.339,0)
|
||||
bs(211.181,380.835,0)
|
||||
bs(211.323,381.472,0)
|
||||
bs(211.181,382.252,0)
|
||||
bs(210.685,382.89,0)
|
||||
bs(209.906,383.315,0)
|
||||
bs(209.055,383.528,0)
|
||||
bs(206.362,383.528,0)
|
||||
bs(206.22,383.315,0)
|
||||
bs(206.22,376.299,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(213.378,379.488,0)
|
||||
bs(213.52,379.276,0)
|
||||
bs(214.654,379.276,0)
|
||||
bs(214.866,379.488,0)
|
||||
bs(214.866,381.402,0)
|
||||
bs(215.079,381.969,0)
|
||||
bs(215.575,382.252,0)
|
||||
bs(216,381.969,0)
|
||||
bs(216.213,381.472,0)
|
||||
bs(216.213,379.488,0)
|
||||
bs(216.425,379.276,0)
|
||||
bs(217.488,379.276,0)
|
||||
bs(217.701,379.488,0)
|
||||
bs(217.701,383.315,0)
|
||||
bs(217.488,383.528,0)
|
||||
bs(216.992,383.528,0)
|
||||
bs(216.78,383.315,0)
|
||||
bs(216.638,382.961,0)
|
||||
bs(216.142,383.386,0)
|
||||
bs(215.22,383.598,0)
|
||||
bs(214.37,383.457,0)
|
||||
bs(213.803,382.961,0)
|
||||
bs(213.449,382.252,0)
|
||||
bs(213.378,381.402,0)
|
||||
bs(213.378,379.488,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(221.882,379.134,0)
|
||||
bs(222.803,379.346,0)
|
||||
bs(223.512,379.913,0)
|
||||
bs(223.441,380.197,0)
|
||||
bs(222.803,380.835,0)
|
||||
bs(222.591,380.764,0)
|
||||
bs(221.953,380.48,0)
|
||||
bs(221.315,380.764,0)
|
||||
bs(221.102,381.402,0)
|
||||
bs(221.315,381.969,0)
|
||||
bs(221.953,382.252,0)
|
||||
bs(222.661,381.898,0)
|
||||
bs(222.874,381.827,0)
|
||||
bs(223.512,382.394,0)
|
||||
bs(223.583,382.677,0)
|
||||
bs(222.874,383.386,0)
|
||||
bs(221.882,383.598,0)
|
||||
bs(221.031,383.457,0)
|
||||
bs(220.252,382.961,0)
|
||||
bs(219.756,382.252,0)
|
||||
bs(219.614,381.402,0)
|
||||
bs(219.756,380.48,0)
|
||||
bs(220.323,379.772,0)
|
||||
bs(221.031,379.346,0)
|
||||
bs(221.882,379.134,0)
|
||||
bC()
|
||||
lw(0.85)
|
||||
lc(2)
|
||||
lj(1)
|
||||
b()
|
||||
bs(225.425,376.299,0)
|
||||
bs(225.638,376.087,0)
|
||||
bs(226.772,376.087,0)
|
||||
bs(226.984,376.299,0)
|
||||
bs(226.984,380.835,0)
|
||||
bs(228.26,379.346,0)
|
||||
bs(228.543,379.276,0)
|
||||
bs(229.748,379.276,0)
|
||||
bs(229.89,379.346,0)
|
||||
bs(229.89,379.559,0)
|
||||
bs(228.472,381.189,0)
|
||||
bs(230.173,383.173,0)
|
||||
bs(230.244,383.386,0)
|
||||
bs(230.031,383.528,0)
|
||||
bs(228.614,383.528,0)
|
||||
bs(228.402,383.386,0)
|
||||
bs(226.984,381.543,0)
|
||||
bs(226.984,383.315,0)
|
||||
bs(226.772,383.528,0)
|
||||
bs(225.638,383.528,0)
|
||||
bs(225.425,383.315,0)
|
||||
bs(225.425,376.299,0)
|
||||
bC()
|
||||
masterlayer('MasterLayer 1',1,1,0,0,("RGB",0.196,0.314,0.635))
|
||||
guidelayer('Hilfslinien',1,0,0,1,("RGB",0.0,0.3,1.0))
|
||||
BIN
m2/r10.png
|
Before Width: | Height: | Size: 2.0 KiB |
BIN
m2/r11.png
|
Before Width: | Height: | Size: 1.7 KiB |
BIN
m2/r12.png
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
m2/r13.png
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
m2/r14.png
|
Before Width: | Height: | Size: 876 B |
BIN
m2/r15.png
|
Before Width: | Height: | Size: 647 B |
BIN
m2/r16.png
|
Before Width: | Height: | Size: 598 B |
BIN
m2/r17.png
|
Before Width: | Height: | Size: 544 B |
BIN
m2/r18.png
|
Before Width: | Height: | Size: 490 B |
BIN
m2/r19.png
|
Before Width: | Height: | Size: 494 B |
BIN
m2/r20.png
|
Before Width: | Height: | Size: 479 B |
BIN
m2/r21.png
|
Before Width: | Height: | Size: 479 B |
BIN
m2/r22.png
|
Before Width: | Height: | Size: 493 B |
BIN
m2/r23.png
|
Before Width: | Height: | Size: 495 B |
BIN
m2/r24.png
|
Before Width: | Height: | Size: 479 B |
BIN
m2/r25.png
|
Before Width: | Height: | Size: 490 B |
BIN
m2/r26.png
|
Before Width: | Height: | Size: 493 B |
BIN
m2/r27.png
|
Before Width: | Height: | Size: 496 B |
BIN
m2/r28.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r29.png
|
Before Width: | Height: | Size: 483 B |
BIN
m2/r30.png
|
Before Width: | Height: | Size: 487 B |
BIN
m2/r31.png
|
Before Width: | Height: | Size: 495 B |
BIN
m2/r32.png
|
Before Width: | Height: | Size: 499 B |
BIN
m2/r33.png
|
Before Width: | Height: | Size: 496 B |
BIN
m2/r34.png
|
Before Width: | Height: | Size: 497 B |
BIN
m2/r35.png
|
Before Width: | Height: | Size: 492 B |
BIN
m2/r36.png
|
Before Width: | Height: | Size: 488 B |
BIN
m2/r37.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r38.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r39.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r40.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r41.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r42.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r43.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r44.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r45.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r46.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r47.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r48.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r49.png
|
Before Width: | Height: | Size: 485 B |
BIN
m2/r50.png
|
Before Width: | Height: | Size: 493 B |
BIN
m2/r51.png
|
Before Width: | Height: | Size: 493 B |
BIN
m2/r52.png
|
Before Width: | Height: | Size: 493 B |
BIN
m2/r53.png
|
Before Width: | Height: | Size: 493 B |
BIN
m2/r54.png
|
Before Width: | Height: | Size: 493 B |
BIN
m2/r55.png
|
Before Width: | Height: | Size: 498 B |
BIN
m2/r56.png
|
Before Width: | Height: | Size: 498 B |
BIN
m2/r57.png
|
Before Width: | Height: | Size: 498 B |
BIN
m2/r58.png
|
Before Width: | Height: | Size: 504 B |
BIN
m2/r59.png
|
Before Width: | Height: | Size: 506 B |
BIN
m2/r60.png
|
Before Width: | Height: | Size: 506 B |
BIN
m2/r61.png
|
Before Width: | Height: | Size: 506 B |
BIN
m2/r62.png
|
Before Width: | Height: | Size: 507 B |
BIN
m2/r63.png
|
Before Width: | Height: | Size: 514 B |
BIN
m2/r64.png
|
Before Width: | Height: | Size: 513 B |
BIN
m2/r65.png
|
Before Width: | Height: | Size: 513 B |
BIN
m2/r66.png
|
Before Width: | Height: | Size: 507 B |
BIN
m2/r67.png
|
Before Width: | Height: | Size: 497 B |
BIN
m2/r68.png
|
Before Width: | Height: | Size: 499 B |