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

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.49.1
File Size Uploaded
openscad_cpp_evaluator-1.49.1.tar.gz 1.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for openscad-cpp-evaluator 1.49.1
File
openscad_cpp_evaluator-1.49.1-cp312-abi3-win_arm64.whl CPython 3.12 abi3 Windows ARM64 Details
openscad_cpp_evaluator-1.49.1-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
openscad_cpp_evaluator-1.49.1-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.49.1-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
openscad_cpp_evaluator-1.49.1-cp312-abi3-macosx_13_0_x86_64.whl CPython 3.12 abi3 macOS 13.0+ x86-64 Details
openscad_cpp_evaluator-1.49.1-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.49.1.tar.gz

Download URL openscad_cpp_evaluator-1.49.1.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
1b6e1d0fa0b67dea6fe42b4497786062974b32ee3cccdd4989876028bc439d09
BLAKE2b-256 checksum
How to use checksums
b814f79cc677427af57e13dc7cdc6f42b43230989dded46df56f60ab880ea322
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.49.1-cp312-abi3-win_arm64.whl

Download URL openscad_cpp_evaluator-1.49.1-cp312-abi3-win_arm64.whl
Size 10.5 MB
Tags CPython 3.12 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
db2a17a42f974b8bb1ea439c696a0e043f969c602a98e8605a1e7424fb1f9dd3
BLAKE2b-256 checksum
How to use checksums
9e8fce0673a50546b559b75fd1547fc18ca4728d8928dc276666e8fc9a41f2c2
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.49.1-cp312-abi3-win_amd64.whl

Download URL openscad_cpp_evaluator-1.49.1-cp312-abi3-win_amd64.whl
Size 10.9 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
2fd9d2a3172e3a28ae378318456873f34d41e79aa55f99f2dc40860b84defd82
BLAKE2b-256 checksum
How to use checksums
3463ca3b933e7be549cfd27cfde5d4107b85e8b6156d663fdb69949caa2d7b16
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.49.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscad_cpp_evaluator-1.49.1-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
8e0b93ce3c9261ef292a75dddc673c9bee5d4a3cef2917736c45a91e6b851b01
BLAKE2b-256 checksum
How to use checksums
77c5d066ad7f4ff06c446a3bb8d069191a1560cd97a7810725b05cc9f5dec71a
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.49.1-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscad_cpp_evaluator-1.49.1-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 7.1 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
04fdd2a23dcc0c227efb0ec55dc19bedb7f5d84961f5c8e18706cebecf2ad782
BLAKE2b-256 checksum
How to use checksums
a710baaeef48bf457bc72e3ed5c90d8a0d4854a86c5e0084f4d8a48d59521357
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.49.1-cp312-abi3-macosx_13_0_x86_64.whl

Download URL openscad_cpp_evaluator-1.49.1-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
c03e5a35cf231434775493442c9f7c3ffd6786e5dec53303371a4f46428223b9
BLAKE2b-256 checksum
How to use checksums
349133a4a56286a3098d8aadaac871037a73ebecaa704f8fda0488bb12692667
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.49.1-cp312-abi3-macosx_13_0_arm64.whl

Download URL openscad_cpp_evaluator-1.49.1-cp312-abi3-macosx_13_0_arm64.whl
Size 5.7 MB
Tags CPython 3.12 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
7bfadb50137620b89fd49679cd715d1a40b82b67e08549657c950a6407ea89d3
BLAKE2b-256 checksum
How to use checksums
3366915a3cf74bd84d2a0997cdf403c1de5c1826d978b733aa0b5f7e8a5cb0a2
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

This release

1.49.1 This release

7 release files

1.49.0

7 release files

1.48.0

7 release files

1.47.0

7 release files

1.46.0

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