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.30.0.tar.gz (802.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.30.0-cp312-abi3-win_arm64.whl (4.7 MB view details)

Uploaded CPython 3.12+Windows ARM64

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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.30.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.4 MB view details)

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

openscad_cpp_evaluator-0.30.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (3.1 MB view details)

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

openscad_cpp_evaluator-0.30.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.30.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.30.0.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.30.0.tar.gz
  • Upload date:
  • Size: 802.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.30.0.tar.gz
Algorithm Hash digest
SHA256 8956a84eb0589f17f2afb716d88afec362f9b32d60fbb6eff27d080fe6f95c37
MD5 4d9008105eb694abdbab2e7d04f35303
BLAKE2b-256 5acf5add62645c50ff604926345b2605598f038ffe008bae6e24d4f86d3ab85e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.30.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 49f0c2d3bb221e83711e7f771662ee819f8f3c1e079cd806c9dfc1dc8a23f45f
MD5 471350d26659958d6a52f833a3a27153
BLAKE2b-256 d30873017099eead5e2dfd5405a830d6f4ae291ef1f50ad444130ba6d8396be5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.30.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8adb5af67637e16ce53221558921d42ea0906d7a7ed15e9f009c674472a63471
MD5 98c9775f2290fe4e9fd7794cc1d2346a
BLAKE2b-256 e68c97dec6e15c6617a213483d2e047c0942cf08cbe4fb3eaa31e31cb4e93141

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.30.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a75e8601b26fca4811012d731c3cd1ff32b5b409dc46cfa0fc255be630390578
MD5 55360da02b194a1f3f1f1c9b1982dfee
BLAKE2b-256 adcad97dd5fd2e17d51a5fedabe8ea111e0e5bade8555bec10b56b4a0232fbce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.30.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b2ee6791cfa16154e1726bf76383ab5fd58412d732a8988f11f00324a5462c5b
MD5 644a0322a5412ce4415c02f7daefb2c4
BLAKE2b-256 fc99bd436b7b9cb51861e2610d0a8477d54d61b09593cb7ef74ea6d8e5ba3d7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.30.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 2b6606de5eb095c18422fef2f3b239b1fd73381202ac821defd8b6002822dfc2
MD5 f777e4b512a1fe587cab88bf9972188d
BLAKE2b-256 e5dcbeb7a1946b2fcef90498db4d82407aa8008c5b7decb3a49fe11f4454e1fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.30.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 82fe5ac63a77b0a26d2037d64c484b0767f6e68fe93aa1e818af00cf590767cc
MD5 5dd620d4215b9052cdad7cc37d035bfa
BLAKE2b-256 bf11256efa598e4d4ad305b3c95817716dd3579b63e75753645b0e7edff3f7cf

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

This release

0.30.0 This release

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