Skip to main content

Python ports of the BOSL2 OpenSCAD library for use with PythonSCAD

Project description

pybosl2

Python ports of the BOSL2 OpenSCAD library, for use with PythonSCAD. The package is imported as bosl2, with one module per wrapped/ported .scad file so each Python module can be read side by side with its OpenSCAD source.

Most modules (constants, math, vectors, paths, shapes2d, …) are standalone pure-Python ports that work in plain CPython. The modules that build native geometry (shapes3d, masking, and the .polygon()/.polyhedron() boundaries) import the pythonscad/openscad native modules at load time.

Reference

Installation

pip install pybosl2

This pulls in numpy. To build native geometry you also need PythonSCAD:

pip install pythonscad

Usage

Import by submodule (the square/circle/cube/text names intentionally shadow the plain OpenSCAD builtins with BOSL2's anchor/spin/orient-aware versions, so the package is deliberately not wildcard-re-exported):

import bosl2.shapes3d as s3
import bosl2.shapes2d as s2

part = s3.cuboid([20, 20, 10]).up(5)

Development & tests

The test-suite runs against a real, pip-installed pythonscad in a virtualenv:

python -m venv .venv          # create from outside the repo dir, or the local
                              # bosl2/math.py etc. can shadow stdlib modules
source .venv/bin/activate
pip install -e '.[test]'      # installs pybosl2 + pytest + numpy + pythonscad
pytest

The [test] extra installs the pythonscad wheel, which provides the real pythonscad/openscad native modules the geometry code imports.

A small number of tests exercise the full PythonSCAD app rather than the pip wheel:

  • STL-render tests (tests/test_stl_render.py) drive the real PythonSCAD binary in a subprocess to export and measure meshes. They skip unless a binary is found (set PYTHONSCAD_BIN, or install the app to /Applications).
  • App-only native ops (e.g. roof()) skip when the pip wheel does not provide them.

pysolidfive (bundled separate package)

The repo also vendors pysolidfive — a small, self-contained libfive / signed-distance-function shape library for PythonSCAD. It is a separate piece: it does not depend on bosl2, ships in the same wheel as its own top-level pysolidfive package, and keeps its own tests, docs, and pyproject.toml.

Its test-suite runs against the numeric mock_libfive stand-in bundled in pysolidfive/tests, so it needs only numpy (no pythonscad wheel). It uses unittest rather than pytest — the package eagerly import libfives at load, which is incompatible with pytest's package-based collection:

cd pysolidfive/tests
python -m unittest discover -s . -t .

Documentation

The API docs are built with Sphinx (autodoc + napoleon) straight from the module docstrings:

pip install -e '.[docs]'
make -C docs html      # renders into wiki/

On push to main, the docs GitHub Actions workflow builds and publishes them to GitHub Pages (enable Pages with Settings → Pages → Source: GitHub Actions). Examples in the docs embed interactive 3-D STL viewers; the renders are cached under docs/_generated/ and docs/_extra/_stl/ — commit those caches so the images appear on Pages, since CI has no PythonSCAD binary to render them.

License

BSD 2-Clause License — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybosl2-0.6.0.tar.gz (425.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pybosl2-0.6.0-py3-none-any.whl (409.6 kB view details)

Uploaded Python 3

File details

Details for the file pybosl2-0.6.0.tar.gz.

File metadata

  • Download URL: pybosl2-0.6.0.tar.gz
  • Upload date:
  • Size: 425.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pybosl2-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3c6827225e37dbfd8b724e5ef5d0a5717b57bf727c3829e4da86d1cd9796a5d7
MD5 b1c8ceed2b4ec23d7f20da947631bb16
BLAKE2b-256 6bbfa1ae9538b2c36b0344192f481181ae86350897e0673ccfb72101a148755b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybosl2-0.6.0.tar.gz:

Publisher: release.yml on pinkfish/pybosl2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybosl2-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: pybosl2-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 409.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pybosl2-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aefd0e9ae0484dad720e8c6de8c8070695da9fd070143e8ae6f8d8d86c84d0d2
MD5 50632ffc99a0c91bfde0362b09082f50
BLAKE2b-256 5523e59cad9aa6cbbfa38cf0ecac2c40f465f15f3853b6ee1a607b481171c58c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybosl2-0.6.0-py3-none-any.whl:

Publisher: release.yml on pinkfish/pybosl2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page