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.42.1.tar.gz (892.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.42.1-cp312-abi3-win_arm64.whl (9.6 MB view details)

Uploaded CPython 3.12+Windows ARM64

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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.42.1-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.42.1-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.42.1-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.42.1-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.42.1.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.42.1.tar.gz
  • Upload date:
  • Size: 892.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.42.1.tar.gz
Algorithm Hash digest
SHA256 6ca8e134d0d660bb6072cbdf1fd978b1dd5d33b09ebe7301b62569b3220eaf60
MD5 997e0dd97739810f1af725a71a6540da
BLAKE2b-256 52a7c9c2e7a35d3258512e05b044b2ad5e816e4ac1b8f73bc80fb723a5429672

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.42.1-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 d25a8b10dbe277437c8c93203dee344b8e11e6e922c1375f8b5c9dd9d4b29b2f
MD5 5f15bc8fb9c1b1fdb1b16e47fa5a742e
BLAKE2b-256 83a8d45044988dd3a06a52af1b309101a8a762cfa217402f31e0b7f181de2f55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.42.1-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 42160a26f3bea0b3ce37927c6446ba13f24a979b109655dd787863c29d370eb8
MD5 b56ac99a4550b79d0d529a5732cbe341
BLAKE2b-256 5097b4219cedb289039f44dec0f041fb2958ca1b868398563397dc4611688fda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.42.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7fa09eec4622a00dd783935bdda89fe9d5edb7f8f78093fb4b650dda685e3267
MD5 67c74af1d80a51a94e9e224904515b19
BLAKE2b-256 6197dfb8c6de42f6beaf02527a9fed60d9a160949baa551bcc6ed3b5f7f8b3c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.42.1-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0f85cefb65c739875e9cddc25a9cbb6df44058bf6efaaacfac6f44099a0c303b
MD5 36d767c73bfecd3cf1581c19a6787e28
BLAKE2b-256 eb82b33b1d8dd81548462596763ad3afc4cb5ab029f1b8ff3dc8b7cbd30fbd88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.42.1-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8b7836db57e73ad3b4aa45ec8757173c372ecce15e7d9b630ec7d3f4eca34fb6
MD5 ec2ba34c51af2c491d00f1787100e261
BLAKE2b-256 6f25644b117344666e1cc9c32715fa54297897b56f037197d22d239ae9696459

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.42.1-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 005d56a3ba381ec4e0e8b1734cc4255235515667c42d56c6e36a074bd38799ff
MD5 332d87b4b07ca71ad280aba1f9ff1342
BLAKE2b-256 38a9e37972918d6c2bd0f9070a92b56258d723b5930341feee4014d1a89d86d7

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

This release

0.42.1 This release

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

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