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.32.2.tar.gz (828.4 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.32.2-cp312-abi3-win_arm64.whl (9.5 MB view details)

Uploaded CPython 3.12+Windows ARM64

openscad_cpp_evaluator-0.32.2-cp312-abi3-win_amd64.whl (9.9 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.32.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.3 MB view details)

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

openscad_cpp_evaluator-0.32.2-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (6.0 MB view details)

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

openscad_cpp_evaluator-0.32.2-cp312-abi3-macosx_13_0_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.32.2-cp312-abi3-macosx_13_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.32.2.tar.gz
  • Upload date:
  • Size: 828.4 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.32.2.tar.gz
Algorithm Hash digest
SHA256 7974761557010b044b8bb661dad85387343e7b98525dee0d21d36baefb414e80
MD5 a89d64b8e233b1370950b15879e0d01b
BLAKE2b-256 36b8953df136caeb0598f27d0cf61eac15d8877f01513a16db508040eb34416e

See more details on using hashes here.

File details

Details for the file openscad_cpp_evaluator-0.32.2-cp312-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.32.2-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 273c43a36494a594198cb1191c1aa29429ccc08def6733813a829bd89530d7f3
MD5 bf67a6ab0b3e2461619e6cd3c8a4f287
BLAKE2b-256 af7aa584e18d096d92d7deacb66b226fdf8e504b7add7ec758073aa6c29d3a45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.32.2-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7c0c90a74922e2c8501f93ee374e4813e9a8880bd2cc462d1bf06edf8e58371e
MD5 95f3b776ba03972909329424e38afdd7
BLAKE2b-256 8dd27619e37e1806c42ec4023e80ca9121855f3bca5ca4c379e5ed56f7a268c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.32.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7e63fd922584eea9ad4cd7598ecbe3c35b39b1ea1b18fccafc34cf934bd9223e
MD5 222da7c26254e915d24b5e5840198de6
BLAKE2b-256 616c651efce7f62366319c21ecec4a03c60c2e584cfc5bae23e399a817b26df4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.32.2-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2fce1a59a02f76c21ad4cb39b136ab1419ae7a6e5aa33997f03954ab034ffd62
MD5 c8e51011236c6e96f79cd17996f4d97b
BLAKE2b-256 d03cb6e60f1f808b681b8554dc4e557aafab8bf63cbb535adf8cf6cd3f3857fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.32.2-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 dc75c5a07c00d8212aa3ea94b462a84baa518457fc7b9d5f652574fc322aad68
MD5 870ec143ba40089b294be1e582565291
BLAKE2b-256 1c91651ebb046f300651ea77c15a11b448accbdb1da8d5b356b880eca889251a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.32.2-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 83676746822d1ea9732277de5e4f6ffff157dad175d86d18b18596b9c44e813f
MD5 3b845a2760d4121387ed9e4182335ede
BLAKE2b-256 6b9eb7bf8189c748d7062867ded2ce2bc391cde779dd8de63857aaadf7fc725b

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

This release

0.32.2 This release

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

0.24.0

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