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.10.tar.gz (627.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.10-cp312-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.4.10-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.10-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.10-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.10-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.10.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.4.10.tar.gz
  • Upload date:
  • Size: 627.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.10.tar.gz
Algorithm Hash digest
SHA256 7f53ab86cd1358a4c2f6fe382485d3fc627eac113eff8e9e3bfb75a15d494a3e
MD5 86d34b7ad6c6526c1f6114504244693a
BLAKE2b-256 9663ff1e3f08fbdb49c24f429a55d128283811f704a0334776f3aea5daec127a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.10-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7fbe4237eb83d08d00f0e42319be845d5211795ae27de7a85063f49c600490f0
MD5 1881e6f598f88a98da2c0a9ecd5aba55
BLAKE2b-256 db0661cedb5577db511bbbe5b447bc783dbed06b15dff96ff4b8b435a8c14b43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.10-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 08fbc03da3cdf8e95a4a9b54b3d9b543ead8a33093843dc538e476aaf3a2338c
MD5 c5c7251ec56bf629c23ebc31df92ceb3
BLAKE2b-256 f2eafeb4bedd82f1e7bf808ca96d06fde10b83be8e5543a09ce134a4a8620e4a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.10-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 419a1e59a7f29e1abc6dc07464299600528ee693c936eaef856c2bac8a6456e5
MD5 e2b18841109ea3a733f55f7615092e56
BLAKE2b-256 035f72662202cd5e922d093d4c532971afe721210ecb94ad5d2e07141eef5f24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.10-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3f8532f91052abc9cfd5ab74ed811d6e812cdd48fe65697f00df0891aa6bdc48
MD5 018c8302156005ab7773d0d44fcadb16
BLAKE2b-256 d206dc8323d298f744181b823fbaa68755194350e5e583be5b4711f3eb97f76b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.10-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 0a0f19e112c2e75a6b6a74c98d8db44d5c12ea80fa36f8c825e73d1a42c841da
MD5 c59bdfa0e47929860e30efd2896b13cf
BLAKE2b-256 364bb4bc5495cc1ef094f79ca153a60975017e7603d72a16141ceb44307e9889

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