Decide whether you want to start from scratch or want to rework an existing generator.
You should go over the arguments first. Get at least the most basic arguments done. For things you are still unsure you can just use a attribute set in the .__init__() method and turn it into a proper argument later on.
Depending on what you want to do you can work on the different levels of the API. You can either use what is there and combine it into something new or you can implements new things in the appropriate level.
Here are some examples:
Housing for some electronics¶
You can use the ElectronicsBox or the ClosedBox as a basis. Write some callbacks to place holes in the walls to allow accessing the ports of the electronics boards. Place some holes to screw spacers into the bottom to mount the PBC on.
This is a good non box example to look at.
- class boxes.generators.nemamount.NemaMount¶
Mounting braket for a Nema motor
Note that although it produces a cube like object it uses separate
h) for the different axis. Probably
because it started as a copy of another generator like
- class boxes.generators.displayshelf.DisplayShelf¶
Shelf with slanted floors
The DisplayShelf is completely made out of rectangularWalls(). It uses
a callback to place all the fingerHolesAt() right places on the sides.
While the use of the Boxes.py API is pretty straight forward the
calculations needed are a bit more tricky. You can use the
default param to check if you got things right when attempting
something like this yourself.
Note that the front walls and the shelfs form a 90° angle so they work with the default FingerJoints.
- class boxes.generators.bintray.BinTray¶
A Type tray variant to be used up right with sloped walls in front
The BinTray is based on the TypeTray generator:
- class boxes.generators.typetray.TypeTray¶
Type tray - allows only continuous walls
TypeTray is an already pretty complicated generator.
BinTray replaces the now vertical front (former top) edges with a special purpose one that does add the triangles:
- class boxes.generators.bintray.BinFrontEdge(boxes, settings)¶
hi (height of inner walls) argument was removed although the
variable is still used internally - out of laziness.
To complete the bin the front walls are added. Follow up patches then switched the slots between the vertical and horizontal walls to have better support for the now bottoms of the bins. Another patch adds angled finger joints for connecting the front walls with the bottoms of the bins.
The TrafficLight generator uses a similar technique implementing its own Edge class. But it uses its own code to generate all the wall needed.
- class boxes.generators.stachel.Stachel¶
Bass Recorder Endpin
Stachel allows mounting a monopod to a bass recorder. It is basically
just one part repeated with different parameters. It can’t really make
use of much of the Boxes.py library. It implements this one part
move parameter and draws everything using the
.polyline() method. This is pretty painful as lots of angles and
distances need to be calculated by hand.
For symmetric sections it passes the parameters to
– first in normal order and then reversed to get the mirrored section.
This generator is beyond what Boxes.py is designed for. If you need something similar you may want to use another tool like OpenScad or a traditional CAD program.