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

Metadata

Release files for openscad-cpp-evaluator 1.46.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.46.0
File Size Uploaded
openscad_cpp_evaluator-1.46.0.tar.gz 1.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for openscad-cpp-evaluator 1.46.0
File
openscad_cpp_evaluator-1.46.0-cp312-abi3-win_arm64.whl CPython 3.12 abi3 Windows ARM64 Details
openscad_cpp_evaluator-1.46.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
openscad_cpp_evaluator-1.46.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
openscad_cpp_evaluator-1.46.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.46.0-cp312-abi3-macosx_13_0_x86_64.whl CPython 3.12 abi3 macOS 13.0+ x86-64 Details
openscad_cpp_evaluator-1.46.0-cp312-abi3-macosx_13_0_arm64.whl CPython 3.12 abi3 macOS 13.0+ ARM64 Details

Total release size: 49.8 MB

Release files / openscad_cpp_evaluator-1.46.0.tar.gz

Download URL openscad_cpp_evaluator-1.46.0.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
d3bd9e4da040fe3136413c436cb6592412af620a37676d7ce1d4cdfba7eb2184
BLAKE2b-256 checksum
How to use checksums
f3ea0ba5efdb4ae12f988a43ca49f2c68ebf06bcd1a5fa923a4dd7ae3b75e1f3
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.46.0-cp312-abi3-win_arm64.whl

Download URL openscad_cpp_evaluator-1.46.0-cp312-abi3-win_arm64.whl
Size 10.5 MB
Tags CPython 3.12 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
36fb2ce41cd4082caa69e1ff835646cbf8cfdedfffb8562f1ab57fbbd4455f51
BLAKE2b-256 checksum
How to use checksums
c103da97ffe09133aa59931644a8cedf979b7f80a851b5dc88834dffbc8f7e4f
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.46.0-cp312-abi3-win_amd64.whl

Download URL openscad_cpp_evaluator-1.46.0-cp312-abi3-win_amd64.whl
Size 11.0 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
c3674308a1c286ff14733a5e10ceccb27720e90e8f3174cc2d93b5414892237b
BLAKE2b-256 checksum
How to use checksums
78cd65a7b5cc9603f5e36e3c87464c916dea40ac594b392836ee596782328f36
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.46.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscad_cpp_evaluator-1.46.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 7.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
fbff2e074a41a59f28d1f8834d8e8c3829bba5cc3ddcb491ce12ffa988761ff6
BLAKE2b-256 checksum
How to use checksums
4c849490465e25dbcc6f36bbc1f52c87d03c699c36614d329e90fd65f23072c1
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.46.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscad_cpp_evaluator-1.46.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 7.2 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
2947eb25b32b0a10dc88f8faffee4191d9b96f656bf6235b83cc14c6992c37c5
BLAKE2b-256 checksum
How to use checksums
10b88b97238e6e0dcbc3a0f8766f6f6f6fb29bcac0c7a1be33b245e13afe3e3f
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.46.0-cp312-abi3-macosx_13_0_x86_64.whl

Download URL openscad_cpp_evaluator-1.46.0-cp312-abi3-macosx_13_0_x86_64.whl
Size 6.1 MB
Tags CPython 3.12 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
b8a07a2092830ee084833b7e841614772b385dc5cca20f786f8196c69933c910
BLAKE2b-256 checksum
How to use checksums
c75165430f10e1f296fc1efe252821c6035757c6dd3384894279d2375baebf10
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.46.0-cp312-abi3-macosx_13_0_arm64.whl

Download URL openscad_cpp_evaluator-1.46.0-cp312-abi3-macosx_13_0_arm64.whl
Size 5.8 MB
Tags CPython 3.12 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
939d2a94b8434f6829a1c72fc9c3a8a107899e3b4258ba99f04f9deac231dcf5
BLAKE2b-256 checksum
How to use checksums
6f94f3aa53fc5b564c27a023d493338beb3005ecab720fef046973d962f0c2af
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.47.0

7 release files

This release

1.46.0 This release

7 release files

1.34.0

7 release files

1.33.0

7 release files

1.32.0

7 release files

1.31.0

7 release files

1.30.0

7 release files

1.29.0

7 release files

1.28.6

7 release files

1.28.5

7 release files

1.28.4

7 release files

1.28.3

7 release files

1.28.2

7 release files

1.28.1

7 release files

1.28.0

7 release files

1.27.0

7 release files

1.26.0

7 release files

1.25.0

7 release files

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

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