diff --git a/README.txt b/README.txt index 63f3cc2..fcd55a0 100644 --- a/README.txt +++ b/README.txt @@ -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 diff --git a/documentation/API.txt b/documentation/API.txt new file mode 100644 index 0000000..37a74cc --- /dev/null +++ b/documentation/API.txt @@ -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