Skip to main content

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) for surface()'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's windows-latest runner ships MSYS2 pre-installed at C:\msys64; CMake auto-detects it there too

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).

Download files

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

Source Distribution

openscad_cpp_evaluator-0.24.0.tar.gz (775.2 kB view details)

Uploaded Source

Built Distributions

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

openscad_cpp_evaluator-0.24.0-cp312-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.24.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

openscad_cpp_evaluator-0.24.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

openscad_cpp_evaluator-0.24.0-cp312-abi3-macosx_13_0_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.24.0-cp312-abi3-macosx_13_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

Details for the file openscad_cpp_evaluator-0.24.0.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.24.0.tar.gz
  • Upload date:
  • Size: 775.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for openscad_cpp_evaluator-0.24.0.tar.gz
Algorithm Hash digest
SHA256 aace44666478c817f05473688942fe5ee5dfe63bc94c3cd3dd4a95389ea3943f
MD5 e2cbb44782ab0f3b9f895abf362273c2
BLAKE2b-256 943de8d6562c9e4a3776dd859ff7e7112696fccdb624ef3c683236efa87471f8

See more details on using hashes here.

File details

Details for the file openscad_cpp_evaluator-0.24.0-cp312-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.24.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c9c074d696f06688a54b458fe23eb13ecd7ec5f82063244e17dce9a35496aab4
MD5 97d71065ffdb80b4d85aa35484c6ee8a
BLAKE2b-256 90c24c67912a7d0450c5244ccf1bda1e8ef37ebc03b8014ad692652765731071

See more details on using hashes here.

File details

Details for the file openscad_cpp_evaluator-0.24.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.24.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 800ab9eb18d92405ebc8dfe53c408314796812fbd7c6238c0db7109aca869489
MD5 c578ecde1ab44904ed9c2b83a709e88a
BLAKE2b-256 a6dc4af4e63d8a91de60b02d92bca5554b4d804554e73d9a89fc14b21f26505f

See more details on using hashes here.

File details

Details for the file openscad_cpp_evaluator-0.24.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.24.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ba8f085b4b2fb7697cf833dc1dc54ceb8b7d0d9532831025da06c53ca85a3694
MD5 3c510631814c28feec30818d4cd6686a
BLAKE2b-256 a47a6aa1fa77cd9ce8781f9a9564e49d5c5918daa24e007cf3e34dfdcb7df9d0

See more details on using hashes here.

File details

Details for the file openscad_cpp_evaluator-0.24.0-cp312-abi3-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.24.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 47230db3cfde0b96d79311d2c1169528dbd112553408f365a6eab3ef151f2654
MD5 367975faaadb0429228f6f03b8d0aab7
BLAKE2b-256 5d770234dc902b4145d2e7e28d7ad2ea553b6bacb5333c9ebc45a12438ed360f

See more details on using hashes here.

File details

Details for the file openscad_cpp_evaluator-0.24.0-cp312-abi3-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.24.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 8a2e1884f7d7231f5dfe2a5e0fa890dce5a103f6e55f82ef350270d6eb78ccf0
MD5 b3df955298240823ade4de555a236ea4
BLAKE2b-256 76d78650d7f15337c385afd91e933c46ed6d4b7be404030ad380968cae90d17e

See more details on using hashes here.

Release history Release notifications | RSS feed

0.55.5

7 files

0.55.4

7 files

0.55.3

7 files

0.55.2

7 files

0.55.1

7 files

0.55.0

7 files

0.54.0

7 files

0.53.0

7 files

0.52.0

7 files

0.51.3

7 files

0.51.1

7 files

0.51.0

7 files

0.50.1

7 files

0.50.0

7 files

0.49.0

7 files

0.48.0

7 files

0.47.0

7 files

0.46.0

7 files

0.45.1

7 files

0.45.0

7 files

0.44.0

7 files

0.43.0

7 files

0.42.1

7 files

0.42.0

7 files

0.41.0

7 files

0.40.0

7 files

0.39.0

7 files

0.38.1

7 files

0.38.0

7 files

0.37.0

7 files

0.36.0

7 files

0.35.0

7 files

0.34.0

7 files

0.33.0

7 files

0.32.2

7 files

0.32.0

7 files

0.31.2

7 files

0.31.1

7 files

0.31.0

7 files

0.30.0

7 files

0.29.3

7 files

0.29.2

7 files

0.29.1

6 files

0.29.0

6 files

0.28.2

6 files

0.28.0

6 files

0.27.1

6 files

0.27.0

6 files

0.26.1

6 files

0.26.0

6 files

0.25.0

6 files

This release

0.24.0 This release

6 files

0.23.0

6 files

0.22.0

6 files

0.21.0

6 files

0.17.0

6 files

0.16.0

6 files

0.15.0

6 files

0.14.0

6 files

0.13.10

6 files

0.13.9

6 files

0.13.7

6 files

0.13.5

6 files

0.13.4

6 files

0.13.3

6 files

0.13.2

6 files

0.13.1

6 files

0.13.0

6 files

0.10.0

6 files

0.9.2

6 files

0.9.1

6 files

0.9.0

6 files

0.8.1

6 files

0.8.0

6 files

0.7.0

6 files

0.6.1

6 files

0.6.0

6 files

0.5.1

6 files

0.4.10

6 files

0.4.9

6 files

0.4.8

6 files

0.4.7

6 files

0.4.6

6 files

0.4.5

6 files

0.4.4

6 files

0.4.3

6 files

0.4.2

6 files

0.4.1

6 files

0.4.0

6 files

0.3.0

6 files

0.2.0

6 files

0.1.0

6 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page