Geometry Tools for SolidPython wrapping for OpenSCAD
OpenSCAD is a great tool for defining 3 dimensional shapes.
Solid Python is a great tool for creating OpenSCAD descriptions using Python.
The goal of geoscad is to provide a set of general purpose aids useful across many 3d projects.
The geoscad library uses numpy for speed.
Source is maintained at geoscad.
Examples of use can be found at print3d.
Most 3d printer software expect dimensions to be millimeters,
while for design purposes some other scale is more conceptually useful.
The as_units module makes this translation to millimeters easy.
A collection of objects in as_units function as scaling tools when used as
the right hand side of a multiplication. For example
from geoscad.as_units import inches
width = 3.5 * incheswill set width to a 88.9 which is the millimeter equivalent of 3.5 inches.
To determine the size in millimeters of an 8 foot railroad tie modeled in nscale at a
ratio of 1:160 one can use nscale_feet
tie_length = 8 * nscale_feetThe division operation can be used to reverse the calculation:
width_in_inches = width / inchesSometimes it is useful to have a measurement which exactly equals
an even number of printing layers, An example would be a design
that uses a repeating pattern. Making the pattern repeat on
even layers means the printing will have less interaction with
the pattern frequency. The layers2 object can be used to achieve this:
pattern_height = 12.345 @ even_layerNote the use of the @ operation. When this is used instead of * then
the measurement will snap to the nearest even layer.
The same result can be achieved using @ with dimensional layers:
width = 3.5 @ inchesYou can also make your own scaling objects:
ho_scale_inches = AsUnits(1 / 87.1 * inches, 'ho"')
tie_length = 8 * ho_scale_inchesThe @ operator will invoke the snapping function of an AsUnits object.
You can define your own snapping function to accomodate different needs, such as
a printer with resolution that differs from the default assumption of 0.1 millimieters.
Units can be applied to either numbers or lists.
For example [1, 2, 3] * inches will return [25.4, 50.8, 76.2]