C++ OpenSCAD evaluator with Python bindings
Project description
openscad_cpp_evaluator
A C++20 port of openscad_evaluator (Python): an AST-walking
geometry engine that takes a parsed OpenSCAD AST and produces Manifold
CSG geometry, ready to export to STL/OBJ/OFF/3MF or hand off to a renderer.
Built on:
openscad_cpp_parser(git submodule) for lexing/parsing/AST/scope resolution.- Manifold v3.5.2 for the actual CSG boolean/mesh engine.
- Boost.Polygon for
roof()'s Voronoi-diagram construction. nothings/stb(header-only) forsurface()'s image loader and the built-in font provider's TrueType parsing/rasterization.
All fetched automatically via CMake FetchContent — no manual dependency installation beyond the
toolchain below.
Status
All planned phases (0–9) are complete: the full primitive/transform/boolean/modifier/control-flow
language surface, every builtin function, STL/OBJ/OFF/3MF import and export, hull()/minkowski()/
linear_extrude()/rotate_extrude()/roof()/offset()/surface()/DXF & SVG import/text(), an
opt-in content-hash geometry cache, per-call-site profiling, and a gdb-style --debug REPL. See
CLAUDE.md for the full phase-by-phase history and architecture notes.
Build
Requires:
- CMake ≥ 3.24
- A C++20 compiler (Clang, GCC, or MSVC — all three are covered by CI)
- Bison ≥ 3.8 and Flex
- macOS:
brew install bison flex(the system bison is too old; CMake auto-detects Homebrew's) - Linux:
sudo apt-get install bison flex - Windows: MSYS2's
bison/flex(pacman -S bison flex) — GitHub'swindows-latestrunner ships MSYS2 pre-installed atC:\msys64; CMake auto-detects it there too
- macOS:
GoogleTest and every other C++ dependency are fetched automatically.
git clone --recurse-submodules <this-repo>
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
(Omitting -DCMAKE_BUILD_TYPE=Release builds unoptimized — pass it explicitly for anything
performance-sensitive.)
On Windows, CMake defaults to the multi-config Visual Studio generator, which ignores
CMAKE_BUILD_TYPE; pass --config Release to cmake --build (and -C Release to ctest)
instead.
Test
ctest --test-dir build --output-on-failure
Run a single binary or filter:
build/tests/oscad_eval_tests
build/tests/oscad_eval_tests --gtest_filter='FormatNumber.*'
The suite runs twice in CI — once with the bytecode VM on (the default) and once with it off
(OSCAD_BYTECODE_VM=0) — so a regression in either the compiled or interpreted expression-eval
path is caught.
CLI
build/tools/cli/openscad-cpp-evaluator <input.scad> -o <output.{stl,obj,off,3mf}> [--format stl|obj|off|3mf] [--debug]
The output format is inferred from -o's extension, or set explicitly with --format.
--debug drops into a gdb-style REPL (break/run/continue/step/next/finish/print/
backtrace/set/list/quit/help) before and during evaluation.
build/tools/cli/openscad-cpp-evaluator model.scad -o model.stl
Architecture
See CLAUDE.md for the full per-file architecture map, the Python-reference cross-check history,
and the rationale behind every non-obvious design choice (the two-pass resolve/generate CSG
pipeline, the FontProvider injection seam, the closure-detection rule, etc.).
CI
GitHub Actions builds and tests on Linux, macOS, and Windows on every push/PR (.github/workflows/ci.yml).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openscad_cpp_evaluator-0.5.1.tar.gz.
File metadata
- Download URL: openscad_cpp_evaluator-0.5.1.tar.gz
- Upload date:
- Size: 632.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2735c822db70e55804ae14c344b9c123a182d59096b55f207a1cff06092e576e
|
|
| MD5 |
dd64100dc14ef3d04472c3357ee4c7b2
|
|
| BLAKE2b-256 |
7b60587e9489054ae8c7079f8fc9a0da274f43e2e4ce6cc6f8ba73c3c130538e
|
File details
Details for the file openscad_cpp_evaluator-0.5.1-cp312-abi3-win_amd64.whl.
File metadata
- Download URL: openscad_cpp_evaluator-0.5.1-cp312-abi3-win_amd64.whl
- Upload date:
- Size: 5.1 MB
- Tags: CPython 3.12+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08697048d7686e27ed0c32bcde2db9313cf8c8cb4297c183487d7b3cfa07e971
|
|
| MD5 |
8bb01b9f8e1f7efd8de22b79e84724d6
|
|
| BLAKE2b-256 |
5893521a5148c0de41fb0110d27ec580352bc70ba8e8b8b8abe99f9f68f033ff
|
File details
Details for the file openscad_cpp_evaluator-0.5.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: openscad_cpp_evaluator-0.5.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.12+, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7da47c2765ef204c4d99443566b155ad05b782b1f573beca163a9276c885a64
|
|
| MD5 |
f102cde044467bb81a40f0d71c52da41
|
|
| BLAKE2b-256 |
91ac69ccb813519557916c0ac4ae4b67930356665f6775edc00cc0a9f3f73ab3
|
File details
Details for the file openscad_cpp_evaluator-0.5.1-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: openscad_cpp_evaluator-0.5.1-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.9 MB
- Tags: CPython 3.12+, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6bd89b70c2ecaba7f521e7ad389011a52074f0fa173c115d51ebcf6353e8deb6
|
|
| MD5 |
b1ba0de75d2758c519cef3482d45033d
|
|
| BLAKE2b-256 |
ddcced3986f9e9f5b4e307e014667d332fd2e9e32605ab1946281683a2d43497
|
File details
Details for the file openscad_cpp_evaluator-0.5.1-cp312-abi3-macosx_13_0_x86_64.whl.
File metadata
- Download URL: openscad_cpp_evaluator-0.5.1-cp312-abi3-macosx_13_0_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.12+, macOS 13.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2da61d096454e4760ea5650b46bff3e231e9b03b048bad580ac3e5257b98f1d
|
|
| MD5 |
7ed26c9b8c985a5dc911af6a0023ba15
|
|
| BLAKE2b-256 |
3c39ef1c704b29e56bfd62893c2bccde2473ab1fdfd7ce1748e27cab8bd2c31f
|
File details
Details for the file openscad_cpp_evaluator-0.5.1-cp312-abi3-macosx_13_0_arm64.whl.
File metadata
- Download URL: openscad_cpp_evaluator-0.5.1-cp312-abi3-macosx_13_0_arm64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.12+, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77106a513e23ef97297ade5680ae2b951c3dcf4997a7dacf2be94ca59f0f62f5
|
|
| MD5 |
2941aa6fb9b39b75c0bcf28ceb6372a2
|
|
| BLAKE2b-256 |
3f19ca538a1f69459a23f26dcd1773026bcdebd05d09f0a8102db462ed79a9b1
|