Skip to main content

C++ OpenSCAD evaluator with Python bindings

Project description

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

Project details


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.4.4.tar.gz (616.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-0.4.4-cp312-abi3-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.4.4-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

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

openscad_cpp_evaluator-0.4.4-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (2.9 MB view details)

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

openscad_cpp_evaluator-0.4.4-cp312-abi3-macosx_13_0_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.4.4-cp312-abi3-macosx_13_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.4.4.tar.gz
  • Upload date:
  • Size: 616.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for openscad_cpp_evaluator-0.4.4.tar.gz
Algorithm Hash digest
SHA256 c8d26ce8425f5381c0f55be9e1238e61675564e714a96bae90e3e60fd14b6883
MD5 12bd922bd6055ed64d9eec71f396f3c2
BLAKE2b-256 5f735d49ac331e219db722c3d42e8c98f832ded59869a03c1d023792b2146b95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.4-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f2d9b4fad136ba0369009ba063aa27842545e2ba6292700897af26e28ff10b8c
MD5 cee68fe2a91b2a09089a2923bb3b6a6e
BLAKE2b-256 81273ad89ad37418753357911c12f5a990a28552e40ee5d7c05797de2524612c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.4-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 36a4702189fc2e08f13a5ae57df66d2e24c69f006abab869ff40eeebbcb7efec
MD5 276db019550a8825f2e2cbb51c5ef88e
BLAKE2b-256 efbedaa6522ddaa1a59a29688ffa8401b9400243f4137be9abfadc762f77b320

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.4-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cec8da10b2ede89396a805698063b3840eda880bb0e04e697a9be15be18ec8ca
MD5 381995d1eaf5a1f45336fc887bf2485f
BLAKE2b-256 60b9193c06a4f0e0977c7dc125d0047243e7c48a576b754a20a383adc564794e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.4-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e9a63621d2cc73e0dcd44b8178f24451a4fc2fc87f9c276abf8c3716b73ea995
MD5 8b4ebc3551549ac25908992875d4c8ed
BLAKE2b-256 692318c8f859988bf0b7e17b2d796af8793cdafdca17f68da0cd74e8f99da69f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.4-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 5ca73052f1be31f3844477ba8e2c762069bc347555264f0152bb65a855da1aa2
MD5 c58e4084e22d194855b2039f2783ebfe
BLAKE2b-256 9c72c8fe493e04c52aa89f39f612dedd4e046314389eb0a4e014bb9913982652

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page