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

Uploaded CPython 3.12+Windows ARM64

openscad_cpp_evaluator-0.39.0-cp312-abi3-win_amd64.whl (10.0 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.39.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.4 MB view details)

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

openscad_cpp_evaluator-0.39.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.39.0-cp312-abi3-macosx_13_0_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.39.0-cp312-abi3-macosx_13_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.39.0.tar.gz
  • Upload date:
  • Size: 881.5 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.39.0.tar.gz
Algorithm Hash digest
SHA256 24862a45a1f69a1c40e97ee24a0e5f8029efda0a0a2372623de0f1c7e53d64d6
MD5 164b40e3ee08824cab9fb23fc50161dd
BLAKE2b-256 95340d211b864656f80f0b614c68bbc73288907f4ba6135273d63b3b65144890

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.39.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 a6f211014268a5c1080034390c4fe642ffa9b6799e14780151d9daaa5c3b5e7e
MD5 a63e3e5a00fcd4fde56f3c623fcc80b6
BLAKE2b-256 b3633b35c6db939cd2e7ccdce8e6af0ff3c8caf4885a6038710d9b77894e99e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.39.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 614d2834825281b9d95d3d5768d3ca5c32c1661b1d9e8f430a31a10ab0e024dc
MD5 364281ee795ba58513779f3f0134b211
BLAKE2b-256 f1e73ed3a053c56178c1f11728f487730a4e7fa2f2d9a8bf901faae316634d68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.39.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b69575a2b73c1549cfdc19b5b9ec55c27c4409d431dc4d98a111f92bc2299a0a
MD5 df11d91790bef75de27053690873a822
BLAKE2b-256 4995fdecdce6ad552941c891faa86cd8a03251face3bf38d6881c5a67b5180cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.39.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 717d4672017896b78a73cbb067a05f361fcb3a6596e6217a06c89be1dc5d5515
MD5 f75b85d8ffa4215caf842f558ad43fe1
BLAKE2b-256 7208693bda7b25ff3989747c808388b091106f915942b3b71058d2b795181d72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.39.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 99dc127118f7115e34587560725aabbbe161e67be3df93d7bc2956779a221399
MD5 22e73bfb686c58f3249a3bdebb9c6434
BLAKE2b-256 6a818aa88cf5f9b4a211a55e5c303552afa77cd155f42167a522953ff07e9f94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.39.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 2c73b1e2d8c4608979518441ee9ca458a60875de3e18c2c7d25197d76b62f795
MD5 266bf8afd780ed641cdef26371fb78e5
BLAKE2b-256 ee53c796589332df55a1ab8c79b634b311c7746482313e7fd71644b74a16bb48

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

This release

0.39.0 This release

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

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