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

Uploaded CPython 3.12+Windows ARM64

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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.36.0-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.36.0-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.36.0-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.36.0-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.36.0.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.36.0.tar.gz
  • Upload date:
  • Size: 853.1 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.36.0.tar.gz
Algorithm Hash digest
SHA256 4608bcbff2da302ff7b6c994b8473f866688119fdc8446ada68a2abdbf8a93f1
MD5 9def5a944944193d5e7a053832994a2b
BLAKE2b-256 30f1ad8fd237a4f479ffe026362535fefbc354c5a3f0b2547be5aaf51344d062

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.36.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 9eae630cac7c4cae870ac265a3c27357afaa72bd3a57349d0b579f6769efd96a
MD5 4472c77f7533a620829940e2ff13d55d
BLAKE2b-256 aacd5f7b201a1feb4beef3ce94ff09b2c8c412796577c5ef98652c7ce8b20a32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.36.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 dc3e2e4f00a5d2571eeda9429d234860d02e8cd2ab2ac288c8fca641594e5be7
MD5 6caafeeaa9292a2c3f47ac7331de6740
BLAKE2b-256 1d452143d82da70b2a671c8f1fe7fa184a3c466b8bc1051f4c486f9d06942593

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.36.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e277fbbd459b714087ec831ce1a5b04dd4c4f31b3e024b66f55a058124cd58ce
MD5 00b537467250d236f75cfc08e610d3ba
BLAKE2b-256 b5d73042aac1d4455501c7cf6b3e34712c0ce62ecefb9ffacd48b982f2b8bdbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.36.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a05715651b69f59881f117c6f2cfa620db49cebfac6fd083977fdbb329941b9b
MD5 7f56608a6804daea51b7b62626b1cdd4
BLAKE2b-256 801f327371d2eafd7489a386474ef36a26a7df5c0047a31b0a5d75810cd52ad0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.36.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e3b6d3839b27661990772b90cf92b7369d2991511d7c7d12c96da6e5a0114e32
MD5 a063d95f6bf437a98cb58613b75c6072
BLAKE2b-256 0fe56804ef2b0d284d331eedbf63112201ca3bd0044adea48db18e7d09fe9e9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.36.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 8a311170d2c2193281f1713805e831012cd6be5d5ba48f8001b4719b3fa96836
MD5 e913767f322273cf87150cead300646e
BLAKE2b-256 11c513a3c752df2d6ec80ca01ae095fc7221db68a8c9686e599e21808bb483ad

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

This release

0.36.0 This release

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

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