initial commit
82
Command.py
Executable file
@@ -0,0 +1,82 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
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
|
||||
|
||||
def __init__(self, name, *args):
|
||||
self.name = name # Befehlname
|
||||
self.args = args # Argsliste
|
||||
|
||||
@property
|
||||
def scalable(self):
|
||||
return True \
|
||||
if self.name in Command.scalecoms and self.args else \
|
||||
False
|
||||
|
||||
@property
|
||||
def movable(self):
|
||||
return True \
|
||||
if self.name in Command.movecoms and self.args else \
|
||||
False
|
||||
|
||||
@property
|
||||
def x(self):
|
||||
#Baustelle da es Befehle gibt die mehrere Args haben
|
||||
return self.args[0] \
|
||||
if self.movable else\
|
||||
None
|
||||
|
||||
@property
|
||||
def y(self):
|
||||
if len(self.args)<2 :
|
||||
return None
|
||||
return self.args[1] \
|
||||
if self.movable else\
|
||||
None
|
||||
|
||||
def __trunc__(self):
|
||||
return Command(self.name,*[int(arg) for arg in self.args])
|
||||
|
||||
def __len__(self):
|
||||
return len(str(self)) # Byte-L<>nge des Befehls
|
||||
|
||||
def __str__(self):
|
||||
return self.name + ",".join(str(int(arg)) for arg in self.args) + ";"
|
||||
|
||||
def __mul__(self, factor): # multipliziert falls skalable mit 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
|
||||
|
||||
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]))
|
||||
|
||||
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
|
||||
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))
|
||||
|
||||
def flip(self): # Spiegelung
|
||||
if not self.movable:
|
||||
return self
|
||||
return Command(self.name,self.y,-self.x)
|
||||
BIN
Command.pyc
Executable file
BIN
Fensterplott.zip
Executable file
89
Plotter.py
Executable file
@@ -0,0 +1,89 @@
|
||||
from __future__ import division
|
||||
import pyserial
|
||||
|
||||
class Plotter:
|
||||
|
||||
def __init__(self,boundaries=None):
|
||||
self.__boundaries=boundaries
|
||||
self.p0incenter = True
|
||||
if not boundaries:
|
||||
s=self.getoutput('OW;')
|
||||
print(s)
|
||||
if not s:
|
||||
self.ser=None
|
||||
else:
|
||||
self.__boundaries = tuple(int(x) for x in "".join(s).split(","))
|
||||
|
||||
def getoutput(self,outstr):
|
||||
try:
|
||||
self.ser = serial.Serial('/dev/ttyUSB0',timeout=15)
|
||||
print('try to get Status')
|
||||
if not self.ser:
|
||||
print('Plotter not available')
|
||||
return None
|
||||
self.ser.write(outstr)
|
||||
print('device busy')
|
||||
s = []
|
||||
while True:
|
||||
x = self.ser.read()
|
||||
|
||||
if x == "\x0d" or not x:
|
||||
break
|
||||
s.append(x)
|
||||
return ''.join(s)
|
||||
except OSError:
|
||||
return None
|
||||
@property
|
||||
def xmin(self):
|
||||
return self.__boundaries[0]
|
||||
|
||||
@property
|
||||
def ymin(self):
|
||||
return self.__boundaries[1]
|
||||
|
||||
@property
|
||||
def xmax(self):
|
||||
return self.__boundaries[2]
|
||||
|
||||
@property
|
||||
def ymax(self):
|
||||
return self.__boundaries[3]
|
||||
|
||||
@property
|
||||
def center(self):
|
||||
return (self.xmin + self.xmax)/2, (self.ymin + self.ymax)/2
|
||||
|
||||
def write(self,programm):
|
||||
self.ser.write(str(programm))
|
||||
|
||||
@property
|
||||
def winsize(self):
|
||||
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)
|
||||
|
||||
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 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)
|
||||
@property
|
||||
def ready(self):
|
||||
return bool(self.getoutput('OS;'))
|
||||
|
||||
BIN
Plotter.pyc
Executable file
75
Program.py
Executable file
@@ -0,0 +1,75 @@
|
||||
|
||||
import math
|
||||
from Command import *
|
||||
|
||||
class Program:
|
||||
|
||||
def __init__(self, commands=None):
|
||||
self.commands = commands or []
|
||||
self.active=True
|
||||
self.visible=False
|
||||
self.filename=''
|
||||
|
||||
|
||||
def parsefile(self, filename):
|
||||
with open(filename) as file:
|
||||
self.parse( file.read())
|
||||
|
||||
def parse(self, code):
|
||||
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]))
|
||||
|
||||
self.commands.append(Command(name, *args))
|
||||
|
||||
|
||||
def __trunc__ (self):
|
||||
return Program([int(command) for command in self.commands])
|
||||
|
||||
def __str__(self):
|
||||
return "".join(str(command) for command in self.commands)
|
||||
|
||||
def __mul__(self, arg):
|
||||
return Program([command * arg for command in self.commands])
|
||||
|
||||
def __add__(self, arg):
|
||||
if type(arg)== type(self):
|
||||
return Program( self.commands + arg.commands )
|
||||
return Program([command + arg for command in self.commands])
|
||||
|
||||
def __sub__(self, arg):
|
||||
return Program([command - arg for command in self.commands])
|
||||
|
||||
def __len__(self):
|
||||
return len(str(self))
|
||||
|
||||
def rotate(self, angl):
|
||||
return Program([command.rotate(angl) for command in self.commands])
|
||||
|
||||
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)
|
||||
@property
|
||||
def center(self):
|
||||
return ((self.xmin+self.xmax)/2),((self.ymin+self.ymax)/2)
|
||||
|
||||
@property
|
||||
def winsize(self):
|
||||
return self.xmax-self.xmin , self.ymax - self.ymin
|
||||
BIN
Program.pyc
Executable file
BIN
TUlogo.png
Executable file
|
After Width: | Height: | Size: 28 KiB |
BIN
__pycache__/Program.cpython-36.pyc
Normal file
106
amag.svg
Executable file
@@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1052.3622"
|
||||
height="744.09448"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="amag.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8215385"
|
||||
inkscape:cx="190.49811"
|
||||
inkscape:cy="638.53771"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="702"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-308.2677)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="113.4133"
|
||||
y="496.63699"
|
||||
id="text2985"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2987"
|
||||
x="113.4133"
|
||||
y="496.63699"></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="65.158691"
|
||||
y="469.44247"
|
||||
id="text3074"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="65.158691"
|
||||
y="469.44247"
|
||||
id="tspan3084"
|
||||
style="font-size:144px">Aus Mangel an Gründen es nicht zu tun.</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="65.158691"
|
||||
y="503.49448"
|
||||
style="font-size:72px;fill:#000000;fill-opacity:1"
|
||||
id="tspan3108">Balthasar Lohenberg, Wolfgang Ranft, NCL</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="218.78285"
|
||||
y="550.89087"
|
||||
id="text3102"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3104"
|
||||
x="218.78285"
|
||||
y="550.89087" /></text>
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3114"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><flowRegion
|
||||
id="flowRegion3116"><rect
|
||||
id="rect3118"
|
||||
width="739.31299"
|
||||
height="154.52562"
|
||||
x="49.61832"
|
||||
y="420.08301"
|
||||
style="fill:#000000;fill-opacity:1" /></flowRegion><flowPara
|
||||
id="flowPara3120"></flowPara></flowRoot> </g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
4
apollon-master/.gitignore
vendored
Executable file
@@ -0,0 +1,4 @@
|
||||
*~
|
||||
*pyc
|
||||
__pycache__/
|
||||
html/
|
||||
674
apollon-master/LICENSE
Executable file
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
89
apollon-master/README.rst
Executable file
@@ -0,0 +1,89 @@
|
||||
Apollon
|
||||
#######
|
||||
|
||||
About
|
||||
=====
|
||||
|
||||
These are some python classes and functions for calculating Apollonian
|
||||
Gaskets and saving them as svg. For an overview about this
|
||||
mathematical object, see wikipedia_.
|
||||
|
||||
The code is split into the following files:
|
||||
|
||||
- `apollon.py`:code: contains all the pure math stuff
|
||||
- `coloring.py`:code: contains helpers for color mapping
|
||||
- `ag.py`:code: is a command-line tool for generating Apollonian Gaskets
|
||||
- `index.cgi`:code: is an interactive online cgi version
|
||||
- `colorbrewer.json`:code: contains the color schemes, copied from
|
||||
https://gist.github.com/jsundram/6004447#file-colorbrewer-json
|
||||
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
CLI
|
||||
---
|
||||
|
||||
Run `./ag.py c1 c2 c3`:code: where c1, c2, c3 are the (positive) curvatures
|
||||
of the starting circles. Please also see the `--help`:code: option.
|
||||
|
||||
Note: The method used to calculate the circles is recursive. For depth
|
||||
d, 2*3^{d+1} circles are created. It is usually safe to do this up to
|
||||
d=10, but with higher values you can reach the limit of your
|
||||
RAM. Because of this, and to prevent typos potentially crashing your
|
||||
machine, the recursion depth is capped at d=10. If you know what you
|
||||
are doing, you can use the `--force`:code: option for higher values.
|
||||
|
||||
CGI
|
||||
---
|
||||
|
||||
Online interactive version. You can try it at
|
||||
http://lsandig.org/cgi-bin/apollon/index.cgi
|
||||
|
||||
Recursion depth is limited to 5 to reduce server load and RAM
|
||||
usage. This implementation might not be very fast, it is just intended
|
||||
as a showcase of what you can expect from the CLI-version.
|
||||
|
||||
Needs python3 and the other three files to work.
|
||||
|
||||
Documentation
|
||||
=============
|
||||
|
||||
For the cli-program see `ag.py --help`:code:.
|
||||
|
||||
For a somewhat complete documentation of the source files run
|
||||
`epydoc --html apollon.py ag.py coloring.py`:code:
|
||||
|
||||
For a writeup on how the math behind this program works see my
|
||||
blogpost here: http://lsandig.org/blog/2014/08/apollon-python/en/
|
||||
|
||||
TODO
|
||||
====
|
||||
- More logical structure of the source files
|
||||
- Better documentation
|
||||
- A time- and RAM-saving algorithm that excludes Circles from
|
||||
recursion which are too small to be seen.
|
||||
- fastcgi version of index.cgi?
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Colors from www.ColorBrewer.org by Cynthia A. Brewer, Geography,
|
||||
Pennsylvania State University.
|
||||
|
||||
Thanks to Dorothee Henke for helping me figuring out the math.
|
||||
|
||||
Author & License
|
||||
================
|
||||
|
||||
| Author: Ludger Sandig
|
||||
| Contact: contact@lsandig.org
|
||||
| Homepage: http://lsandig.org/
|
||||
|
||||
This software can be found on github:
|
||||
https://github.com/lsandig/apollon
|
||||
|
||||
This software is published under the GPL, see LICENSE
|
||||
|
||||
.. Links
|
||||
.. _wikipedia: https://en.wikipedia.org/wiki/Apollonian_gasket
|
||||
228
apollon-master/ag.py
Executable file
@@ -0,0 +1,228 @@
|
||||
#! /usr/bin/python3
|
||||
|
||||
# Command line program to create svg apollonian circles
|
||||
|
||||
# Copyright (c) 2014 Ludger Sandig
|
||||
# This file is part of apollon.
|
||||
|
||||
# Apollon is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# Apollon is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Apollon. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
import math
|
||||
|
||||
from apollon import ApollonianGasket
|
||||
from coloring import ColorMap, ColorScheme
|
||||
|
||||
def parseArguments(argv, colors):
|
||||
description = "Generate Apollonian Gaskets and save as svg"
|
||||
name = argv[0]
|
||||
|
||||
colors.append('none')
|
||||
colors.sort()
|
||||
|
||||
parser = argparse.ArgumentParser(description=description, prog=name)
|
||||
|
||||
parser.add_argument("-d", "--depth", metavar="D", type=int, default=3, help="Recursion depth, generates 2*3^{D+1} circles. Usually safe for D<=10. For higher D use --force if you know what you are doing.")
|
||||
parser.add_argument("-o", "--output", metavar="", type=str, default="", help="Output file name. If left blank, default is created from circle curvatures.")
|
||||
parser.add_argument("-r", "--radii", action="store_true", default=False, help="Interpret c1, c2, c3 as radii and not as curvatures")
|
||||
parser.add_argument("--color", choices=colors, metavar='SCHEME', default='none', help="Color Scheme. Choose from "+", ".join(colors))
|
||||
parser.add_argument("--treshold", metavar='T', default=0.005, type=float, help="Don't save circles that are too small. Useful for higher depths to reduce filesize.")
|
||||
parser.add_argument("--force", action="store_true", default=False, help="Use if you want a higher recursion depth than 10.")
|
||||
|
||||
parser.add_argument("c1", type=float, help="Curvature of first circle")
|
||||
parser.add_argument("c2", type=float, help="Curvature of second circle")
|
||||
parser.add_argument("c3", type=float, help="Curvature of third circle")
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
def colorMsg(color):
|
||||
print("Available color schemes (name: resmin -- resmax)")
|
||||
for i in color.info():
|
||||
print("%s: %d -- %d" % (i["name"], i["low"], i["high"]))
|
||||
|
||||
def ag_to_svg(circles, colors, tresh=0.005):
|
||||
"""
|
||||
Convert a list of circles to svg, optionally color them.
|
||||
@param circles: A list of L{Circle}s
|
||||
@param colors: A L{ColorMap} object
|
||||
@param tresh: Only circles with a radius greater than the product of tresh and maximal radius are saved
|
||||
"""
|
||||
svg = []
|
||||
|
||||
# Find the biggest circle, which hopefully is the enclosing one
|
||||
# and has a negative radius because of this. Note that this does
|
||||
# not have to be the case if we picked an unlucky set of radii at
|
||||
# the start. If that was the case, we're screwed now.
|
||||
|
||||
big = min(circles, key=lambda c: c.r.real)
|
||||
|
||||
# Move biggest circle to front so it gets drawn first
|
||||
circles.remove(big)
|
||||
circles.insert(0, big)
|
||||
|
||||
if big.r.real < 0:
|
||||
# Bounding box from biggest circle, lower left corner and two
|
||||
# times the radius as width
|
||||
corner = big.m - ( abs(big.r) + abs(big.r) * 1j )
|
||||
vbwidth = abs(big.r)*2
|
||||
width = 500 # Hardcoded!
|
||||
|
||||
# Line width independent of circle size
|
||||
lw = (vbwidth/width)
|
||||
|
||||
svg.append('<svg xmlns="http://www.w3.org/2000/svg" width="%f" height="%f" viewBox="%f %f %f %f">\n' % (width, width, corner.real, corner.imag, vbwidth, vbwidth))
|
||||
|
||||
# Keep stroke width relative
|
||||
svg.append('<g stroke-width="%f">\n' % lw)
|
||||
|
||||
# Iterate through circle list, circles with radius<radmin
|
||||
# will not be saved because they are too small for printing.
|
||||
radmin = tresh * abs(big.r)
|
||||
|
||||
for c in circles:
|
||||
if abs(c.r) > radmin:
|
||||
fill = colors.color_for(abs(c.r))
|
||||
svg.append(( '<circle cx="%f" cy="%f" r="%f" fill="%s" stroke="black"/>\n' % (c.m.real, c.m.imag, abs(c.r), fill)))
|
||||
|
||||
svg.append('</g>\n')
|
||||
svg.append('</svg>\n')
|
||||
|
||||
return ''.join(svg)
|
||||
|
||||
def ag_to_hpgl(circles, colors, tresh=0.005):
|
||||
"""
|
||||
Convert a list of circles to hpgl,
|
||||
@param circles: A list of L{Circle}s
|
||||
@param tresh: Only circles with a radius greater than the product of tresh and maximal radius are saved
|
||||
"""
|
||||
hpgl = []
|
||||
|
||||
# Find the biggest circle, which hopefully is the enclosing one
|
||||
# and has a negative radius because of this. Note that this does
|
||||
# not have to be the case if we picked an unlucky set of radii at
|
||||
# the start. If that was the case, we're screwed now.
|
||||
|
||||
big = min(circles, key=lambda c: c.r.real)
|
||||
|
||||
# Move biggest circle to front so it gets drawn first
|
||||
circles.remove(big)
|
||||
circles.insert(0, big)
|
||||
|
||||
eps = 0.001
|
||||
|
||||
if big.r.real < 0:
|
||||
# Bounding box from biggest circle, lower left corner and two
|
||||
# times the radius as width
|
||||
corner = big.m - ( abs(big.r) + abs(big.r) * 1j )
|
||||
|
||||
# Gerards Hack
|
||||
big.r = abs(big.r) + 2*eps
|
||||
|
||||
vbwidth = abs(big.r)*2
|
||||
width = 500 # Hardcoded!
|
||||
|
||||
# Line width independent of circle size
|
||||
lw = (vbwidth/width)
|
||||
|
||||
hpgl.append('IN;SP1;')
|
||||
|
||||
# Iterate through circle list, circles with radius<radmin
|
||||
# will not be saved because they are too small for printing.
|
||||
radmin = tresh * abs(big.r)
|
||||
|
||||
for c in circles:
|
||||
if abs(c.r)-eps > radmin:
|
||||
hpgl.append('PU'+str(c.m.real)+','+str(c.m.imag)+';CI'+str(abs(c.r)-eps)+';')
|
||||
|
||||
|
||||
return ''.join(hpgl)
|
||||
|
||||
def impossible_combination(c1, c2, c3):
|
||||
# If any curvatures x, y, z satisfy the equation
|
||||
# x = 2*sqrt(y*z) + y + z
|
||||
# then no fourth enclosing circle can be genereated, because it
|
||||
# would be a line.
|
||||
# We need to see for c1, c2, c3 if they could be "x".
|
||||
|
||||
impossible = False
|
||||
|
||||
sets = [(c1,c2,c3), (c2,c3,c1), (c3,c1,c2)]
|
||||
|
||||
for (x, y, z) in sets:
|
||||
if x == 2*math.sqrt(y*z) + y + z:
|
||||
impossible = True
|
||||
|
||||
return impossible
|
||||
|
||||
def main():
|
||||
color = ColorScheme("colorbrewer.json")
|
||||
available = [d['name'] for d in color.info()]
|
||||
|
||||
args = parseArguments(sys.argv, available)
|
||||
|
||||
# Sanity checks
|
||||
for c in [args.c1, args.c2, args.c3]:
|
||||
if c == 0:
|
||||
print("Error: curvature or radius can't be 0")
|
||||
exit(1)
|
||||
if impossible_combination(args.c1, args.c2, args.c3):
|
||||
print("Error: no apollonian gasket possible for these curvatures")
|
||||
exit(1)
|
||||
|
||||
# Given curvatures were in fact radii, so take the reciprocal
|
||||
if args.radii:
|
||||
args.c1 = 1/args.c1
|
||||
args.c2 = 1/args.c2
|
||||
args.c3 = 1/args.c3
|
||||
|
||||
ag = ApollonianGasket(args.c1, args.c2, args.c3)
|
||||
|
||||
# At a recursion depth > 10 things start to get serious.
|
||||
if args.depth > 10:
|
||||
if not args.force:
|
||||
print("Note: Number of cicles increases exponentially with 2*3^{D+1} at depth D.\nIf you want to use D>10, specify the --force option.")
|
||||
args.depth = 10
|
||||
|
||||
ag.generate(args.depth)
|
||||
|
||||
# Get smallest and biggest radius
|
||||
smallest = abs(min(ag.genCircles, key=lambda c: abs(c.r.real)).r.real)
|
||||
biggest = abs(max(ag.genCircles, key=lambda c: abs(c.r.real)).r.real)
|
||||
|
||||
# Construct color map
|
||||
if args.color == 'none':
|
||||
mp = ColorMap('none')
|
||||
else:
|
||||
# TODO: resolution of 8 is hardcoded, some color schemes have
|
||||
# resolutions up to 11. Make this configurable.
|
||||
mp = color.makeMap(smallest, biggest, args.color, 8)
|
||||
|
||||
svg = ag_to_svg(ag.genCircles, mp, tresh=args.treshold)
|
||||
hpgl = ag_to_hpgl(ag.genCircles, mp, tresh=args.treshold)
|
||||
# User supplied filename? If not, we need to construct something.
|
||||
if len(args.output) == 0:
|
||||
args.output = 'ag_%.4f_%.4f_%.4f.svg' % (args.c1, args.c2, args.c3)
|
||||
|
||||
with open(args.output, 'w') as f:
|
||||
f.write(svg)
|
||||
f.close()
|
||||
|
||||
with open(args.output+'.hpgl', 'w') as f:
|
||||
f.write(hpgl)
|
||||
f.close()
|
||||
|
||||
if( __name__ == "__main__" ):
|
||||
main()
|
||||
195
apollon-master/apollon.py
Executable file
@@ -0,0 +1,195 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
# Generate Apollonian Gaskets -- the math part.
|
||||
|
||||
# Copyright (c) 2014 Ludger Sandig
|
||||
# This file is part of apollon.
|
||||
|
||||
# Apollon is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# Apollon is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Apollon. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from cmath import *
|
||||
import random
|
||||
|
||||
class Circle(object):
|
||||
"""
|
||||
A circle represented by center point as complex number and radius.
|
||||
"""
|
||||
def __init__ ( self, mx, my, r ):
|
||||
"""
|
||||
@param mx: x center coordinate
|
||||
@type mx: int or float
|
||||
@param my: y center coordinate
|
||||
@type my: int or float
|
||||
@param r: radius
|
||||
@type r: int or float
|
||||
"""
|
||||
self.r = r
|
||||
self.m = (mx +my*1j)
|
||||
|
||||
def __repr__ ( self ):
|
||||
"""
|
||||
Pretty printing
|
||||
"""
|
||||
return "Circle( self, %s, %s, %s )" % (self.m.real, self.m.imag, self.r)
|
||||
|
||||
def __str__ ( self ):
|
||||
"""
|
||||
Pretty printing
|
||||
"""
|
||||
return "Circle x:%.3f y:%.3f r:%.3f [cur:%.3f]" % (self.m.real, self.m.imag, self.r.real, self.curvature().real)
|
||||
|
||||
def curvature (self):
|
||||
"""
|
||||
Get circle's curvature.
|
||||
@rtype: float
|
||||
@return: Curvature of the circle.
|
||||
"""
|
||||
return 1/self.r
|
||||
|
||||
def outerTangentCircle( circle1, circle2, circle3 ):
|
||||
"""
|
||||
Takes three externally tangent circles and calculates the fourth one enclosing them.
|
||||
@param circle1: first circle
|
||||
@param circle2: second circle
|
||||
@param circle3: third circle
|
||||
@type circle1: L{Circle}
|
||||
@type circle2: L{Circle}
|
||||
@type circle3: L{Circle}
|
||||
@return: The enclosing circle
|
||||
@rtype: L{Circle}
|
||||
"""
|
||||
cur1 = circle1.curvature()
|
||||
cur2 = circle2.curvature()
|
||||
cur3 = circle3.curvature()
|
||||
m1 = circle1.m
|
||||
m2 = circle2.m
|
||||
m3 = circle3.m
|
||||
cur4 = -2 * sqrt( cur1*cur2 + cur2*cur3 + cur1 * cur3 ) + cur1 + cur2 + cur3
|
||||
m4 = ( -2 * sqrt( cur1*m1*cur2*m2 + cur2*m2*cur3*m3 + cur1*m1*cur3*m3 ) + cur1*m1 + cur2*m2 + cur3*m3 ) / cur4
|
||||
circle4 = Circle( m4.real, m4.imag, 1/cur4 )
|
||||
|
||||
return circle4
|
||||
|
||||
|
||||
def tangentCirclesFromRadii( r2, r3, r4 ):
|
||||
"""
|
||||
Takes three radii and calculates the corresponding externally
|
||||
tangent circles as well as a fourth one enclosing them. The enclosing
|
||||
circle is the first one.
|
||||
|
||||
@param r2, r3, r4: Radii of the circles to calculate
|
||||
@type r2: int or float
|
||||
@type r3: int or float
|
||||
@type r4: int or float
|
||||
@return: The four circles, where the first one is the enclosing one.
|
||||
@rtype: (L{Circle}, L{Circle}, L{Circle}, L{Circle})
|
||||
"""
|
||||
circle2 = Circle( 0, 0, r2 )
|
||||
circle3 = Circle( r2 + r3, 0, r3 )
|
||||
m4x = (r2*r2 + r2*r4 + r2*r3 - r3*r4) / (r2 + r3)
|
||||
m4y = sqrt( (r2 + r4) * (r2 + r4) - m4x*m4x )
|
||||
circle4 = Circle( m4x, m4y, r4 )
|
||||
circle1 = outerTangentCircle( circle2, circle3, circle4 )
|
||||
return ( circle1, circle2, circle3, circle4 )
|
||||
|
||||
def secondSolution( fixed, c1, c2, c3 ):
|
||||
"""
|
||||
If given four tangent circles, calculate the other one that is tangent
|
||||
to the last three.
|
||||
|
||||
@param fixed: The fixed circle touches the other three, but not
|
||||
the one to be calculated.
|
||||
|
||||
@param c1, c2, c3: Three circles to which the other tangent circle
|
||||
is to be calculated.
|
||||
|
||||
@type fixed: L{Circle}
|
||||
@type c1: L{Circle}
|
||||
@type c2: L{Circle}
|
||||
@type c3: L{Circle}
|
||||
@return: The circle.
|
||||
@rtype: L{Circle}
|
||||
"""
|
||||
|
||||
curf = fixed.curvature()
|
||||
cur1 = c1.curvature()
|
||||
cur2 = c2.curvature()
|
||||
cur3 = c3.curvature()
|
||||
|
||||
curn = 2 * (cur1 + cur2 + cur3) - curf
|
||||
mn = (2 * (cur1*c1.m + cur2*c2.m + cur3*c3.m) - curf*fixed.m ) / curn
|
||||
return Circle( mn.real, mn.imag, 1/curn )
|
||||
|
||||
class ApollonianGasket(object):
|
||||
"""
|
||||
Container for an Apollonian Gasket.
|
||||
"""
|
||||
def __init__(self, c1, c2, c3):
|
||||
"""
|
||||
Creates a basic apollonian Gasket with four circles.
|
||||
|
||||
@param c1, c2, c3: The curvatures of the three inner circles of the
|
||||
starting set (i.e. depth 0 of the recursion). The fourth,
|
||||
enclosing circle will be calculated from them.
|
||||
@type c1: int or float
|
||||
@type c2: int or float
|
||||
@type c3: int or float
|
||||
"""
|
||||
self.start = tangentCirclesFromRadii( 1/c1, 1/c2, 1/c3 )
|
||||
self.genCircles = list(self.start)
|
||||
|
||||
def recurse(self, circles, depth, maxDepth):
|
||||
"""Recursively calculate the smaller circles of the AG up to the
|
||||
given depth. Note that for depth n we get 2*3^{n+1} circles.
|
||||
|
||||
@param maxDepth: Maximal depth of the recursion.
|
||||
@type maxDepth: int
|
||||
|
||||
@param circles: 4-Tuple of circles for which the second
|
||||
solutions are calculated
|
||||
@type circles: (L{Circle}, L{Circle}, L{Circle}, L{Circle})
|
||||
|
||||
@param depth: Current depth
|
||||
@type depth: int
|
||||
"""
|
||||
if( depth == maxDepth ):
|
||||
return
|
||||
(c1, c2, c3, c4) = circles
|
||||
if( depth == 0 ):
|
||||
# First recursive step, this is the only time we need to
|
||||
# calculate 4 new circles.
|
||||
del self.genCircles[4:]
|
||||
cspecial = secondSolution( c1, c2, c3, c4 )
|
||||
self.genCircles.append( cspecial )
|
||||
self.recurse( (cspecial, c2, c3, c4), 1, maxDepth )
|
||||
|
||||
cn2 = secondSolution( c2, c1, c3, c4 )
|
||||
self.genCircles.append( cn2 )
|
||||
cn3 = secondSolution( c3, c1, c2, c4 )
|
||||
self.genCircles.append( cn3 )
|
||||
cn4 = secondSolution( c4, c1, c2, c3 )
|
||||
self.genCircles.append( cn4 )
|
||||
|
||||
self.recurse( (cn2, c1, c3, c4), depth+1, maxDepth )
|
||||
self.recurse( (cn3, c1, c2, c4), depth+1, maxDepth )
|
||||
self.recurse( (cn4, c1, c2, c3), depth+1, maxDepth )
|
||||
|
||||
def generate(self, depth):
|
||||
"""
|
||||
Wrapper for the recurse function. Generate the AG,
|
||||
@param depth: Recursion depth of the Gasket
|
||||
@type depth: int
|
||||
"""
|
||||
self.recurse(self.start, 0, depth)
|
||||
|
||||
301
apollon-master/colorbrewer.json
Executable file
@@ -0,0 +1,301 @@
|
||||
{"YlGn": {
|
||||
"3": ["#f7fcb9","#addd8e","#31a354"],
|
||||
"4": ["#ffffcc","#c2e699","#78c679","#238443"],
|
||||
"5": ["#ffffcc","#c2e699","#78c679","#31a354","#006837"],
|
||||
"6": ["#ffffcc","#d9f0a3","#addd8e","#78c679","#31a354","#006837"],
|
||||
"7": ["#ffffcc","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#005a32"],
|
||||
"8": ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#005a32"],
|
||||
"9": ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"]
|
||||
},"YlGnBu": {
|
||||
"3": ["#edf8b1","#7fcdbb","#2c7fb8"],
|
||||
"4": ["#ffffcc","#a1dab4","#41b6c4","#225ea8"],
|
||||
"5": ["#ffffcc","#a1dab4","#41b6c4","#2c7fb8","#253494"],
|
||||
"6": ["#ffffcc","#c7e9b4","#7fcdbb","#41b6c4","#2c7fb8","#253494"],
|
||||
"7": ["#ffffcc","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#0c2c84"],
|
||||
"8": ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#0c2c84"],
|
||||
"9": ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"]
|
||||
},"GnBu": {
|
||||
"3": ["#e0f3db","#a8ddb5","#43a2ca"],
|
||||
"4": ["#f0f9e8","#bae4bc","#7bccc4","#2b8cbe"],
|
||||
"5": ["#f0f9e8","#bae4bc","#7bccc4","#43a2ca","#0868ac"],
|
||||
"6": ["#f0f9e8","#ccebc5","#a8ddb5","#7bccc4","#43a2ca","#0868ac"],
|
||||
"7": ["#f0f9e8","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#08589e"],
|
||||
"8": ["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#08589e"],
|
||||
"9": ["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"]
|
||||
},"BuGn": {
|
||||
"3": ["#e5f5f9","#99d8c9","#2ca25f"],
|
||||
"4": ["#edf8fb","#b2e2e2","#66c2a4","#238b45"],
|
||||
"5": ["#edf8fb","#b2e2e2","#66c2a4","#2ca25f","#006d2c"],
|
||||
"6": ["#edf8fb","#ccece6","#99d8c9","#66c2a4","#2ca25f","#006d2c"],
|
||||
"7": ["#edf8fb","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#005824"],
|
||||
"8": ["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#005824"],
|
||||
"9": ["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"]
|
||||
},"PuBuGn": {
|
||||
"3": ["#ece2f0","#a6bddb","#1c9099"],
|
||||
"4": ["#f6eff7","#bdc9e1","#67a9cf","#02818a"],
|
||||
"5": ["#f6eff7","#bdc9e1","#67a9cf","#1c9099","#016c59"],
|
||||
"6": ["#f6eff7","#d0d1e6","#a6bddb","#67a9cf","#1c9099","#016c59"],
|
||||
"7": ["#f6eff7","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016450"],
|
||||
"8": ["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016450"],
|
||||
"9": ["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"]
|
||||
},"PuBu": {
|
||||
"3": ["#ece7f2","#a6bddb","#2b8cbe"],
|
||||
"4": ["#f1eef6","#bdc9e1","#74a9cf","#0570b0"],
|
||||
"5": ["#f1eef6","#bdc9e1","#74a9cf","#2b8cbe","#045a8d"],
|
||||
"6": ["#f1eef6","#d0d1e6","#a6bddb","#74a9cf","#2b8cbe","#045a8d"],
|
||||
"7": ["#f1eef6","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#034e7b"],
|
||||
"8": ["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#034e7b"],
|
||||
"9": ["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"]
|
||||
},"BuPu": {
|
||||
"3": ["#e0ecf4","#9ebcda","#8856a7"],
|
||||
"4": ["#edf8fb","#b3cde3","#8c96c6","#88419d"],
|
||||
"5": ["#edf8fb","#b3cde3","#8c96c6","#8856a7","#810f7c"],
|
||||
"6": ["#edf8fb","#bfd3e6","#9ebcda","#8c96c6","#8856a7","#810f7c"],
|
||||
"7": ["#edf8fb","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#6e016b"],
|
||||
"8": ["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#6e016b"],
|
||||
"9": ["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"]
|
||||
},"RdPu": {
|
||||
"3": ["#fde0dd","#fa9fb5","#c51b8a"],
|
||||
"4": ["#feebe2","#fbb4b9","#f768a1","#ae017e"],
|
||||
"5": ["#feebe2","#fbb4b9","#f768a1","#c51b8a","#7a0177"],
|
||||
"6": ["#feebe2","#fcc5c0","#fa9fb5","#f768a1","#c51b8a","#7a0177"],
|
||||
"7": ["#feebe2","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177"],
|
||||
"8": ["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177"],
|
||||
"9": ["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"]
|
||||
},"PuRd": {
|
||||
"3": ["#e7e1ef","#c994c7","#dd1c77"],
|
||||
"4": ["#f1eef6","#d7b5d8","#df65b0","#ce1256"],
|
||||
"5": ["#f1eef6","#d7b5d8","#df65b0","#dd1c77","#980043"],
|
||||
"6": ["#f1eef6","#d4b9da","#c994c7","#df65b0","#dd1c77","#980043"],
|
||||
"7": ["#f1eef6","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#91003f"],
|
||||
"8": ["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#91003f"],
|
||||
"9": ["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"]
|
||||
},"OrRd": {
|
||||
"3": ["#fee8c8","#fdbb84","#e34a33"],
|
||||
"4": ["#fef0d9","#fdcc8a","#fc8d59","#d7301f"],
|
||||
"5": ["#fef0d9","#fdcc8a","#fc8d59","#e34a33","#b30000"],
|
||||
"6": ["#fef0d9","#fdd49e","#fdbb84","#fc8d59","#e34a33","#b30000"],
|
||||
"7": ["#fef0d9","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#990000"],
|
||||
"8": ["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#990000"],
|
||||
"9": ["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"]
|
||||
},"YlOrRd": {
|
||||
"3": ["#ffeda0","#feb24c","#f03b20"],
|
||||
"4": ["#ffffb2","#fecc5c","#fd8d3c","#e31a1c"],
|
||||
"5": ["#ffffb2","#fecc5c","#fd8d3c","#f03b20","#bd0026"],
|
||||
"6": ["#ffffb2","#fed976","#feb24c","#fd8d3c","#f03b20","#bd0026"],
|
||||
"7": ["#ffffb2","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#b10026"],
|
||||
"8": ["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#b10026"],
|
||||
"9": ["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"]
|
||||
},"YlOrBr": {
|
||||
"3": ["#fff7bc","#fec44f","#d95f0e"],
|
||||
"4": ["#ffffd4","#fed98e","#fe9929","#cc4c02"],
|
||||
"5": ["#ffffd4","#fed98e","#fe9929","#d95f0e","#993404"],
|
||||
"6": ["#ffffd4","#fee391","#fec44f","#fe9929","#d95f0e","#993404"],
|
||||
"7": ["#ffffd4","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#8c2d04"],
|
||||
"8": ["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#8c2d04"],
|
||||
"9": ["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"]
|
||||
},"Purples": {
|
||||
"3": ["#efedf5","#bcbddc","#756bb1"],
|
||||
"4": ["#f2f0f7","#cbc9e2","#9e9ac8","#6a51a3"],
|
||||
"5": ["#f2f0f7","#cbc9e2","#9e9ac8","#756bb1","#54278f"],
|
||||
"6": ["#f2f0f7","#dadaeb","#bcbddc","#9e9ac8","#756bb1","#54278f"],
|
||||
"7": ["#f2f0f7","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#4a1486"],
|
||||
"8": ["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#4a1486"],
|
||||
"9": ["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"]
|
||||
},"Blues": {
|
||||
"3": ["#deebf7","#9ecae1","#3182bd"],
|
||||
"4": ["#eff3ff","#bdd7e7","#6baed6","#2171b5"],
|
||||
"5": ["#eff3ff","#bdd7e7","#6baed6","#3182bd","#08519c"],
|
||||
"6": ["#eff3ff","#c6dbef","#9ecae1","#6baed6","#3182bd","#08519c"],
|
||||
"7": ["#eff3ff","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#084594"],
|
||||
"8": ["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#084594"],
|
||||
"9": ["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"]
|
||||
},"Greens": {
|
||||
"3": ["#e5f5e0","#a1d99b","#31a354"],
|
||||
"4": ["#edf8e9","#bae4b3","#74c476","#238b45"],
|
||||
"5": ["#edf8e9","#bae4b3","#74c476","#31a354","#006d2c"],
|
||||
"6": ["#edf8e9","#c7e9c0","#a1d99b","#74c476","#31a354","#006d2c"],
|
||||
"7": ["#edf8e9","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#005a32"],
|
||||
"8": ["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#005a32"],
|
||||
"9": ["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"]
|
||||
},"Oranges": {
|
||||
"3": ["#fee6ce","#fdae6b","#e6550d"],
|
||||
"4": ["#feedde","#fdbe85","#fd8d3c","#d94701"],
|
||||
"5": ["#feedde","#fdbe85","#fd8d3c","#e6550d","#a63603"],
|
||||
"6": ["#feedde","#fdd0a2","#fdae6b","#fd8d3c","#e6550d","#a63603"],
|
||||
"7": ["#feedde","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#8c2d04"],
|
||||
"8": ["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#8c2d04"],
|
||||
"9": ["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"]
|
||||
},"Reds": {
|
||||
"3": ["#fee0d2","#fc9272","#de2d26"],
|
||||
"4": ["#fee5d9","#fcae91","#fb6a4a","#cb181d"],
|
||||
"5": ["#fee5d9","#fcae91","#fb6a4a","#de2d26","#a50f15"],
|
||||
"6": ["#fee5d9","#fcbba1","#fc9272","#fb6a4a","#de2d26","#a50f15"],
|
||||
"7": ["#fee5d9","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#99000d"],
|
||||
"8": ["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#99000d"],
|
||||
"9": ["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"]
|
||||
},"Greys": {
|
||||
"3": ["#f0f0f0","#bdbdbd","#636363"],
|
||||
"4": ["#f7f7f7","#cccccc","#969696","#525252"],
|
||||
"5": ["#f7f7f7","#cccccc","#969696","#636363","#252525"],
|
||||
"6": ["#f7f7f7","#d9d9d9","#bdbdbd","#969696","#636363","#252525"],
|
||||
"7": ["#f7f7f7","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525"],
|
||||
"8": ["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525"],
|
||||
"9": ["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"]
|
||||
},"PuOr": {
|
||||
"3": ["#f1a340","#f7f7f7","#998ec3"],
|
||||
"4": ["#e66101","#fdb863","#b2abd2","#5e3c99"],
|
||||
"5": ["#e66101","#fdb863","#f7f7f7","#b2abd2","#5e3c99"],
|
||||
"6": ["#b35806","#f1a340","#fee0b6","#d8daeb","#998ec3","#542788"],
|
||||
"7": ["#b35806","#f1a340","#fee0b6","#f7f7f7","#d8daeb","#998ec3","#542788"],
|
||||
"8": ["#b35806","#e08214","#fdb863","#fee0b6","#d8daeb","#b2abd2","#8073ac","#542788"],
|
||||
"9": ["#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788"],
|
||||
"10": ["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],
|
||||
"11": ["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"]
|
||||
},"BrBG": {
|
||||
"3": ["#d8b365","#f5f5f5","#5ab4ac"],
|
||||
"4": ["#a6611a","#dfc27d","#80cdc1","#018571"],
|
||||
"5": ["#a6611a","#dfc27d","#f5f5f5","#80cdc1","#018571"],
|
||||
"6": ["#8c510a","#d8b365","#f6e8c3","#c7eae5","#5ab4ac","#01665e"],
|
||||
"7": ["#8c510a","#d8b365","#f6e8c3","#f5f5f5","#c7eae5","#5ab4ac","#01665e"],
|
||||
"8": ["#8c510a","#bf812d","#dfc27d","#f6e8c3","#c7eae5","#80cdc1","#35978f","#01665e"],
|
||||
"9": ["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"],
|
||||
"10": ["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],
|
||||
"11": ["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"]
|
||||
},"PRGn": {
|
||||
"3": ["#af8dc3","#f7f7f7","#7fbf7b"],
|
||||
"4": ["#7b3294","#c2a5cf","#a6dba0","#008837"],
|
||||
"5": ["#7b3294","#c2a5cf","#f7f7f7","#a6dba0","#008837"],
|
||||
"6": ["#762a83","#af8dc3","#e7d4e8","#d9f0d3","#7fbf7b","#1b7837"],
|
||||
"7": ["#762a83","#af8dc3","#e7d4e8","#f7f7f7","#d9f0d3","#7fbf7b","#1b7837"],
|
||||
"8": ["#762a83","#9970ab","#c2a5cf","#e7d4e8","#d9f0d3","#a6dba0","#5aae61","#1b7837"],
|
||||
"9": ["#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837"],
|
||||
"10": ["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],
|
||||
"11": ["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"]
|
||||
},"PiYG": {
|
||||
"3": ["#e9a3c9","#f7f7f7","#a1d76a"],
|
||||
"4": ["#d01c8b","#f1b6da","#b8e186","#4dac26"],
|
||||
"5": ["#d01c8b","#f1b6da","#f7f7f7","#b8e186","#4dac26"],
|
||||
"6": ["#c51b7d","#e9a3c9","#fde0ef","#e6f5d0","#a1d76a","#4d9221"],
|
||||
"7": ["#c51b7d","#e9a3c9","#fde0ef","#f7f7f7","#e6f5d0","#a1d76a","#4d9221"],
|
||||
"8": ["#c51b7d","#de77ae","#f1b6da","#fde0ef","#e6f5d0","#b8e186","#7fbc41","#4d9221"],
|
||||
"9": ["#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221"],
|
||||
"10": ["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],
|
||||
"11": ["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"]
|
||||
},"RdBu": {
|
||||
"3": ["#ef8a62","#f7f7f7","#67a9cf"],
|
||||
"4": ["#ca0020","#f4a582","#92c5de","#0571b0"],
|
||||
"5": ["#ca0020","#f4a582","#f7f7f7","#92c5de","#0571b0"],
|
||||
"6": ["#b2182b","#ef8a62","#fddbc7","#d1e5f0","#67a9cf","#2166ac"],
|
||||
"7": ["#b2182b","#ef8a62","#fddbc7","#f7f7f7","#d1e5f0","#67a9cf","#2166ac"],
|
||||
"8": ["#b2182b","#d6604d","#f4a582","#fddbc7","#d1e5f0","#92c5de","#4393c3","#2166ac"],
|
||||
"9": ["#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac"],
|
||||
"10": ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],
|
||||
"11": ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"]
|
||||
},"RdGy": {
|
||||
"3": ["#ef8a62","#ffffff","#999999"],
|
||||
"4": ["#ca0020","#f4a582","#bababa","#404040"],
|
||||
"5": ["#ca0020","#f4a582","#ffffff","#bababa","#404040"],
|
||||
"6": ["#b2182b","#ef8a62","#fddbc7","#e0e0e0","#999999","#4d4d4d"],
|
||||
"7": ["#b2182b","#ef8a62","#fddbc7","#ffffff","#e0e0e0","#999999","#4d4d4d"],
|
||||
"8": ["#b2182b","#d6604d","#f4a582","#fddbc7","#e0e0e0","#bababa","#878787","#4d4d4d"],
|
||||
"9": ["#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d"],
|
||||
"10": ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],
|
||||
"11": ["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"]
|
||||
},"RdYlBu": {
|
||||
"3": ["#fc8d59","#ffffbf","#91bfdb"],
|
||||
"4": ["#d7191c","#fdae61","#abd9e9","#2c7bb6"],
|
||||
"5": ["#d7191c","#fdae61","#ffffbf","#abd9e9","#2c7bb6"],
|
||||
"6": ["#d73027","#fc8d59","#fee090","#e0f3f8","#91bfdb","#4575b4"],
|
||||
"7": ["#d73027","#fc8d59","#fee090","#ffffbf","#e0f3f8","#91bfdb","#4575b4"],
|
||||
"8": ["#d73027","#f46d43","#fdae61","#fee090","#e0f3f8","#abd9e9","#74add1","#4575b4"],
|
||||
"9": ["#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4"],
|
||||
"10": ["#a50026","#d73027","#f46d43","#fdae61","#fee090","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],
|
||||
"11": ["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"]
|
||||
},"Spectral": {
|
||||
"3": ["#fc8d59","#ffffbf","#99d594"],
|
||||
"4": ["#d7191c","#fdae61","#abdda4","#2b83ba"],
|
||||
"5": ["#d7191c","#fdae61","#ffffbf","#abdda4","#2b83ba"],
|
||||
"6": ["#d53e4f","#fc8d59","#fee08b","#e6f598","#99d594","#3288bd"],
|
||||
"7": ["#d53e4f","#fc8d59","#fee08b","#ffffbf","#e6f598","#99d594","#3288bd"],
|
||||
"8": ["#d53e4f","#f46d43","#fdae61","#fee08b","#e6f598","#abdda4","#66c2a5","#3288bd"],
|
||||
"9": ["#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd"],
|
||||
"10": ["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],
|
||||
"11": ["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"]
|
||||
},"RdYlGn": {
|
||||
"3": ["#fc8d59","#ffffbf","#91cf60"],
|
||||
"4": ["#d7191c","#fdae61","#a6d96a","#1a9641"],
|
||||
"5": ["#d7191c","#fdae61","#ffffbf","#a6d96a","#1a9641"],
|
||||
"6": ["#d73027","#fc8d59","#fee08b","#d9ef8b","#91cf60","#1a9850"],
|
||||
"7": ["#d73027","#fc8d59","#fee08b","#ffffbf","#d9ef8b","#91cf60","#1a9850"],
|
||||
"8": ["#d73027","#f46d43","#fdae61","#fee08b","#d9ef8b","#a6d96a","#66bd63","#1a9850"],
|
||||
"9": ["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"],
|
||||
"10": ["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],
|
||||
"11": ["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"]
|
||||
},"Accent": {
|
||||
"3": ["#7fc97f","#beaed4","#fdc086"],
|
||||
"4": ["#7fc97f","#beaed4","#fdc086","#ffff99"],
|
||||
"5": ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0"],
|
||||
"6": ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f"],
|
||||
"7": ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17"],
|
||||
"8": ["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"]
|
||||
},"Dark2": {
|
||||
"3": ["#1b9e77","#d95f02","#7570b3"],
|
||||
"4": ["#1b9e77","#d95f02","#7570b3","#e7298a"],
|
||||
"5": ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e"],
|
||||
"6": ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02"],
|
||||
"7": ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d"],
|
||||
"8": ["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"]
|
||||
},"Paired": {
|
||||
"3": ["#a6cee3","#1f78b4","#b2df8a"],
|
||||
"4": ["#a6cee3","#1f78b4","#b2df8a","#33a02c"],
|
||||
"5": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99"],
|
||||
"6": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c"],
|
||||
"7": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f"],
|
||||
"8": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00"],
|
||||
"9": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6"],
|
||||
"10": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a"],
|
||||
"11": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99"],
|
||||
"12": ["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"]
|
||||
},"Pastel1": {
|
||||
"3": ["#fbb4ae","#b3cde3","#ccebc5"],
|
||||
"4": ["#fbb4ae","#b3cde3","#ccebc5","#decbe4"],
|
||||
"5": ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6"],
|
||||
"6": ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc"],
|
||||
"7": ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd"],
|
||||
"8": ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec"],
|
||||
"9": ["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]
|
||||
},"Pastel2": {
|
||||
"3": ["#b3e2cd","#fdcdac","#cbd5e8"],
|
||||
"4": ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4"],
|
||||
"5": ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9"],
|
||||
"6": ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae"],
|
||||
"7": ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc"],
|
||||
"8": ["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"]
|
||||
},"Set1": {
|
||||
"3": ["#e41a1c","#377eb8","#4daf4a"],
|
||||
"4": ["#e41a1c","#377eb8","#4daf4a","#984ea3"],
|
||||
"5": ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"],
|
||||
"6": ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33"],
|
||||
"7": ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628"],
|
||||
"8": ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf"],
|
||||
"9": ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"]
|
||||
},"Set2": {
|
||||
"3": ["#66c2a5","#fc8d62","#8da0cb"],
|
||||
"4": ["#66c2a5","#fc8d62","#8da0cb","#e78ac3"],
|
||||
"5": ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854"],
|
||||
"6": ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f"],
|
||||
"7": ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494"],
|
||||
"8": ["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"]
|
||||
},"Set3": {
|
||||
"3": ["#8dd3c7","#ffffb3","#bebada"],
|
||||
"4": ["#8dd3c7","#ffffb3","#bebada","#fb8072"],
|
||||
"5": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3"],
|
||||
"6": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462"],
|
||||
"7": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69"],
|
||||
"8": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5"],
|
||||
"9": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9"],
|
||||
"10": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],
|
||||
"11": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5"],
|
||||
"12": ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"]
|
||||
}}
|
||||
86
apollon-master/coloring.py
Executable file
@@ -0,0 +1,86 @@
|
||||
# Select a color from colorbrewer schemes
|
||||
|
||||
# Copyright (c) 2014 Ludger Sandig
|
||||
# This file is part of apollon.
|
||||
|
||||
# Apollon is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# Apollon is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Apollon. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
import json
|
||||
|
||||
class ColorMap(object):
|
||||
"""
|
||||
Map numbers to colors.
|
||||
"""
|
||||
def __init__(self, default):
|
||||
"""
|
||||
@param default: Is returned when a number can't be mapped.
|
||||
"""
|
||||
self.pairs = []
|
||||
self.default = default
|
||||
|
||||
def add_interval(self, left, right, color):
|
||||
"""
|
||||
A number in interval [left,right] gets mapped to color.
|
||||
"""
|
||||
self.pairs.append((left, right, color))
|
||||
|
||||
def color_for(self, number):
|
||||
"""
|
||||
Map number to color. If not found, return default value.
|
||||
"""
|
||||
ret = self.default
|
||||
for p in self.pairs:
|
||||
if (number >= p[0]) and (number <= p[1]):
|
||||
ret = p[2]
|
||||
break
|
||||
return ret
|
||||
|
||||
class ColorScheme(object):
|
||||
"""
|
||||
Color Scheme helper class.
|
||||
"""
|
||||
def __init__(self, filename):
|
||||
"""
|
||||
Load color scheme definitions from json file.
|
||||
"""
|
||||
json_data = open(filename)
|
||||
|
||||
self.schemes=json.load(json_data)
|
||||
json_data.close()
|
||||
|
||||
def info(self):
|
||||
"""
|
||||
Get information on available color schemes
|
||||
"""
|
||||
infos = []
|
||||
for name in self.schemes:
|
||||
smallest = min(self.schemes[name], key=lambda k: len(self.schemes[name][k]))
|
||||
biggest = max(self.schemes[name], key=lambda k: len(self.schemes[name][k]))
|
||||
infos.append({"name" : name, "low" : int(smallest), "high" : int(biggest)})
|
||||
return infos
|
||||
|
||||
def makeMap(self, frm, to, name, res):
|
||||
"""
|
||||
Construct a L{ColorMap} that maps numbers between frm and to to color scheme name with resolution res.
|
||||
"""
|
||||
# TODO: Proper error handling when name or res are not available
|
||||
delta = to-frm
|
||||
step = delta/res
|
||||
colors = self.schemes[name][str(res)]
|
||||
mp = ColorMap("none")
|
||||
# Items are (lower_bound, color)
|
||||
for n in range(res):
|
||||
mp.add_interval(frm + n*step, frm + (n+1)*step, colors[n])
|
||||
return mp
|
||||
271
apollon-master/index.cgi
Executable file
@@ -0,0 +1,271 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2014 Ludger Sandig
|
||||
# This file is part of apollon.
|
||||
|
||||
# Apollon is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# Apollon is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Apollon. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import cgi
|
||||
import cgitb
|
||||
|
||||
from apollon import ApollonianGasket
|
||||
from coloring import ColorScheme, ColorMap
|
||||
from ag import ag_to_svg, impossible_combination
|
||||
|
||||
|
||||
|
||||
# Container for sanitized settings
|
||||
class Settings(object):
|
||||
def __init__(self, form):
|
||||
self.color = form.getvalue("color", "Blues")
|
||||
self.resolution = int(form.getvalue("res", 8))
|
||||
self.c1 = float(form.getvalue("c1", 1))
|
||||
self.c2 = float(form.getvalue("c2", 2))
|
||||
self.c3 = float(form.getvalue("c3", 2))
|
||||
self.rad_or_curv = form.getvalue("roc", "curvature")
|
||||
self.depth = int(form.getvalue("depth", 3))
|
||||
|
||||
# Sanity check
|
||||
|
||||
if (self.resolution > 8) or (self.resolution < 3):
|
||||
self.resolution = 8
|
||||
|
||||
if self.c1 <= 0: self.c1 = 1
|
||||
if self.c2 <= 0: self.c2 = 1
|
||||
if self.c3 <= 0: self.c3 = 1
|
||||
|
||||
if not (self.rad_or_curv == "curvature" or self.rad_or_curv == "radius"):
|
||||
self.rad_or_curvature = "curvature"
|
||||
|
||||
if (self.depth < 0) or (self.depth > 5):
|
||||
self.depth = 3
|
||||
|
||||
# For a more usable form
|
||||
if self.rad_or_curv == "curvature":
|
||||
self.rad_checked = ""
|
||||
self.curv_checked = "checked"
|
||||
else:
|
||||
self.rad_checked = "checked"
|
||||
self.curv_checked = ""
|
||||
|
||||
# Curvature or Radius?
|
||||
if self.rad_or_curv == "radius":
|
||||
self.c1 = 1/self.c1
|
||||
self.c2 = 1/self.c2
|
||||
self.c3 = 1/self.c3
|
||||
|
||||
# AG possible in the first place?
|
||||
self.impossible = impossible_combination(self.c1, self.c2, self.c3)
|
||||
|
||||
# What to print: With form or only svg
|
||||
action = form.getvalue("submit","Update")
|
||||
self.onlysvg = False
|
||||
if action == "Save":
|
||||
self.onlysvg = True
|
||||
|
||||
|
||||
def print_with_form(svg, settings, schemes):
|
||||
# Print first chunk of html
|
||||
print("Content-type: text/html")
|
||||
|
||||
print("""
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Apollonian Gasket Generator</title>
|
||||
|
||||
<style>
|
||||
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
width: 800px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
padding: 10px;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 25px;
|
||||
text-align: center;
|
||||
width: 780px;
|
||||
}
|
||||
|
||||
#gasket {
|
||||
width: 500px;
|
||||
float: left;
|
||||
padding: 10px;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 25px;
|
||||
}
|
||||
|
||||
#settings {
|
||||
width: 250px;
|
||||
float: right;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 25px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#about {
|
||||
width: 780px;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 25px;
|
||||
padding: 10px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
div.wrapper {
|
||||
padding-top: 2px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
input[type=number] {
|
||||
width: 75px;
|
||||
|
||||
}
|
||||
|
||||
input, label, select {
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
form {
|
||||
display: table;
|
||||
width: inherit;
|
||||
}
|
||||
|
||||
#settings p { display: table-row; }
|
||||
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>Apollonian Gasket Generator</h1>
|
||||
""")
|
||||
|
||||
print('<div id="gasket">\n%s\n</div>' % svg)
|
||||
|
||||
# Print form
|
||||
print("""
|
||||
<div id="settings">
|
||||
<form method="post" action="index.cgi" id="params">
|
||||
|
||||
<p><label for="c1">First circle</label><input type="number" name="c1" id="c1" step="any" min="0" value="%.2f"/></p>
|
||||
<p><label for="c2">Second circle</label> <input type="number" name="c2" id="c2" step="any" min="0" value="%.2f"/></p>
|
||||
<p><label for="c3">Third circle</label><input type="number" name="c3" id="c3" step="any" min="0" value="%.2f"/></p>
|
||||
<p><label for="curv">Curvature</label><input type="radio" name="roc" id="curv" value="curvature" %s/></p>
|
||||
<p><label for="rad">Radius</label><input type="radio" name="roc" id="rad" value="radius" %s/></p>
|
||||
<p><label for="depth">Recursion depth</label> <input type="number" name="depth" value="%d" min="0" max="5"/></p>
|
||||
<p><label for="num">No. of colors</label><input type="number" name="res" value="%d" min="3" max="8"/> </p>
|
||||
<p><label>Color scheme</label><select name="color">
|
||||
""" % (settings.c1, settings.c2, settings.c3, settings.curv_checked, settings.rad_checked, settings.depth, settings.resolution))
|
||||
|
||||
# Sort color scheme names
|
||||
info = schemes.info()
|
||||
info.sort(key=lambda d: d["name"])
|
||||
info.insert(0, {"name" : "none"})
|
||||
for s in info:
|
||||
if s["name"] == settings.color:
|
||||
selected = "selected"
|
||||
else:
|
||||
selected = ""
|
||||
print('<option value="%s" %s>%s</value>' % (s["name"], selected, s["name"]))
|
||||
|
||||
# Print last chunk of form and help text
|
||||
print("""
|
||||
</select></p>
|
||||
<p><input type="submit" name="submit" value="Update"> <input type="submit" name="submit" value="Save"></p>
|
||||
</form>
|
||||
</div>
|
||||
<div class="wrapper">
|
||||
<div id="about">
|
||||
<h2>About</h2>
|
||||
|
||||
<p> Apollonian Gaskets are groups of circles in which three are
|
||||
mutally tangent to each other. You can think of it as tightly filling
|
||||
a big circle with lots of smaller cicles. These sets of circles can be
|
||||
computed recusively with relative ease. If you are interested in the
|
||||
mathematical part, see <a
|
||||
href="https://en.wikipedia.org/wiki/Apollonian_gasket">Wikipedia on
|
||||
this subject</a>. </p>
|
||||
|
||||
<p>This site showcases a small command line program I wrote to
|
||||
generate svg images of those circles. It can be found on <a
|
||||
href="https://github.com/lsandig/apollon">github</a>.</p>
|
||||
|
||||
<p>For a more in-depth explanation of this implementation see <a
|
||||
href="http://lsandig.org/blog/2014/08/apollon-python/en/">this
|
||||
post</a> on my blog (English and German version)</p>
|
||||
|
||||
<p>Please note that the online version has a recursion limit of depth
|
||||
5 to reduce the time and memory consumption on the server. With the
|
||||
command line version only your RAM is the limit.</p>
|
||||
|
||||
<p>This is free software published under the GPLv3.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
""")
|
||||
|
||||
|
||||
def print_only_image(svg):
|
||||
print('Content-type: image/svg+xml\nContent-Disposition: attachment; filename="apollonian_gasket.svg"\n\n')
|
||||
print(svg)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Debugging
|
||||
#cgitb.enable()
|
||||
|
||||
# Get settings from form
|
||||
form = cgi.FieldStorage()
|
||||
param = Settings(form)
|
||||
|
||||
# Construct color map
|
||||
schemes = ColorScheme("colorbrewer.json")
|
||||
|
||||
if not param.impossible:
|
||||
# Magic
|
||||
ag = ApollonianGasket(param.c1, param.c2, param.c3)
|
||||
|
||||
ag.generate(param.depth)
|
||||
|
||||
# Get smallest and biggest radius
|
||||
smallest = abs(min(ag.genCircles, key=lambda c: abs(c.r.real)).r.real)
|
||||
biggest = abs(max(ag.genCircles, key=lambda c: abs(c.r.real)).r.real)
|
||||
|
||||
|
||||
if param.color == 'none':
|
||||
mp = ColorMap('none')
|
||||
else:
|
||||
mp = schemes.makeMap(smallest, biggest, param.color, param.resolution)
|
||||
|
||||
# Convert to svg
|
||||
svg = ag_to_svg(ag.genCircles, mp, tresh=0.005)
|
||||
|
||||
# Output
|
||||
if param.onlysvg:
|
||||
print_only_image(svg)
|
||||
else:
|
||||
print_with_form(svg, param, schemes)
|
||||
else:
|
||||
errortext = "<h2>No Apollonian gasket possible for these curvatures :(</2>"
|
||||
print_with_form(errortext, param, schemes)
|
||||
|
||||
|
||||
|
||||
|
||||
1338
apollon.html
Executable file
1
devil.hpgl
Executable file
BIN
docs/Download.pdf
Executable file
BIN
docs/HP 7475A Interfacing & Programming.pdf
Executable file
BIN
docs/HPGL_ProgrammersReferenceManual_47pages_1984.pdf
Executable file
BIN
docs/hpgl.pdf
Executable file
22
hilbert.py
Normal file
@@ -0,0 +1,22 @@
|
||||
import math
|
||||
from hilbertcurve.hilbertcurve import HilbertCurve
|
||||
penthickness=28
|
||||
import Program
|
||||
import Command
|
||||
|
||||
|
||||
def hilbert( laenge, dicke):
|
||||
tiefe=math.floor(math.log(laenge/dicke,2)-1)
|
||||
print(tiefe)
|
||||
hilbert_curve = HilbertCurve(tiefe , 2)
|
||||
pts = [hilbert_curve.coordinates_from_distance(i) for i in range(4*(2**tiefe))]
|
||||
return pts
|
||||
|
||||
def hilbert_curve(plt):
|
||||
|
||||
list=hilbert(min(plt.winsize[0],plt.winsize[1]),penthickness)
|
||||
return Program([Command('IN'),Command('SP1'),Command('PU',*list[-1])]\
|
||||
+[Command('PD',*p) for p in list]\
|
||||
+[Command('PU')])
|
||||
|
||||
|
||||
1
hpgl/ArsOpifex.hpgl
Executable file
1
hpgl/GT.hpgl
Executable file
1
hpgl/Lars.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU;
|
||||
1
hpgl/Lars.plt
Executable file
0
hpgl/Naked.hpgl
Executable file
1
hpgl/Suempfonie.hpgl
Executable file
84
hpgl/Suempfonie.svg
Executable file
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1052.3622"
|
||||
height="744.09448"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="Suempfonie.hpgl">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.99756449"
|
||||
inkscape:cx="350"
|
||||
inkscape:cy="403.49919"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="702"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-308.2677)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:100px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:none;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="62.377312"
|
||||
y="564.685"
|
||||
id="text2985"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2987"
|
||||
x="62.377312"
|
||||
y="564.685"
|
||||
dx="0">WILFRID GRÖSSEL </tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="62.377312"
|
||||
y="689.685"
|
||||
id="tspan2991">SÜMPFONIE</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:none;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="267.93893"
|
||||
y="60.779324"
|
||||
id="text3014"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="translate(0,308.2677)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3016"
|
||||
x="267.93893"
|
||||
y="60.779324" /></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
84
hpgl/Sümpfonie.svg
Executable file
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1052.3622"
|
||||
height="744.09448"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="Sümpfonie.hpgl">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.99756449"
|
||||
inkscape:cx="130.46532"
|
||||
inkscape:cy="403.49919"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="702"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-308.2677)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:100px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="62.377312"
|
||||
y="564.685"
|
||||
id="text2985"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2987"
|
||||
x="62.377312"
|
||||
y="564.685"
|
||||
dx="0">WILFRID GRÖSSEL </tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="62.377312"
|
||||
y="689.685"
|
||||
id="tspan2991">SÜMPFONIE</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="267.93893"
|
||||
y="60.779324"
|
||||
id="text3014"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="translate(0,308.2677)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3016"
|
||||
x="267.93893"
|
||||
y="60.779324" /></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
1
hpgl/Woman.hpgl
Executable file
1
hpgl/Zaskar.hpgl
Executable file
1
hpgl/ag.hpgl
Executable file
1
hpgl/clit.hpgl
Executable file
1
hpgl/cross.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU338,1626;PD484,1791;PD638,1946;PD799,2092;PD968,2228;PD1143,2355;PD1325,2472;PD1512,2578;PD1705,2675;PD1902,2760;PD2104,2835;PD2310,2899;PD2520,2952;PD2733,2994;PD2949,3023;PD3166,3041;PD3386,3048;PD3606,3041;PD3824,3023;PD4039,2994;PD4252,2952;PD4462,2899;PD4668,2835;PD4870,2760;PD5068,2675;PD5260,2578;PD5448,2472;PD5629,2355;PD5804,2228;PD5973,2092;PD6134,1946;PD6288,1791;PD6434,1626;PD6434,5146;PD6288,4982;PD6134,4826;PD5973,4680;PD5804,4544;PD5629,4417;PD5448,4300;PD5260,4194;PD5068,4098;PD4870,4012;PD4668,3937;PD4462,3873;PD4252,3820;PD4039,3779;PD3824,3749;PD3606,3731;PD3386,3725;PD3166,3731;PD2949,3749;PD2733,3779;PD2520,3820;PD2310,3873;PD2104,3937;PD1902,4012;PD1705,4098;PD1512,4194;PD1325,4300;PD1143,4417;PD968,4544;PD799,4680;PD638,4826;PD484,4982;PD338,5146;PD338,1626;PU5146,338;PD4982,484;PD4826,638;PD4680,799;PD4544,968;PD4417,1143;PD4300,1325;PD4194,1512;PD4098,1705;PD4012,1902;PD3937,2104;PD3873,2310;PD3820,2520;PD3779,2733;PD3749,2949;PD3731,3166;PD3725,3386;PD3731,3606;PD3749,3824;PD3779,4039;PD3820,4252;PD3873,4462;PD3937,4668;PD4012,4870;PD4098,5068;PD4194,5260;PD4300,5448;PD4417,5629;PD4544,5804;PD4680,5973;PD4826,6134;PD4982,6288;PD5146,6434;PD1626,6434;PD1791,6288;PD1946,6134;PD2092,5973;PD2228,5804;PD2355,5629;PD2472,5448;PD2578,5260;PD2675,5068;PD2760,4870;PD2835,4668;PD2899,4462;PD2952,4252;PD2994,4039;PD3023,3824;PD3041,3606;PD3048,3386;PD3041,3166;PD3023,2949;PD2994,2733;PD2952,2520;PD2899,2310;PD2835,2104;PD2760,1902;PD2675,1705;PD2578,1512;PD2472,1325;PD2355,1143;PD2228,968;PD2092,799;PD1946,638;PD1791,484;PD1626,338;PD5146,338;PU;
|
||||
1
hpgl/dot.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU1724,2978;PD1699,2964;PD1679,2944;PD1662,2920;PD1648,2893;PD1638,2863;PD1631,2832;PD1626,2768;PD1631,2728;PD1644,2685;PD1664,2646;PD1692,2614;PD1735,2584;PD1782,2565;PD1830,2557;PD1878,2559;PD1924,2571;PD1966,2594;PD2003,2628;PD2033,2672;PD2046,2703;PD2052,2735;PD2053,2770;PD2051,2808;PD2043,2864;PD2027,2911;PD2016,2931;PD2001,2949;PD1982,2966;PD1959,2981;PD1934,2991;PD1905,2997;PD1840,3001;PD1775,2993;PD1724,2978;PD1724,2978;PU;
|
||||
1
hpgl/fhain.hpgl
Executable file
1
hpgl/fuu.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU3402,5343;PD3392,5337;PD3389,5326;PD3391,5310;PD3404,5265;PD3431,5209;PD3469,5153;PD3462,5130;PD3451,5110;PD3435,5095;PD3415,5083;PD3404,5106;PD3390,5128;PD3351,5169;PD3304,5205;PD3251,5237;PD3197,5263;PD3147,5283;PD3073,5307;PD3061,5310;PD3066,5299;PD3156,5108;PD3091,5122;PD3034,5132;PD2989,5133;PD2973,5130;PD2962,5124;PD2952,5107;PD2951,5085;PD2958,5065;PD2970,5043;PD3009,4998;PD3061,4958;PD3119,4928;PD3160,4914;PD3222,4900;PD3257,4897;PD3292,4898;PD3326,4904;PD3358,4918;PD3382,4936;PD3400,4960;PD3414,4988;PD3421,5022;PD3422,5048;PD3418,5072;PD3442,5086;PD3460,5103;PD3471,5121;PD3478,5141;PD3483,5134;PD3512,5106;PD3541,5091;PD3569,5086;PD3597,5090;PD3626,5101;PD3653,5118;PD3709,5158;PD3733,5178;PD3777,5212;PD3818,5239;PD3860,5255;PD3882,5259;PD3905,5259;PD3933,5253;PD3957,5240;PD3976,5224;PD3992,5208;PD4004,5190;PD4010,5163;PD4017,5148;PD4023,5144;PD4029,5144;PD4033,5151;PD4032,5157;PD4015,5194;PD4014,5240;PD4020,5276;PD4027,5292;PD4039,5305;PD4055,5314;PD4073,5316;PD4092,5314;PD4111,5309;PD4146,5289;PD4172,5267;PD4192,5240;PD4205,5223;PD4222,5215;PD4230,5216;PD4237,5221;PD4252,5238;PD4274,5262;PD4287,5271;PD4302,5274;PD4315,5272;PD4325,5265;PD4342,5243;PD4354,5211;PD4357,5202;PD4364,5208;PD4395,5232;PD4425,5247;PD4441,5252;PD4457,5253;PD4475,5248;PD4488,5237;PD4496,5221;PD4502,5199;PD4503,5195;PD4507,5194;PD4512,5196;PD4516,5202;PD4530,5229;PD4539,5238;PD4551,5238;PD4555,5239;PD4539,5241;PD4526,5236;PD4517,5227;PD4510,5216;PD4504,5232;PD4495,5247;PD4479,5259;PD4458,5265;PD4429,5261;PD4402,5249;PD4363,5222;PD4356,5240;PD4343,5261;PD4326,5279;PD4315,5284;PD4302,5286;PD4284,5282;PD4268,5272;PD4243,5245;PD4233,5232;PD4224,5226;PD4213,5232;PD4201,5247;PD4181,5274;PD4152,5299;PD4113,5320;PD4091,5326;PD4070,5328;PD4050,5324;PD4032,5314;PD4018,5299;PD4010,5280;PD4002,5241;PD4002,5213;PD3984,5233;PD3962,5250;PD3936,5264;PD3906,5270;PD3881,5270;PD3857,5266;PD3813,5249;PD3770,5221;PD3726,5187;PD3702,5167;PD3648,5128;PD3622,5112;PD3596,5102;PD3570,5098;PD3544,5102;PD3518,5116;PD3492,5141;PD3480,5156;PD3480,5156;PD3481,5186;PD3476,5217;PD3468,5247;PD3456,5275;PD3430,5321;PD3418,5335;PD3408,5342;PD3402,5343;PD3402,5343;PU3470,5170;PD3437,5223;PD3414,5272;PD3402,5310;PD3402,5331;PD3404,5331;PD3422,5314;PD3444,5275;PD3463,5224;PD3468,5197;PD3470,5170;PD3470,5170;PU3170,5105;PD3082,5293;PD3165,5264;PD3213,5243;PD3262,5217;PD3308,5188;PD3350,5155;PD3382,5118;PD3404,5079;PD3359,5071;PD3326,5073;PD3284,5079;PD3184,5101;PD3170,5105;PD3170,5105;PU3268,4908;PD3223,4911;PD3181,4919;PD3123,4938;PD3093,4952;PD3064,4969;PD3015,5008;PD2979,5050;PD2968,5070;PD2962,5087;PD2962,5103;PD2969,5115;PD2980,5121;PD2996,5123;PD3042,5119;PD3162,5095;PD3188,5043;PD3199,5025;PD3209,5019;PD3176,5092;PD3181,5090;PD3284,5068;PD3326,5061;PD3360,5060;PD3407,5068;PD3411,5046;PD3410,5024;PD3403,4993;PD3391,4966;PD3374,4944;PD3352,4927;PD3333,4918;PD3312,4912;PD3268,4908;PD3268,4908;PU3693,5365;PD3678,5373;PD3701,5333;PD3773,5205;PD3809,5130;PD3837,5054;PD3789,5035;PD3746,5013;PD3710,4988;PD3681,4963;PD3657,4938;PD3638,4915;PD3617,4877;PD3614,4863;PD3617,4850;PD3626,4838;PD3640,4827;PD3658,4819;PD3680,4813;PD3705,4811;PD3732,4813;PD3759,4820;PD3787,4832;PD3814,4850;PD3839,4874;PD3850,4890;PD3858,4909;PD3866,4950;PD3863,4996;PD3852,5046;PD3895,5057;PD3943,5064;PD4014,5068;PD4080,5065;PD4140,5056;PD4192,5045;PD4267,5021;PD4295,5010;PD4312,5009;PD4281,5022;PD4201,5050;PD4146,5064;PD4083,5074;PD4015,5079;PD3942,5075;PD3893,5068;PD3849,5057;PD3820,5133;PD3784,5208;PD3711,5339;PD3693,5365;PD3693,5365;PU3707,4822;PD3673,4826;PD3646,4837;PD3631,4850;PD3626,4860;PD3627,4873;PD3648,4909;PD3666,4932;PD3689,4956;PD3718,4980;PD3752,5003;PD3793,5025;PD3841,5043;PD3851,4995;PD3854,4952;PD3848,4913;PD3841,4896;PD3831,4882;PD3801,4854;PD3770,4835;PD3738,4825;PD3707,4822;PD3707,4822;PU;
|
||||
1
hpgl/fuufuu.hpgl
Executable file
1
hpgl/janos.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU1952,5185;PD1960,5193;PD1963,5193;PD1970,5191;PD1975,5192;PD1976,5200;PD1976,5256;PD1979,5258;PD1994,5258;PD1995,5256;PD1995,5200;PD1994,5188;PD1988,5180;PD1980,5175;PD1970,5173;PD1958,5176;PD1951,5182;PD1952,5185;PD1952,5185;PU2040,5185;PD2044,5187;PD2045,5190;PD2044,5194;PD2040,5196;PD2036,5194;PD2035,5190;PD2036,5187;PD2040,5185;PD2040,5185;PU2031,5236;PD2028,5242;PD2028,5244;PD2049,5256;PD2052,5256;PD2056,5249;PD2056,5245;PD2034,5236;PD2031,5236;PD2031,5236;PU2037,5205;PD2046,5203;PD2045,5208;PD2040,5210;PD2028,5208;PD2024,5211;PD2023,5219;PD2025,5222;PD2041,5224;PD2051,5222;PD2057,5219;PD2060,5212;PD2062,5203;PD2062,5176;PD2059,5174;PD2054,5174;PD2052,5176;PD2050,5179;PD2045,5176;PD2035,5173;PD2023,5177;PD2019,5189;PD2023,5200;PD2029,5203;PD2037,5205;PD2037,5205;PU2086,5220;PD2088,5222;PD2094,5222;PD2095,5221;PD2098,5216;PD2104,5221;PD2115,5224;PD2124,5221;PD2131,5216;PD2136,5208;PD2137,5199;PD2137,5176;PD2135,5174;PD2122,5174;PD2120,5176;PD2120,5199;PD2118,5205;PD2112,5208;PD2105,5206;PD2103,5200;PD2103,5176;PD2100,5174;PD2088,5174;PD2086,5176;PD2086,5220;PD2086,5220;PU2182,5188;PD2189,5191;PD2191,5199;PD2189,5205;PD2182,5208;PD2176,5205;PD2173,5199;PD2176,5191;PD2182,5188;PD2182,5188;PU2182,5224;PD2191,5221;PD2200,5216;PD2205,5208;PD2208,5199;PD2205,5188;PD2200,5180;PD2191,5175;PD2182,5173;PD2172,5175;PD2164,5180;PD2160,5188;PD2157,5199;PD2160,5208;PD2164,5216;PD2172,5221;PD2182,5224;PD2182,5224;PU2226,5179;PD2230,5188;PD2233,5189;PD2244,5186;PD2246,5188;PD2244,5190;PD2239,5193;PD2229,5200;PD2226,5209;PD2230,5220;PD2236,5222;PD2244,5224;PD2260,5220;PD2261,5216;PD2257,5208;PD2255,5208;PD2244,5211;PD2242,5209;PD2247,5205;PD2259,5199;PD2262,5195;PD2263,5188;PD2262,5183;PD2259,5178;PD2252,5174;PD2244,5173;PD2233,5175;PD2227,5177;PD2226,5179;PD2226,5179;PU2357,5191;PD2363,5194;PD2365,5200;PD2362,5206;PD2356,5208;PD2346,5208;PD2346,5191;PD2357,5191;PD2357,5191;PU2356,5224;PD2361,5227;PD2363,5232;PD2361,5239;PD2356,5241;PD2346,5241;PD2346,5224;PD2356,5224;PD2356,5224;PU2327,5256;PD2329,5258;PD2357,5258;PD2368,5256;PD2375,5251;PD2381,5244;PD2383,5236;PD2378,5224;PD2369,5217;PD2380,5210;PD2383,5204;PD2385,5197;PD2383,5188;PD2378,5181;PD2369,5176;PD2359,5174;PD2329,5174;PD2327,5176;PD2327,5256;PD2327,5256;PU2408,5220;PD2410,5222;PD2423,5222;PD2425,5220;PD2425,5198;PD2428,5191;PD2433,5188;PD2438,5191;PD2440,5197;PD2440,5220;PD2443,5222;PD2455,5222;PD2457,5220;PD2457,5176;PD2455,5174;PD2449,5174;PD2447,5176;PD2445,5180;PD2440,5176;PD2429,5173;PD2419,5175;PD2413,5180;PD2409,5188;PD2408,5198;PD2408,5220;PD2408,5220;PU2504,5224;PD2515,5221;PD2523,5215;PD2522,5212;PD2515,5204;PD2512,5205;PD2505,5208;PD2498,5205;PD2495,5198;PD2498,5191;PD2505,5188;PD2513,5192;PD2515,5193;PD2523,5187;PD2524,5184;PD2515,5176;PD2504,5173;PD2495,5175;PD2486,5180;PD2480,5188;PD2479,5198;PD2480,5208;PD2487,5216;PD2495,5221;PD2504,5224;PD2504,5224;PU2544,5256;PD2547,5258;PD2560,5258;PD2562,5256;PD2562,5204;PD2576,5221;PD2579,5222;PD2593,5222;PD2595,5221;PD2595,5219;PD2579,5200;PD2598,5178;PD2599,5176;PD2596,5174;PD2580,5174;PD2578,5176;PD2562,5196;PD2562,5176;PD2560,5174;PD2547,5174;PD2544,5176;PD2544,5256;PD2544,5256;PU;
|
||||
1
hpgl/kamel.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU429,5320;PD432,5317;PD440,5317;PD443,5320;PD443,5359;PD483,5318;PD486,5317;PD496,5317;PD499,5318;PD498,5322;PD458,5363;PD501,5410;PD501,5413;PD498,5415;PD487,5415;PD484,5414;PD443,5368;PD443,5412;PD440,5415;PD432,5415;PD429,5412;PD429,5320;PD429,5320;PU594,5381;PD577,5343;PD576,5343;PD559,5381;PD594,5381;PD594,5381;PU530,5411;PD573,5317;PD576,5315;PD577,5315;PD580,5317;PD622,5411;PD620,5415;PD611,5415;PD608,5413;PD599,5394;PD553,5394;PD545,5413;PD542,5415;PD533,5415;PD530,5411;PU671,5317;PD674,5315;PD676,5315;PD678,5317;PD708,5389;PD708,5389;PD737,5317;PD740,5315;PD742,5315;PD744,5317;PD762,5412;PD759,5415;PD750,5415;PD747,5413;PD737,5350;PD737,5350;PD711,5415;PD709,5416;PD706,5416;PD704,5415;PD679,5350;PD678,5350;PD668,5413;PD665,5415;PD656,5415;PD654,5412;PD671,5317;PD671,5317;PU802,5319;PD804,5317;PD861,5317;PD863,5319;PD863,5327;PD861,5330;PD816,5330;PD816,5358;PD854,5358;PD856,5361;PD856,5369;PD854,5372;PD816,5372;PD816,5402;PD861,5402;PD863,5405;PD863,5412;PD861,5415;PD804,5415;PD802,5412;PD802,5319;PD802,5319;PU903,5319;PD906,5317;PD915,5317;PD918,5319;PD918,5402;PD956,5402;PD959,5405;PD959,5412;PD956,5415;PD906,5415;PD903,5412;PD903,5319;PD903,5319;PU999,5337;PD979,5337;PD976,5335;PD976,5319;PD979,5317;PD1041,5317;PD1044,5319;PD1044,5335;PD1041,5337;PD1021,5337;PD1021,5412;PD1018,5415;PD1001,5415;PD999,5412;PD999,5337;PD999,5337;PU1117,5381;PD1106,5358;PD1106,5358;PD1095,5381;PD1117,5381;PD1117,5381;PU1059,5411;PD1103,5317;PD1105,5315;PD1107,5315;PD1109,5317;PD1153,5411;PD1151,5415;PD1135,5415;PD1130,5411;PD1125,5400;PD1087,5400;PD1082,5412;PD1077,5415;PD1061,5415;PD1059,5411;PU1224,5315;PD1242,5319;PD1258,5329;PD1259,5332;PD1248,5344;PD1244,5344;PD1235,5339;PD1225,5338;PD1215,5340;PD1206,5346;PD1200,5355;PD1198,5366;PD1200,5377;PD1206,5386;PD1215,5392;PD1226,5394;PD1238,5392;PD1238,5383;PD1229,5383;PD1227,5381;PD1227,5367;PD1229,5364;PD1257,5364;PD1260,5367;PD1260,5405;PD1259,5407;PD1249,5412;PD1224,5416;PD1205,5412;PD1188,5402;PD1178,5386;PD1174,5366;PD1178,5346;PD1188,5330;PD1205,5319;PD1224,5315;PU1300,5319;PD1303,5317;PD1361,5317;PD1364,5319;PD1364,5335;PD1361,5337;PD1322,5337;PD1322,5355;PD1354,5355;PD1357,5357;PD1357,5373;PD1354,5375;PD1322,5375;PD1322,5394;PD1361,5394;PD1364,5397;PD1364,5412;PD1361,5415;PD1303,5415;PD1300,5412;PD1300,5319;PD1300,5319;PU;
|
||||
1
hpgl/kanamen.hpgl
Executable file
1
hpgl/karmen.hpgl
Normal file
1
hpgl/kreis.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PA0,0;CI1000;PA1000,0;CI1000;PA-1000,0;CI1000;PA0,1000;CI1000;PA0,-1000;CI1000;PA500,0;CI500;PA-500,0;CI500;PA0,500;CI500;PA0,-500;CI500;
|
||||
1
hpgl/logo-neos.hpgl
Executable file
1
hpgl/logo-tec.hpgl
Executable file
1
hpgl/luz.hpgl
Executable file
1
hpgl/moritz.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU778,5257;PD780,5260;PD782,5260;PD783,5258;PD811,5207;PD811,5207;PD839,5258;PD842,5260;PD844,5260;PD846,5257;PD859,5177;PD857,5174;PD843,5174;PD840,5176;PD835,5213;PD835,5213;PD815,5175;PD813,5173;PD811,5173;PD808,5175;PD788,5213;PD788,5213;PD783,5176;PD780,5174;PD767,5174;PD764,5177;PD778,5257;PD778,5257;PU904,5188;PD911,5191;PD914,5199;PD911,5205;PD904,5208;PD898,5205;PD896,5199;PD898,5191;PD904,5188;PD904,5188;PU904,5224;PD914,5221;PD922,5216;PD927,5208;PD930,5199;PD927,5188;PD922,5180;PD914,5175;PD904,5173;PD895,5175;PD887,5180;PD882,5188;PD880,5199;PD882,5208;PD887,5216;PD895,5221;PD904,5224;PD904,5224;PU951,5220;PD953,5222;PD959,5222;PD961,5221;PD963,5215;PD968,5221;PD976,5224;PD984,5222;PD986,5218;PD979,5208;PD977,5208;PD974,5208;PD970,5206;PD968,5201;PD968,5176;PD965,5174;PD953,5174;PD951,5176;PD951,5220;PD951,5220;PU1004,5220;PD1007,5222;PD1019,5222;PD1022,5220;PD1022,5176;PD1019,5174;PD1007,5174;PD1004,5176;PD1004,5220;PD1004,5220;PU1003,5246;PD1006,5253;PD1013,5256;PD1019,5253;PD1023,5246;PD1019,5239;PD1013,5236;PD1006,5239;PD1003,5246;PD1003,5246;PU1048,5207;PD1045,5207;PD1043,5209;PD1043,5220;PD1045,5222;PD1048,5222;PD1048,5236;PD1051,5238;PD1064,5238;PD1066,5236;PD1066,5222;PD1075,5222;PD1077,5220;PD1077,5209;PD1075,5207;PD1066,5207;PD1066,5192;PD1067,5190;PD1069,5189;PD1073,5190;PD1076,5188;PD1079,5179;PD1077,5176;PD1063,5173;PD1052,5177;PD1048,5190;PD1048,5207;PD1048,5207;PU1097,5178;PD1111,5207;PD1111,5207;PD1100,5207;PD1098,5209;PD1098,5220;PD1100,5222;PD1132,5222;PD1135,5219;PD1120,5190;PD1120,5190;PD1131,5190;PD1132,5188;PD1132,5176;PD1131,5174;PD1099,5174;PD1097,5176;PD1097,5178;PD1097,5178;PU1198,5256;PD1200,5258;PD1215,5258;PD1217,5256;PD1217,5226;PD1252,5226;PD1252,5256;PD1254,5258;PD1268,5258;PD1270,5256;PD1270,5176;PD1268,5174;PD1254,5174;PD1252,5176;PD1252,5208;PD1217,5208;PD1217,5176;PD1215,5174;PD1200,5174;PD1198,5176;PD1198,5256;PD1198,5256;PU1327,5247;PD1329,5253;PD1335,5256;PD1340,5253;PD1343,5247;PD1340,5241;PD1335,5239;PD1329,5241;PD1327,5247;PD1327,5247;PU1302,5247;PD1304,5253;PD1310,5256;PD1316,5253;PD1319,5247;PD1316,5241;PD1310,5239;PD1304,5241;PD1302,5247;PD1302,5247;PU1298,5220;PD1299,5222;PD1312,5222;PD1315,5220;PD1315,5198;PD1317,5191;PD1323,5188;PD1328,5191;PD1330,5197;PD1330,5220;PD1332,5222;PD1344,5222;PD1347,5220;PD1347,5176;PD1344,5174;PD1339,5174;PD1336,5176;PD1335,5180;PD1329,5176;PD1319,5173;PD1309,5175;PD1303,5180;PD1299,5188;PD1298,5198;PD1298,5220;PD1298,5220;PU1374,5207;PD1371,5207;PD1368,5209;PD1368,5220;PD1371,5222;PD1374,5222;PD1374,5236;PD1376,5238;PD1389,5238;PD1391,5236;PD1391,5222;PD1400,5222;PD1402,5220;PD1402,5209;PD1400,5207;PD1391,5207;PD1391,5192;PD1392,5190;PD1394,5189;PD1399,5190;PD1401,5188;PD1404,5179;PD1403,5176;PD1388,5173;PD1377,5177;PD1374,5190;PD1374,5207;PD1374,5207;PU1427,5207;PD1424,5207;PD1422,5209;PD1422,5220;PD1424,5222;PD1427,5222;PD1427,5236;PD1429,5238;PD1442,5238;PD1444,5236;PD1444,5222;PD1453,5222;PD1455,5220;PD1455,5209;PD1453,5207;PD1444,5207;PD1444,5192;PD1445,5190;PD1448,5189;PD1452,5190;PD1455,5188;PD1457,5179;PD1455,5176;PD1441,5173;PD1431,5177;PD1427,5190;PD1427,5207;PD1427,5207;PU1478,5220;PD1480,5222;PD1486,5222;PD1488,5221;PD1490,5216;PD1496,5221;PD1508,5224;PD1517,5221;PD1524,5216;PD1528,5208;PD1530,5199;PD1530,5176;PD1527,5174;PD1515,5174;PD1512,5176;PD1512,5199;PD1511,5205;PD1504,5208;PD1498,5206;PD1496,5200;PD1496,5176;PD1493,5174;PD1480,5174;PD1478,5176;PD1478,5220;PD1478,5220;PU1581,5205;PD1579,5209;PD1575,5211;PD1570,5209;PD1568,5205;PD1581,5205;PD1581,5205;PU1575,5224;PD1584,5222;PD1591,5217;PD1596,5210;PD1598,5201;PD1597,5198;PD1595,5196;PD1567,5196;PD1569,5191;PD1575,5188;PD1584,5191;PD1587,5191;PD1593,5184;PD1593,5179;PD1585,5175;PD1575,5173;PD1565,5175;PD1557,5180;PD1552,5188;PD1550,5198;PD1552,5208;PD1557,5215;PD1565,5221;PD1575,5224;PD1575,5224;PU1619,5220;PD1621,5222;PD1627,5222;PD1628,5221;PD1631,5215;PD1636,5221;PD1644,5224;PD1652,5222;PD1653,5218;PD1647,5208;PD1645,5208;PD1642,5208;PD1638,5206;PD1635,5201;PD1635,5176;PD1633,5174;PD1621,5174;PD1619,5176;PD1619,5220;PD1619,5220;PU;
|
||||
1
hpgl/neos.hpgl
Executable file
1
hpgl/nmk.hpgl
Executable file
1
hpgl/plane.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU7234,10189;PD7305,10201;PD7468,10220;PD7648,10243;PD7874,10276;PD8131,10318;PD8404,10369;PD8677,10430;PD8809,10463;PD8935,10499;PD9054,10538;PD9164,10579;PD9263,10622;PD9348,10667;PD9418,10715;PD9447,10739;PD9472,10765;PD9491,10791;PD9506,10817;PD9516,10844;PD9520,10872;PD9519,10900;PD9512,10929;PD9498,10958;PD9478,10988;PD9452,11018;PD9419,11050;PD9379,11081;PD9331,11114;PD9214,11180;PD9064,11248;PD8880,11319;PD8660,11392;PD8412,11463;PD8146,11527;PD7862,11584;PD7563,11634;PD7251,11678;PD6927,11715;PD6593,11746;PD6250,11771;PD5901,11790;PD5547,11802;PD5190,11809;PD4831,11810;PD4473,11805;PD4117,11795;PD3764,11780;PD3417,11759;PD3076,11733;PD2745,11702;PD2424,11667;PD2116,11626;PD1821,11581;PD1542,11531;PD1281,11477;PD1039,11419;PD817,11356;PD618,11289;PD444,11219;PD366,11182;PD295,11144;PD231,11106;PD175,11066;PD125,11026;PD83,10985;PD49,10943;PD23,10900;PD5,10856;PD-3,10811;PD-20,10635;PD-29,10469;PD-33,10311;PD-31,10164;PD-24,10026;PD-14,9898;PD-1,9781;PD13,9675;PD47,9497;PD79,9367;PD103,9287;PD113,9259;PD139,9180;PD170,9094;PD212,8989;PD265,8876;PD327,8763;PD362,8710;PD399,8660;PD438,8615;PD479,8576;PD522,8543;PD567,8519;PD614,8505;PD662,8501;PD712,8508;PD764,8529;PD817,8563;PD871,8613;PD926,8679;PD983,8762;PD1041,8864;PD1100,8986;PD1159,9129;PD1220,9294;PD1281,9483;PD1343,9696;PD1368,9774;PD1397,9845;PD1429,9909;PD1466,9965;PD1506,10015;PD1550,10058;PD1598,10095;PD1649,10126;PD1704,10152;PD1761,10172;PD1822,10186;PD1887,10196;PD1954,10200;PD2024,10201;PD2097,10197;PD2172,10189;PD2332,10163;PD2501,10124;PD2679,10074;PD2866,10015;PD3261,9880;PD3682,9735;PD3900,9664;PD4121,9597;PD4346,9536;PD4574,9482;PD4803,9438;PD5034,9406;PD5149,9395;PD5264,9387;PD5380,9384;PD5495,9385;PD5609,9391;PD5724,9401;PD5838,9416;PD5951,9437;PD6064,9463;PD6176,9495;PD6287,9533;PD6397,9577;PD6506,9628;PD6614,9685;PD6721,9750;PD6826,9822;PD6931,9902;PD7033,9989;PD7134,10085;PD7234,10189;PD7234,10189;PU9545,7659;PD704,7675;PD635,7671;PD473,7666;PD377,7667;PD280,7672;PD192,7683;PD119,7701;PD91,7714;PD70,7728;PD57,7745;PD53,7765;PD58,7788;PD75,7814;PD103,7843;PD144,7875;PD199,7911;PD269,7951;PD354,7995;PD456,8043;PD715,8153;PD1052,8281;PD1430,8413;PD1804,8532;PD2170,8638;PD2526,8732;PD2870,8815;PD3198,8888;PD3508,8950;PD3797,9004;PD4062,9048;PD4301,9085;PD4688,9136;PD4937,9164;PD5025,9172;PD5026,8938;PD5228,8938;PD5228,9171;PD5828,9044;PD7159,8758;PD7879,8601;PD8519,8459;PD8990,8349;PD9135,8312;PD9205,8290;PD9328,8241;PD9546,8159;PD9799,8055;PD9920,7999;PD10028,7943;PD10116,7888;PD10150,7861;PD10176,7835;PD10193,7810;PD10201,7786;PD10198,7764;PD10184,7743;PD10157,7725;PD10117,7708;PD10062,7693;PD9993,7681;PD9907,7671;PD9805,7664;PD9684,7660;PD9545,7659;PD9545,7659;PD9545,7659;PU5024,11125;PD5027,10921;PD3515,10879;PD3510,11077;PD5024,11125;PD5024,11125;
|
||||
1
hpgl/r1.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU51206,-77402;PD51206,-78819;PD51576,-78818;PD51862,-78820;PD51953,-78819;PD51998,-78815;PD52045,-78799;PD52081,-78781;PD52108,-78761;PD52127,-78741;PD52140,-78721;PD52149,-78701;PD52163,-78667;PD52174,-78640;PD52182,-78604;PD52189,-78498;PD52188,-78068;PD52189,-77755;PD52189,-77647;PD52186,-77596;PD52172,-77552;PD52150,-77520;PD52119,-77496;PD52079,-77479;PD52038,-77470;PD52019,-77463;PD52041,-77457;PD52084,-77450;PD52123,-77434;PD52151,-77414;PD52167,-77394;PD52177,-77368;PD52184,-77330;PD52188,-77273;PD52189,-77068;PD52188,-76695;PD52174,-76127;PD52185,-76084;PD52191,-76073;PD52200,-76063;PD52225,-76049;PD52251,-76041;PD52271,-76038;PD52286,-76037;PD52295,-76034;PD52300,-76027;PD52301,-76013;PD52301,-75985;PD52070,-75985;PD51838,-75985;PD51838,-76627;PD51835,-77178;PD51829,-77262;PD51824,-77279;PD51817,-77287;PD51802,-77296;PD51776,-77302;PD51671,-77306;PD51545,-77306;PD51545,-76645;PD51545,-75985;PD51375,-75985;PD51206,-75985;PD51206,-77402;PU51813,-77617;PD51839,-77644;PD51838,-78055;PD51835,-78407;PD51829,-78469;PD51825,-78484;PD51819,-78493;PD51805,-78504;PD51781,-78510;PD51673,-78514;PD51545,-78514;PD51545,-78051;PD51545,-77588;PD51665,-77588;PD51730,-77590;PD51770,-77595;PD51795,-77604;PD51813,-77617;PD51813,-77617;PU52524,-76009;PD52499,-76024;PD52479,-76043;PD52462,-76067;PD52448,-76094;PD52438,-76124;PD52431,-76155;PD52426,-76220;PD52431,-76260;PD52444,-76302;PD52464,-76342;PD52492,-76373;PD52535,-76403;PD52582,-76422;PD52630,-76430;PD52678,-76428;PD52724,-76416;PD52766,-76393;PD52803,-76359;PD52833,-76315;PD52846,-76284;PD52852,-76252;PD52853,-76218;PD52851,-76180;PD52843,-76123;PD52827,-76076;PD52816,-76056;PD52801,-76038;PD52782,-76021;PD52759,-76007;PD52734,-75997;PD52705,-75990;PD52640,-75987;PD52575,-75994;PD52524,-76009;PD52524,-76009;PU;
|
||||
1
hpgl/r2.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
IN;SP1;PU406,1586;PD406,169;PD776,169;PD1062,168;PD1153,168;PD1198,172;PD1245,188;PD1281,207;PD1308,226;PD1327,246;PD1340,267;PD1349,286;PD1363,320;PD1374,348;PD1382,383;PD1389,489;PD1388,920;PD1389,1233;PD1389,1340;PD1386,1392;PD1372,1435;PD1350,1468;PD1319,1492;PD1279,1508;PD1238,1518;PD1219,1524;PD1241,1530;PD1284,1537;PD1323,1553;PD1351,1573;PD1367,1594;PD1377,1619;PD1384,1657;PD1388,1715;PD1389,1919;PD1388,2292;PD1374,2860;PD1385,2903;PD1391,2914;PD1400,2924;PD1425,2939;PD1451,2947;PD1471,2949;PD1486,2950;PD1495,2953;PD1500,2961;PD1501,2974;PD1501,3002;PD1270,3002;PD1038,3002;PD1038,2361;PD1035,1809;PD1029,1725;PD1024,1709;PD1017,1700;PD1002,1691;PD976,1685;PD871,1682;PD745,1682;PD745,2342;PD745,3002;PD575,3002;PD406,3002;PD406,1586;PU1013,1370;PD1039,1343;PD1038,933;PD1035,581;PD1029,518;PD1025,503;PD1019,494;PD1005,484;PD981,477;PD873,474;PD745,474;PD745,936;PD745,1399;PD865,1399;PD930,1398;PD970,1392;PD995,1383;PD1013,1370;PD1013,1370;PU1839,2779;CI220;PU;
|
||||
1
hpgl/sticker.hpgl
Executable file
5342
hpgl/sticker.svg
Normal file
|
After Width: | Height: | Size: 188 KiB |
1
hpgl/tec.hpgl
Executable file
@@ -0,0 +1 @@
|
||||
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;
|
||||
1
hpgl/tiger.hpgl
Executable file
1
hpgl/vishnu.hpgl
Executable file
44
hpglView.py
Executable file
@@ -0,0 +1,44 @@
|
||||
|
||||
import Tkinter as tk
|
||||
|
||||
|
||||
class HPGLView:
|
||||
|
||||
def __init__( self, master, **options ):
|
||||
self.__programs = None
|
||||
self.__canvas = tk.Canvas( master )
|
||||
self.__canvas.bind( "<Configure>", self.__onresize )
|
||||
|
||||
def pack( self, **options ):
|
||||
self.__canvas.pack( **options )
|
||||
|
||||
def pack_forget( self ):
|
||||
self.__canvas.pack_forget()
|
||||
|
||||
def grid( self, **options ):
|
||||
self.__canvas.grid( **options )
|
||||
|
||||
def grid_forget( self ):
|
||||
self.__canvas.grid_forget()
|
||||
|
||||
def __onresize( self, event ):
|
||||
pass
|
||||
|
||||
@property
|
||||
def programs( self ):
|
||||
self.__programs = programs
|
||||
|
||||
@property
|
||||
def papersize( self ):
|
||||
self.__sheetsize = sheetsize
|
||||
|
||||
def update( self ):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
window = tk.Tk()
|
||||
view = HPGLView( window )
|
||||
view.pack( expand=True, fill=tk.BOTH )
|
||||
window.mainloop()
|
||||
BIN
hpglView.pyc
Executable file
326
janos.hpgl~
Executable file
@@ -0,0 +1,326 @@
|
||||
##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
janos.svg
Executable file
@@ -0,0 +1,326 @@
|
||||
##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
Executable file
@@ -0,0 +1,326 @@
|
||||
##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))
|
||||
47
koch.py
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import division
|
||||
try:
|
||||
import tkinter as tk
|
||||
except:
|
||||
import Tkinter as tk
|
||||
import math
|
||||
|
||||
C = math.sqrt( 3 )
|
||||
|
||||
def koch( x, y, r, smin, nmax=None ):
|
||||
pts, tmp = [ ( x, y + r ),
|
||||
( x - C * r / 2, y - r / 2 ),
|
||||
( x + C * r / 2, y - r / 2 ) ], []
|
||||
s, n = 3 * r / C, 0
|
||||
while s > smin and ( nmax is None or n < nmax ):
|
||||
for i in range( len( pts ) ):
|
||||
( x1, y1 ), ( x5, y5 ) = pts[ i - 1 ], pts[ i ]
|
||||
dx, dy = ( x5 - x1 ) / 3, ( y5 - y1 ) / 3
|
||||
tmp += [ ( x1 + dx, y1 + dy ),
|
||||
( ( x1 + x5 + C * dy ) / 2, ( y1 + y5 - C * dx ) / 2 ),
|
||||
( x5 - dx, y5 - dy ),
|
||||
( x5, y5 ) ]
|
||||
pts, tmp = tmp, []
|
||||
s /= 4
|
||||
n += 1
|
||||
return pts, s, n
|
||||
|
||||
def redraw( data ):
|
||||
x, y = data.width / 2, data.height / 2
|
||||
r = min( 2 * x / C, y )
|
||||
pts, s, n = koch( x, y, r, 4, None )
|
||||
text = "#={}\ns={:.3f}\nn={}".format( len( pts ), s, n )
|
||||
data.widget.delete( tk.ALL )
|
||||
data.widget.create_oval( x - r, y - r, x + r, y + r, outline="#F88" )
|
||||
data.widget.create_text( x, y, text=text, fill="#88F", justify=tk.CENTER )
|
||||
for i in range( len( pts ) ):
|
||||
( x1, y1 ), ( x2, y2 ) = pts[ i - 1 ], pts[ i ]
|
||||
data.widget.create_line( x1, y1, x2, y2 )
|
||||
|
||||
window = tk.Tk()
|
||||
window.title( "Koch" )
|
||||
canvas = tk.Canvas( window )
|
||||
canvas.pack( expand=True, fill=tk.BOTH )
|
||||
canvas.bind( "<Configure>", redraw )
|
||||
window.mainloop()
|
||||
30
koche.py
Executable file
@@ -0,0 +1,30 @@
|
||||
import math
|
||||
|
||||
C = math.sqrt( 3 )
|
||||
|
||||
def koch( x, y, smin=1, nmax=None ):
|
||||
r=min(x,y)
|
||||
pts, tmp = [ ( x, y + r ),
|
||||
( x - C * r / 2, y - r / 2 ),
|
||||
( x + C * r / 2, y - r / 2 ) ], []
|
||||
s, n = 3 * r / C, 0
|
||||
while s > smin and ( nmax is None or n < nmax ):
|
||||
for i in range( len( pts ) ):
|
||||
( x1, y1 ), ( x5, y5 ) = pts[ i - 1 ], pts[ i ]
|
||||
dx, dy = ( x5 - x1 ) / 3, ( y5 - y1 ) / 3
|
||||
tmp += [ ( x1 + dx, y1 + dy ),
|
||||
( ( x1 + x5 + C * dy ) / 2, ( y1 + y5 - C * dx ) / 2 ),
|
||||
( x5 - dx, y5 - dy ),
|
||||
( x5, y5 ) ]
|
||||
pts, tmp = tmp, []
|
||||
s /= 4
|
||||
n += 1
|
||||
print 'Laenge'+ str(s) + 'Iterationen' + str(n)
|
||||
return pts
|
||||
|
||||
def koche(plt):
|
||||
list=koch(plt.center[0],plt.center[1],smin=1,nmax=5)
|
||||
print list[-1]
|
||||
return Program([Command('IN'),Command('SP1'),Command('PU',*list[-1])]\
|
||||
+[Command('PD',*p) for p in list]\
|
||||
+[Command('PU')])
|
||||
47
kochger.py
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import division
|
||||
try:
|
||||
import tkinter as tk
|
||||
except:
|
||||
import Tkinter as tk
|
||||
import math
|
||||
|
||||
C = math.sqrt( 3 )
|
||||
|
||||
def koch( x, y, r, smin ):
|
||||
pts, pts2 = [ ( x, y + r ),
|
||||
( x - C * r / 2, y - r / 2 ),
|
||||
( x + C * r / 2, y - r / 2 ) ], []
|
||||
s = 3 / C * r
|
||||
while s > smin:
|
||||
for i in range( len( pts ) ):
|
||||
( x1, y1 ), ( x5, y5 ) = pts[ i - 1 ], pts[ i ]
|
||||
dx, dy = ( x5 - x1 ) / 3, ( y5 - y1 ) / 3
|
||||
pts2 += [ ( x1 + dx, y1 + dy ),
|
||||
( ( x1 + x5 + C * dy ) / 2, ( y1 + y5 - C * dx ) / 2 ),
|
||||
( x5 - dx, y5 - dy ),
|
||||
( x5, y5 ) ]
|
||||
pts, pts2 = pts2, []
|
||||
s /= 4
|
||||
print len(pts), r
|
||||
return pts
|
||||
|
||||
def redraw( data ):
|
||||
x, y = data.width / 2, data.height / 2
|
||||
r = min( 2 * x / C, y )
|
||||
print x,y,r
|
||||
pts = koch( x, y, r, 1 )
|
||||
print len(pts)
|
||||
data.widget.delete( tk.ALL )
|
||||
data.widget.create_oval( x - r, y - r, x + r, y + r, outline="#F88" )
|
||||
for i in range( len( pts ) ):
|
||||
( x1, y1 ), ( x2, y2 ) = pts[ i - 1 ], pts[ i ]
|
||||
data.widget.create_line( x1, y1, x2, y2 )
|
||||
|
||||
window = tk.Tk()
|
||||
window.title( "Koch" )
|
||||
canvas = tk.Canvas( window )
|
||||
canvas.pack( expand=True, fill=tk.BOTH )
|
||||
canvas.bind( "<Configure>", redraw )
|
||||
window.mainloop()
|
||||
BIN
m2/r0.png
Executable file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
m2/r1.png
Executable file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
m2/r10.png
Executable file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
m2/r11.png
Executable file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
m2/r12.png
Executable file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
m2/r13.png
Executable file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
m2/r14.png
Executable file
|
After Width: | Height: | Size: 876 B |
BIN
m2/r15.png
Executable file
|
After Width: | Height: | Size: 647 B |
BIN
m2/r16.png
Executable file
|
After Width: | Height: | Size: 598 B |
BIN
m2/r17.png
Executable file
|
After Width: | Height: | Size: 544 B |
BIN
m2/r18.png
Executable file
|
After Width: | Height: | Size: 490 B |
BIN
m2/r19.png
Executable file
|
After Width: | Height: | Size: 494 B |
BIN
m2/r2.png
Executable file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
m2/r20.png
Executable file
|
After Width: | Height: | Size: 479 B |
BIN
m2/r21.png
Executable file
|
After Width: | Height: | Size: 479 B |
BIN
m2/r22.png
Executable file
|
After Width: | Height: | Size: 493 B |
BIN
m2/r23.png
Executable file
|
After Width: | Height: | Size: 495 B |
BIN
m2/r24.png
Executable file
|
After Width: | Height: | Size: 479 B |
BIN
m2/r25.png
Executable file
|
After Width: | Height: | Size: 490 B |
BIN
m2/r26.png
Executable file
|
After Width: | Height: | Size: 493 B |
BIN
m2/r27.png
Executable file
|
After Width: | Height: | Size: 496 B |
BIN
m2/r28.png
Executable file
|
After Width: | Height: | Size: 485 B |
BIN
m2/r29.png
Executable file
|
After Width: | Height: | Size: 483 B |