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.2.tar.gz (613.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-0.4.2-cp312-abi3-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.4.2-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.2-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.2-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.2-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.2.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.4.2.tar.gz
  • Upload date:
  • Size: 613.7 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.2.tar.gz
Algorithm Hash digest
SHA256 5fd424a30cf173753c9abdf64e9c066e2b43423351edee12b18fd25cfd83fbf5
MD5 9dd6dd019cbebef74e20c0e7cb8e906f
BLAKE2b-256 ea30b3b8ad3cb55343289d9d1827f7bd52271cd824c4439d3e303938131c02d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.2-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 96e7077361ca8166d329f1fee459559fc746aff1dbaa0ba11be871f76a97493b
MD5 90271bc2d1eec3061f17bef7c6cb38de
BLAKE2b-256 f681360877c2081f5bdacf674e1a05f71e31595b88208256632cf1bee5374abe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 84795cebcde3fa5e1e0c2588c9c767b0ecfa86d0fc9f07610ee7cfb4b646cfd2
MD5 69dbd43e0d91cb9a85291ef894420bb2
BLAKE2b-256 78405db4eec57a4ff85e133ff8c799ef703b0f05b8f8b1401edcf915f3b2b732

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.2-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0c715d3cecff1110e9be408f4532fb2f1f3895e509d7715b52c32b92417befb3
MD5 df4f3a89d6c83bbf701c701cff8bf022
BLAKE2b-256 c16e5a2e85da7fae4b14895ac939e74a550b23657bcfc140ac0bafe741a46d3a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.2-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 71d35fc4c0118206987cd7a5d4e6f8cdc7026b88855b6ca43f088014aa1d87eb
MD5 af0685d072044d498746f13866213598
BLAKE2b-256 aa5db8935f32939bcd85d461e531ec01ee23c97241040544bfba42e5ef2fbb3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.2-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 d6ab43facf8ee8aec3c1c894ebe3dcf35f52db11f284140250731d71c4749814
MD5 7ed6903a89fae6e626df0e4b3431b479
BLAKE2b-256 7305c042e58c6f110dff1ed8b8485e7c8294eb14cca90901e74263b9b825b8c3

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