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-0.37.0.tar.gz (855.8 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-0.37.0-cp312-abi3-win_arm64.whl (9.5 MB view details)

Uploaded CPython 3.12+Windows ARM64

openscad_cpp_evaluator-0.37.0-cp312-abi3-win_amd64.whl (10.0 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.37.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.3 MB view details)

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

openscad_cpp_evaluator-0.37.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (6.0 MB view details)

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

openscad_cpp_evaluator-0.37.0-cp312-abi3-macosx_13_0_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.37.0-cp312-abi3-macosx_13_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.37.0.tar.gz
  • Upload date:
  • Size: 855.8 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-0.37.0.tar.gz
Algorithm Hash digest
SHA256 955447d6a7d18fbe0ff850b1fc38fe736377a92f7125a9571feb3d617da96143
MD5 3d2a0059b25a03312c2b431ac5bc98f5
BLAKE2b-256 96fadde2acbdb64867f5ef3a4d8b8eb030d8e9ba729c2e9872efcc2fa584a9aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.37.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 cca0ff65a5544b3c413eb2bfbdf5557068f3e405dc369e8e4868316e125bb146
MD5 7a6fe513beaef2a59b34ed2d99641115
BLAKE2b-256 d52ac7fadc5d8a288defda28a38ab3e3784066f525630a8824f933620fd16b39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.37.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3cf6d3d1e4abfaea9a899369f6b1af80d9ac9150fdf64dc18c9b29631f56eb56
MD5 5de990f345d99b3081727b0f8098c35f
BLAKE2b-256 d7aa3ebfc1acc0f04fe46e570186a8de6223a9dd844c0ad608f30b030b01304a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.37.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 03908aabd72df46c14493b69277adbcce94d088c64fbcd768a794dbba5b2e1fe
MD5 e86a14ba0d5097a7208a04e10aa0ea68
BLAKE2b-256 1850601c5f6b8179b44c0dc782eddc3a4d0c5f520d016b6b460a3f15f05559d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.37.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a60b56c68e145c83b3936c5af4707ad7b567b60ae62d592b87a33693ad31e319
MD5 d53f7edb160c628129a4481c3ff793e8
BLAKE2b-256 ef853ac48caf10c84048385ec329f402e06a980d2852b1de742d605d2a05f736

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.37.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 1578608c1a5636f5faf7656996f02d6cdda8721733bea1e8cdab86dfef88db2c
MD5 0c2afcef4a205c1a109df4f8b64a9161
BLAKE2b-256 f632e92370da6e6ece2b48a226dd7b39dfe998db238e96eb568b7d00276029ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.37.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 402d95cc92e220eec3cb209d23e124f267e011519daa4290322d6756175a9299
MD5 c1bf343271404f11c386414133e99495
BLAKE2b-256 1b61c16c74de255508808baca2f4f1b8733b52b21cf05ce63f75c8b0fb792e38

See more details on using hashes here.

Release history Release notifications | RSS feed

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

This release

0.37.0 This release

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