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-1.1.0.tar.gz (954.7 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-1.1.0-cp312-abi3-win_arm64.whl (9.6 MB view details)

Uploaded CPython 3.12+Windows ARM64

openscad_cpp_evaluator-1.1.0-cp312-abi3-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.5 MB view details)

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

openscad_cpp_evaluator-1.1.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (6.1 MB view details)

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

openscad_cpp_evaluator-1.1.0-cp312-abi3-macosx_13_0_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-1.1.0-cp312-abi3-macosx_13_0_arm64.whl (4.8 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

Details for the file openscad_cpp_evaluator-1.1.0.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-1.1.0.tar.gz
  • Upload date:
  • Size: 954.7 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-1.1.0.tar.gz
Algorithm Hash digest
SHA256 9ed89a5a37dd1a5917f0b23b26619f13b4840102b3eaf8e053cb690b75b0dcb7
MD5 ec4d4f14784a9563becdd441794a8596
BLAKE2b-256 1c1d9fd568cb958c68391f24d72a11233a4ce365d06ff1e5724b07c9ec20742f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.1.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 da8a9b951db8e37389b624f5b63105f01c6aed8c2e5677ad8d9909ea7aa42df5
MD5 3480381b26ff033f87d5b4f5c7d69966
BLAKE2b-256 72505dc8b18ef8d1bc4db853edf2841ce5baaf1e1860f2b0bd1b54cfd2c33a01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.1.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c4dfcf47f2c122d1bc3aa676489d5d5d15c958a1c5b7cacb4ff4f5cc49f5e753
MD5 385dfae336770e9c8718b27228a42848
BLAKE2b-256 027c701048a2a1d3e48073268e021b673f82ee5919da8d2910b859bd9a4b927d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6eb84b3ef39fc1e59978d146d6cb63ec9b8b24149ca7b84cfd2912af17d66279
MD5 2dbda4737930d44564d207742269da12
BLAKE2b-256 82d54a538ac1e4959c0b9482594aeb8022c0c5f8cd35e485cbbb70923c5b998b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.1.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 11f46409d631ce8f03500d9dd58ca96a86a53e22a83d9685a6d331c9afcb1115
MD5 679f9040cc085f9582b1fc14fde98ccd
BLAKE2b-256 5e02dd8c6530aaa4a06ccf9f2c1bdcc5c2b196d311b22926ac19890adbf2f28c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.1.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 10f07563f4a39b19ea42665d5ada0fc1b24df4037cf807c83a8914aec445753c
MD5 0c93b7e49c7892e5c6e0397f7aec9e1a
BLAKE2b-256 dc87982e7f1f1699a983034115fe0be0a5a965347503527a6a80c14f5e76c3f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.1.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 357a6d88e0055ae3f8870970587139c142713f3443a8b837263a13295c9bd5a6
MD5 e9e58b382440c314ffd01e920867ce32
BLAKE2b-256 8af0875e52c36516d9536be54a42983ced04697fd05067d19ec8b467fdf24704

See more details on using hashes here.

Release history Release notifications | RSS feed

1.3.1

7 files

1.3.0

7 files

1.2.0

7 files

This release

1.1.0 This release

7 files

1.0.1

7 files

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

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