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

Uploaded CPython 3.12+Windows ARM64

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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-1.0.1-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.0.1-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.0.1-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.0.1-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.0.1.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-1.0.1.tar.gz
  • Upload date:
  • Size: 953.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-1.0.1.tar.gz
Algorithm Hash digest
SHA256 f871e2e51df53d20184bcc76a877806f11a3af04c1691d11d533e450bc59bbae
MD5 4f77dfde297f3ecb0f169e1053a71403
BLAKE2b-256 53debfff96ad5f1b901c2469f77ff1e03f5543725155165cee951c4c00719af8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.0.1-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 7cf5a71d06d124159102adcefa886d416f7a6de3287ec70cb3d8d31a6aa657c8
MD5 e0b42af6bb76251c61b6a53ad6cd2871
BLAKE2b-256 f364237311beedeb48d1a7e1c0cba17ad50b2fe25efc0e66de2011854c10702d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.0.1-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2c1c334bce2418c7c3bce83bf9547204d9650d171a60a1772523f879e2ba9db2
MD5 cb4f6ee57ec32a7335693f1be10194eb
BLAKE2b-256 7f9bfe48bb8393c67635524716030fde5274959740e60932f9fbb09fa656771f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.0.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 49c23bfa4ecc7fb4443f2cde80274ba02ae25e768b8bae63c504f4ba17a45ac4
MD5 fc5d4ad1fb4cd0cb76ba7d15df5de26e
BLAKE2b-256 aabc071b272306414079318bd8a6f8448dbc9b2b20d83e6122913b6475a6f405

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.0.1-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 70d904991055e511523a06488e4cbc105c24b6d543f42e8672944ffa76a6f475
MD5 731df7fdcd66bd7ca0e7cf365abfc9bd
BLAKE2b-256 5066a6a4587d2c671636b92d34d2e4a330861a73c72da9f75a527ba84d202615

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.0.1-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 a7222c3255362c2dc03403912669eca916026f730c1ed4d75548e003382ca416
MD5 d42504ff0a92329d6389c93b2cdda0a3
BLAKE2b-256 b074f920704daa85b0a463cf7143ff0d3658811f54c562a2ddb613bdb5ecbb51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-1.0.1-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 9c6764d7fa48bbb11d1596ca3651d2cbac26c309794918163eb4e43472b3527d
MD5 e44bc00ef790381a3aeddb7f63049c01
BLAKE2b-256 c19f0b35084fc02d7f7ce1fff199dc721355236a5435bcaea36069e43ec79b2a

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

1.1.0

7 files

This release

1.0.1 This release

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