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).

Release files for openscad-cpp-evaluator 1.12.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openscad-cpp-evaluator 1.12.0
File Size Uploaded
openscad_cpp_evaluator-1.12.0.tar.gz 1.0 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for openscad-cpp-evaluator 1.12.0
File
openscad_cpp_evaluator-1.12.0-cp312-abi3-win_arm64.whl CPython 3.12 abi3 Windows ARM64 Details
openscad_cpp_evaluator-1.12.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
openscad_cpp_evaluator-1.12.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
openscad_cpp_evaluator-1.12.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details
openscad_cpp_evaluator-1.12.0-cp312-abi3-macosx_13_0_x86_64.whl CPython 3.12 abi3 macOS 13.0+ x86-64 Details
openscad_cpp_evaluator-1.12.0-cp312-abi3-macosx_13_0_arm64.whl CPython 3.12 abi3 macOS 13.0+ ARM64 Details

Total release size: 43.6 MB

Release files / openscad_cpp_evaluator-1.12.0.tar.gz

Download URL openscad_cpp_evaluator-1.12.0.tar.gz
Size 1.0 MB
Tags Source
SHA-256 checksum
How to use checksums
3b78f0a4769ed84ff2de1540e520b02529ac83320e032187ff43036d45b881c4
BLAKE2b-256 checksum
How to use checksums
7a70ede268b0bad53ddc897e7d46c3ac88cfeb87d5be5047464fdc872b20e082
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.12.0-cp312-abi3-win_arm64.whl

Download URL openscad_cpp_evaluator-1.12.0-cp312-abi3-win_arm64.whl
Size 9.7 MB
Tags CPython 3.12 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
3f9267d3356e894c73028a220bc1dcbcf4387d984137745cf5fa801357268820
BLAKE2b-256 checksum
How to use checksums
9a4ec25f73d07e662c699a903b2e76dd61a89011b85370b589a0e40ce53f49c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.12.0-cp312-abi3-win_amd64.whl

Download URL openscad_cpp_evaluator-1.12.0-cp312-abi3-win_amd64.whl
Size 10.1 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
7775a30e5f894ef66aa8c867c6f655e300458c95d9e0fc75a4c350d50713caec
BLAKE2b-256 checksum
How to use checksums
036620d7084f0d14b9c4dc230fc46c9c54fd26531847e4193e610f93deabea8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.12.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscad_cpp_evaluator-1.12.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 6.6 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
093040b9dfe0f28b679e4f227a4aeead2a9b444b123cebb3d01a889d1db9c09e
BLAKE2b-256 checksum
How to use checksums
9c6d0ca89adadcde2aaba6ee7846e617c2d926b3cf460643650be6cc999b7080
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.12.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscad_cpp_evaluator-1.12.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 6.2 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
e2eec4224529e88ddf6af45f6b26081e15819ec010bc583f3531f8c9e1240fd1
BLAKE2b-256 checksum
How to use checksums
bd218e33e1caf713191d7dc52432bd507f0b167f3866a42a13fb0ac910904619
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.12.0-cp312-abi3-macosx_13_0_x86_64.whl

Download URL openscad_cpp_evaluator-1.12.0-cp312-abi3-macosx_13_0_x86_64.whl
Size 5.2 MB
Tags CPython 3.12 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
fce36d7704c91df87cc7d4118726fc2a76141039df9e903e492b4fd4856a7819
BLAKE2b-256 checksum
How to use checksums
6b4b324e098ad752add0ac85b2ccb8de6e8ac98866fa6636fce9633ad349fde3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / openscad_cpp_evaluator-1.12.0-cp312-abi3-macosx_13_0_arm64.whl

Download URL openscad_cpp_evaluator-1.12.0-cp312-abi3-macosx_13_0_arm64.whl
Size 4.9 MB
Tags CPython 3.12 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
608239633e19a8a66e605aef40459b679ca7a8d6e1a83253f43cc2be26856a92
BLAKE2b-256 checksum
How to use checksums
2e21d73ef76ec538377063975de856b939449a5ae35dca95d4b871e3e4c35425
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.24.0

7 release files

1.23.1

7 release files

1.22.0

7 release files

1.21.0

7 release files

1.20.5

7 release files

1.20.3

7 release files

1.20.2

7 release files

1.20.1

7 release files

1.20.0

7 release files

1.19.3

7 release files

1.19.2

7 release files

1.19.1

7 release files

1.19.0

7 release files

This release

1.12.0 This release

7 release files

1.9.0

7 release files

1.8.0

7 release files

1.7.2

7 release files

1.7.0

7 release files

1.6.1

7 release files

1.6.0

7 release files

1.5.0

7 release files

1.4.1

7 release files

1.4.0

7 release files

1.3.1

7 release files

1.3.0

7 release files

1.2.0

7 release files

1.1.0

7 release files

1.0.1

7 release files

0.55.0

7 release files

0.54.0

7 release files

0.53.0

7 release files

0.52.0

7 release files

0.51.3

7 release files

0.51.1

7 release files

0.51.0

7 release files

0.50.1

7 release files

0.50.0

7 release files

0.49.0

7 release files

0.48.0

7 release files

0.47.0

7 release files

0.46.0

7 release files

0.45.1

7 release files

0.45.0

7 release files

0.44.0

7 release files

0.43.0

7 release files

0.42.1

7 release files

0.42.0

7 release files

0.41.0

7 release files

0.40.0

7 release files

0.39.0

7 release files

0.38.1

7 release files

0.38.0

7 release files

0.37.0

7 release files

0.36.0

7 release files

0.35.0

7 release files

0.34.0

7 release files

0.33.0

7 release files

0.32.2

7 release files

0.32.0

7 release files

0.31.2

7 release files

0.31.1

7 release files

0.31.0

7 release files

0.30.0

7 release files

0.29.3

7 release files

0.29.2

7 release files

0.29.1

6 release files

0.29.0

6 release files

0.28.2

6 release files

0.28.0

6 release files

0.27.1

6 release files

0.27.0

6 release files

0.13.0

6 release files

0.10.0

6 release files

0.9.2

6 release files

0.9.1

6 release files

0.9.0

6 release files

0.8.1

6 release files

0.8.0

6 release files

0.7.0

6 release files

0.6.1

6 release files

0.6.0

6 release files

0.5.1

6 release files

0.4.10

6 release files

0.4.9

6 release files

0.4.8

6 release files

0.4.7

6 release files

0.4.6

6 release files

0.4.5

6 release files

0.4.4

6 release files

0.4.3

6 release files

0.4.2

6 release files

0.4.1

6 release files

0.4.0

6 release files

0.3.0

6 release files

0.2.0

6 release files

0.1.0

6 release 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