pybosl2 — a pure-Python PythonSCAD port of BOSL2¶
pybosl2 is a pure-Python / numpy port of the pieces of BOSL2
that this toolkit uses, with no osuse()/BOSL2 runtime dependency. Every operation hangs off
an object — Path2D for 2-D outlines, Region for
outlines-with-holes, Bezier / BezierPatch for bezier
curves and surfaces, VNF for vertex-face meshes, and the
pybosl2.shapes3d.Bosl2Solid primitives — so new code reads as fluent chains:
Path2D([[0, 0], [80, 0], [80, 60], [0, 60]]).offset(r=-2).round_corners(radius=1).polygon()
⚙️ Visual parts catalog & spec sheets → — the gears, hinges, joiners, cube-truss and ball-bearing modules with technical schematics and metrics measured from real rendered STL.
Rendered examples¶
Every documented function with a rendered example shows both the exact PythonSCAD code and what the
real PythonSCAD binary builds for it, via the pythonscad-example directive (in
docs/_ext/pybosl2_example.py): an interactive 3-D viewer for the exported STL mesh (rotate,
pan and zoom — served by the stl_viewer extension’s three.js viewer, a working drop-in for the
sphinxstl .. stl:: directive), plus a download link to the mesh. Two-dimensional or
open-surface examples that have no solid mesh fall back to a static preview image.
Note
The interactive viewers fetch each .stl over HTTP, so view the built docs through a web
server (for example python3 -m http.server from pybosl2/wiki) rather than opening the
HTML files directly with a file:// URL, where browsers block the local mesh fetch. You can
also embed a viewer for any STL yourself with .. stl:: path/to/mesh.stl.
A cuboid primitive:
from pybosl2.solid import cuboid
cuboid([40, 30, 20], rounding=4).show()
A bezier surface patch, meshed to a VNF and rendered as a polyhedron:
from pybosl2 import BezierPatch
patch = [
[[-50, -50, 0], [-16, -50, 20], [16, -50, -20], [50, -50, 0]],
[[-50, -16, 20], [-16, -16, 20], [16, -16, -20], [50, -16, 20]],
[[-50, 16, 20], [-16, 16, -20], [16, 16, 20], [50, 16, 20]],
[[-50, 50, 0], [-16, 50, -20], [16, 50, 20], [50, 50, 0]],
]
BezierPatch(patch).sheet([0, -6], splinesteps=16).polyhedron().show()
Sweeping a profile along a bezier curve:
import math
import numpy as np
from pybosl2 import Bezier
circle = [[2 * math.cos(t), 2 * math.sin(t)] for t in np.linspace(0, 2 * math.pi, 24, endpoint=False)]
Bezier([[0, 0, 5], [0, 0, 20], [25, 12, 15], [30, 4, 6]]).sweep(circle, splinesteps=24).polyhedron().show()
API reference¶
The modules are grouped by role, mirroring BOSL2’s own organisation. Foundational holds the primitives and transforms most models start from; Paths, regions & surfaces the advanced 2-D/3-D modelling toolkit; Math & geometry the numeric helpers; and Parts library the ready-made mechanical parts — each with a visual spec sheet in the catalog linked above.
Solid backends
Foundational
- Colour operators (Colorable mixin) via Python's colorsys module
- Constants provided by BOSL2 (BOSL2 constants.scad)
- Return Distributors: line/grid/ring/arc/sphere/path copiers and reflected copies
- Cut rounded edge/corner/face profiles into a cuboid (BOSL2 masks2d/masks3d)
- pybosl2.masking.mask2d_roundover
- pybosl2.masking.rounding_edge_mask
- pybosl2.masking.chamfer_edge_mask
- pybosl2.masking.edge_mask
- pybosl2.masking.edge_profile
- pybosl2.masking.corner_profile
- pybosl2.masking.face_profile
- pybosl2.masking.mask2d_chamfer
- pybosl2.masking.mask2d_cove
- pybosl2.masking.mask2d_tear
- pybosl2.masking.mask2d_step
- pybosl2.masking.mask2d_groove
- pybosl2.masking.mask3d_roundover
- pybosl2.masking.mask3d_chamfer
- pybosl2.masking.mask3d_groove
- Planar half-cuts and interlocking partitions (jigsaw/dovetail/... joints)
- Statically typed shape constructors and backend-neutral solid facade
- pybosl2.solid.cube
- pybosl2.solid.cuboid
- pybosl2.solid.cyl
- pybosl2.solid.cylinder
- pybosl2.solid.octahedron
- pybosl2.solid.onion
- pybosl2.solid.pie_slice
- pybosl2.solid.prismoid
- pybosl2.solid.rect_tube
- pybosl2.solid.regular_prism
- pybosl2.solid.sphere
- pybosl2.solid.spheroid
- pybosl2.solid.teardrop
- pybosl2.solid.torus
- pybosl2.solid.tube
- pybosl2.solid.wedge
- pybosl2.solid.xcyl
- pybosl2.solid.ycyl
- pybosl2.solid.zcyl
- pybosl2.solid.polyhedron
- pybosl2.solid.union
- pybosl2.solid.difference
- pybosl2.solid.intersection
- pybosl2.solid.use_backend
- pybosl2.solid.set_default_backend
- pybosl2.solid.current_backend
- pybosl2.solid.Solid
- Parameters
- Return type
- Parameters
- Return type
- pybosl2.solid.given_arguments
- The texture() named-texture engine (BOSL2 skin.scad)
- Affine-matrix reorient/apply and polar_to_xy (BOSL2 transforms.scad, coords.scad)
- Drawing
- 2-D Shapes
- 3-D Shapes
- Native ops
Paths, regions & surfaces
- Evaluate, analyze and build Bezier curves, paths, and surface patches (BOSL2 beziers.scad)
- Metaball field primitives for VNF isosurface meshing (BOSL2 metaballs3d.scad)
- NURBS curve/surface evaluation and meshing (de Boor)
- Abstract :class:`Path` base class for 2-D and 3-D path types
- pybosl2.paths.CutPoint
- pybosl2.paths.Path
- pybosl2.paths.SubdivideMethod
- Parameters
- Return type
- Returns
- Returns
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Return type
- Parameters
- Return type
- Parameters
- Return type
- Returns
- Return type
- Parameters
- Returns
- Return type
- Return type
- Returns
- Return type
- Parameters
- Returns
- Return type
- Return type
- Parameters
- Returns
- Raises
- Return type
- Return type
- Return type
- Return type
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Return type
- Parameters
- Returns
- Return type
- Returns
- Raises
- Return type
- Return type
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Return type
- Parameters
- Return type
- Returns
- Parameters
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Return type
- Parameters
- Return type
- Returns
- Returns
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Returns
- Raises
- Return type
- Parameters
- Returns
- Return type
- Returns
- Return type
- Returns
- Return type
- Returns
- Return type
- Returns
- Return type
- Returns
- Return type
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Return type
- Parameters
- Returns
- Return type
- Parameters
- Returns
- Return type
- Object API for 2-D paths and regions
- Path-rounding core: round_corners and smooth_path (BOSL2 rounding.scad)
- Surface generators: sweep, path_sweep, skin, linear_sweep, rotate_sweep, spiral_sweep (BOSL2 skin.scad)
- 3-D turtle graphics (the Turtle class)
- VNF (vertices+faces) surface structure and grid meshing (BOSL2 vnf.scad)
Math & geometry
Parts library
- Standard ball-bearing cartridge models 🛠
- PCO-1810 / PCO-1881 bottle necks and caps 🛠
- Modular cubical truss segments and trusses 🛠
- pybosl2.parts.cubetruss.TrussSegment
- pybosl2.parts.cubetruss.Truss
- pybosl2.parts.cubetruss.TrussCorner
- pybosl2.parts.cubetruss.TrussSupport
- pybosl2.parts.cubetruss.TrussClip
- pybosl2.parts.cubetruss.TrussFoot
- pybosl2.parts.cubetruss.TrussUClip
- pybosl2.parts.cubetruss.TrussJoiner
- pybosl2.parts.cubetruss.truss_dist
- Examples
- Strongly-typed enums for the pybosl2 parts library
- Gears: spur (with undercut), helical, herringbone, rack, ring, bevel, worm 🛠
- pybosl2.parts.gears.SpurGear
- pybosl2.parts.gears.SpurGear2d
- pybosl2.parts.gears.RingGear
- pybosl2.parts.gears.Rack
- pybosl2.parts.gears.Rack2d
- pybosl2.parts.gears.BevelGear
- pybosl2.parts.gears.Worm
- pybosl2.parts.gears.WormGear
- pybosl2.parts.gears.HerringboneGear
- pybosl2.parts.gears.GearToothProfile
- GearSpec.circular_pitch
- GearSpec.diametral_pitch_func
- GearSpec.module_value
- GearSpec.pitch_value
- GearSpec.auto_profile_shift
- GearSpec.gear_dist
- GearSpec.worm_gear_thickness
- GearSpec.bevel_pitch_angle
- Examples
- Living (folding) hinges, knuckle hinges, and snap connectors 🛠
- Hooks and hook-like parts (the ring hook) 🛠
- Dovetail joints and snap-pin connectors 🛠
- Linear (LMxUU) ball bearings and their pillow-block housings 🛠
- Modular (Loc-Line style) ball-and-socket hose segments 🛠
- NEMA stepper-motor models and mounting masks 🛠
- The five Platonic solids as watertight polyhedra 🛠
- Phillips, hex, Torx and Robertson driver-recess masks 🛠
- Metric screws, nuts and screw holes built on the threading port
- V-groove sliders and rails 🛠
- Screw threading: threaded rods and nuts (ISO/trapezoidal/acme/square/buttress) 🛠
- Tripod mount plates: RC2 🛠
- FDM-optimised walls: sparse, corrugated, thinning and struts 🛠
- Routed bundles of wires 🛠
Extras
Parts catalog