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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.4.9-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.9-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.9-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.9-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.9.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.4.9.tar.gz
  • Upload date:
  • Size: 625.6 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.9.tar.gz
Algorithm Hash digest
SHA256 ba0dd20d00306b53fd90842065b033817c9f68f940abec672820e6bf8ae6f0d3
MD5 4fa4bc496eedcb9032c509ec74b4abf9
BLAKE2b-256 8326d9747c831c77301231271c22196b393239a262aee8e10686ee993fb5ee64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.9-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a253f4224af30a4cbe9ec98f40956fd3fcbdfc46c02979e8d9a7042c548bf9f4
MD5 9e41c9a8d063caf4af560a7253e8f00e
BLAKE2b-256 5a3e6371bcf4614c814b398350b45ca75a08c8e6ceaec56bdd5bb09d4f182f61

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.9-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ec762bc1bcda0e394609f5a592cae3840d9c8daaa18bf2badaab2c2aa55bc182
MD5 1ddaaa54bf04eddc7d3566c8c882feb1
BLAKE2b-256 e8bb168c62655c826f8e14cd8f8da4a43d41978037485d49ab88aec33fa652ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.9-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a27f7aa098503237be138aeb8997057db6e834c991c74f261cb5d0c294a92a7
MD5 2067e401cd3981bf5bdf38ea41e4f786
BLAKE2b-256 c39ab7239b0756870b08182da56f572688eb0c580d31c502b24b21e36c312855

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.9-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 dcb6e17f26a4bf2745aa4bedd615befb3607a4d9929b926c2843af5f92353e58
MD5 07d1d2128950c559fe55dfeac88d807e
BLAKE2b-256 69cd6457093922ccde626aaf1dcab8493ee917a8f45df603d901d26b15861f17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.9-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 553b325150cbeb7169f2ce1f0d04a575bc754de2e360ff07c4b9e76e45e95442
MD5 882e34cf9258260e91ab4d7695133348
BLAKE2b-256 544aacf4435cc4dc0a242d6af2cb22812d6c46b3e377d2013b9d4e623fa48a0c

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