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

Uploaded CPython 3.12+Windows ARM64

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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.35.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.35.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.35.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.35.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.35.0.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.35.0.tar.gz
  • Upload date:
  • Size: 848.3 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.35.0.tar.gz
Algorithm Hash digest
SHA256 d8f1f77ab4315c852457da58ee0dca789dabb607424bca03d530b982cc30b844
MD5 713ed873771ce26c5debaf365e59cb3e
BLAKE2b-256 1de3567b2c910f6957816f83404fc99403e19e1dca15201e875d12c5cf0d9712

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.35.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 a409b342adaef849aae31fb569f09b29706558d972bee9dbe6ef49cb4e558763
MD5 fd4925b05be403487cecd77cf9760a07
BLAKE2b-256 d65a474dedd67dd59ee4a243ad9133595892dc1002dc2ab0507b4db2008c2775

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.35.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 238cff7804625feb2d432962d2a7ee64c6e55ba927f0b8d5beb37c2a8b82b5e3
MD5 8f4fbc5b0a06f3c9e48defde7a6fcb60
BLAKE2b-256 2ec52c53bf14f9929fd0b48c8c17794b0b7cd78dd8a5fabe1f7e8fa94c92b181

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.35.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 acad2c27ae73655b3e280f6e9fdc1bfb2ef0aeaf24e601f26207e0f64448a6f4
MD5 9a7f82f52b98bdba21ec112f2989cca2
BLAKE2b-256 8bc513d00faeec9149acc1ba95af0e3379e94a1887c29e0e09cc0a74d16f966e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.35.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3b6de572d49c36cba39952b65ef9c16b328ac5593ae9c0e0451d9b7a3ad04ca4
MD5 99c858b861f050bb6643ac0e16427cfd
BLAKE2b-256 d8a65b3b33931c6d1981576a002daaec5ad581e092e5302d938390fcbb41ca30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.35.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 cac85b898afc39c05650ac86aafb84dd9997c49216e4ed31c6de6b666e0f462c
MD5 e5b03e2dff7e6d6c2c251dc9ef63c4c1
BLAKE2b-256 ead37edf2c7c48e7e0a6d35ea319377f6feee976cee602ac0a8c2f6993440b94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.35.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 8f36e289da9d47d684c16e29a3f9e513127b6f340bf68dea9bd6412f58d6a84a
MD5 7b10f8d38583e6c68e66d6bf522a7ac7
BLAKE2b-256 c35bd9e53c2162ce42cf98da2c14724fa068f411228a3e70a486942064a1fa8b

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

This release

0.35.0 This release

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