Move API docs out into own file

This commit is contained in:
Florian Festi 2016-03-20 14:08:53 +01:00
parent 4bc85b3be4
commit 36c2218065
2 changed files with 126 additions and 81 deletions

View File

@ -2,95 +2,49 @@ What is this?
=============
This is a small python library for generating SVG drawings used for
cutting out boxes or other structures from plywood using a laser cutter.
cutting out boxes or other structures using a laser cutter.
While there are a couple of other box generators they are all very
limited in what they can do. This library aims for supporting
complicated shapes while offering easy way to do simple things. To
achieve this there are several levels of abstactions.
It also comes with a set of ready-to-use, fully parametrized generators:
* Various simple boxes
* Flex boxes with rounded corners and living hinges
* Type trays with and without walls and floors
* Book cover with flex spine
* Magazine file
Basic Concepts
==============
And a few one trick ponies:
* A drill stand
* A castle tower
* A housing for a special kind of lamp
* A cutlery stand
There is basically only one class that takes care of everything. You
are supposed to sub class it and implement the render() method
(actually just any method that does anything). This Boxes class keeps
a cairo canvas object (self.ctx) that all drawing is made on. In
addition it keeps a couple of global settings used for various drawing
operations. See the __init__ method for the details.
Have a look into the examples/ directory to see how the results look like.
Building blocks and coordinates
-------------------------------
Features
========
To avoid too much coordinate calculations the coordinate system is
continuously moved to the current point. The most basic functions just
do drawings relative to the current coordinate system - without
changing the coordinate system. Those are found in the Builing Blocks section.
Of course the library and the generators allow selecting the "thickness"
of the material used and automatically adjusts lengths and width of
joining fingers and other elements.
Turtle graphics commands
------------------------
The "burn" parameter compensates for the material removed by the laser. This
allows fine tuning the gaps between joins up to the point where plywood
can be press fitted even without any glue.
These start at the current positions and move the coordinate system to
their end. It is assumed that you are (roughly) drawing into the
direction of the x axis, with the inside of the part being above the
line. You need to turn counter clockwise (mathematically positive) to
get a closed shape. These commands typically produce some sort of edges.
Finger Joints are the work horse of the library. They allow 90° edges
and T connections. Their size is scaled up with the material
"thickness" to maintain the same appearance. The libray also allows
putting holes and slots for screws (bed bolts) into finger joints,
although this is currently not supported for the finished generators.
Finger joints
.............
Dovetail joints can be used to join pieces in the same plane.
Finger joints are a simple way of joining two sheets of plywood. They
work best at an 90° angle. There are two different sides matching each
other. As a third alternative there are holes that the fingers of one
sheet can plug into. This allows stable T connections especially
useful for inner walls.
Flex allows bending and streching the material in one direction. This
is used for rounded edges and living hinges.
Dovetail joints
...............
Usage
=====
Dovetails joints can only be used to join two pieces flatly. This
limits their use to closing some round form created with flex areas or
for joining several parts to a bigger one. For this use case they are
much stronger than simple finger joints and can also bare pulling forces.
Whole parts
===========
A couple of command can create whole parts like walls. Typically the
sizes given are the inner dimmensions not including additional space
needed for burn compensation or joints.
Callback parameter
..................
The callback parameter can take on of the following forms:
* A function (or bound method) that expects one parameter: the number
of the side the callback is currently called for.
* A dict with some of the numbers of the sides as keys and functions
without parameters as values.
* A list of functions without parameters. The list may contain None
as place holder and be shorter than the number of sides.
The callback functions are called with the side of the part at the
positive x and y axis. If the edge uses up space this space is below
the x axis. You do not have to restore the coordinate settings in the
callback.
Instead of functions it can be handy to use a lambda expression
calling the one building block funtion you need (e.g. fingerHolesAt).
Edge description
................
Some part building functions take a edges param or have other params
describing some edges. These descriptions are one or several character
strings. With the following meanings:
e : straight edge
E : as above but extended outside by one thickness
f, F : finger joints
h : edge with holes for finger joints
d, D : dove tail joints
There are two ways to use the available generators:
* Execute the scripts/boxes tool and pass the name of the generator
together with the measurements on the command line
* Run scripts/boxesserver which provides an web interface on port 8000

91
documentation/API.txt Normal file
View File

@ -0,0 +1,91 @@
Basic Concepts
==============
There is basically only one class that takes care of everything. You
are supposed to sub class it and implement the render() method
(actually just any method that does anything). This Boxes class keeps
a cairo canvas object (self.ctx) that all drawing is made on. In
addition it keeps a couple of global settings used for various drawing
operations. See the __init__ method for the details.
Building blocks and coordinates
-------------------------------
To avoid too much coordinate calculations the coordinate system is
continuously moved to the current point. The most basic functions just
do drawings relative to the current coordinate system - without
changing the coordinate system. Those are found in the Builing Blocks section.
Turtle graphics commands
------------------------
These start at the current positions and move the coordinate system to
their end. It is assumed that you are (roughly) drawing into the
direction of the x axis, with the inside of the part being above the
line. You need to turn counter clockwise (mathematically positive) to
get a closed shape. These commands typically produce some sort of edges.
Finger joints
.............
Finger joints are a simple way of joining two sheets of plywood. They
work best at an 90° angle. There are two different sides matching each
other. As a third alternative there are holes that the fingers of one
sheet can plug into. This allows stable T connections especially
useful for inner walls.
Dovetail joints
...............
Dovetails joints can only be used to join two pieces flatly. This
limits their use to closing some round form created with flex areas or
for joining several parts to a bigger one. For this use case they are
much stronger than simple finger joints and can also bare pulling forces.
Whole parts
===========
A couple of command can create whole parts like walls. Typically the
sizes given are the inner dimmensions not including additional space
needed for burn compensation or joints.
Currently there are only three such parts:
Boxes.rectangularWall() for generic walls and
Boxes.roundedPlate() and Boxes.surroundingWall() for a wall with
rounded corners and fitting wall with flex for the rounded edges and
dove tail joints for closing the loop.
Callback parameter
..................
The callback parameter can take on of the following forms:
* A function (or bound method) that expects one parameter: the number
of the side the callback is currently called for.
* A dict with some of the numbers of the sides as keys and functions
without parameters as values.
* A list of functions without parameters. The list may contain None
as place holder and be shorter than the number of sides.
The callback functions are called with the side of the part at the
positive x and y axis. If the edge uses up space this space is below
the x axis. You do not have to restore the coordinate settings in the
callback.
Instead of functions it can be handy to use a lambda expression
calling the one building block funtion you need (e.g. fingerHolesAt).
Edge description
................
Some part building functions take a edges param or have other params
describing some edges. These descriptions are one or several character
strings. With the following meanings:
e : straight edge
E : as above but extended outside by one thickness
f, F : finger joints
h : edge with holes for finger joints
d, D : dove tail joints