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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.4.8-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.8-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.8-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.8-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.8.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.4.8.tar.gz
  • Upload date:
  • Size: 622.9 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.8.tar.gz
Algorithm Hash digest
SHA256 45965c9d8a4b47c0fd1144ef6eef6158c5e85875bd21e6f7dc3b134288bfde56
MD5 87d6797718f585aad6d3413a96db0832
BLAKE2b-256 12ff2902a27ee2401177cfd9858077ef554cbc864d02d2c322ee15522c2c6101

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.8-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a643f61c5a873bd143bc70200f7ecb1ab393ad100834937a207d9b3a7f8f37c5
MD5 b62930dcbe74e5b0fd798bdd2e348ae3
BLAKE2b-256 5b6ee0038891944bb03e9cca7f9016455e73638b1dbf0f3194767d4cc24b43a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.8-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b630a8c760084fd6a9c5a50d34e506177f93d5cf765b252c11ee6d14f5b83967
MD5 46300b9c5e94dbd72caefa75e347258a
BLAKE2b-256 d05c86a9acd3047248cd69cfa55a21b49745b4e9fc55feac62a8d7f03c22d1c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.8-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7efa8aafb1d2ac420cc0a86d94fa227f736ed523d9faa5b87cafbe6e8d5db19b
MD5 2a898bcffc3c2be7bd515204ae490332
BLAKE2b-256 3372692e21050d93d4115a4ec8b0d1f901a3b04f1f5ffaa74b61ed635037c1b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.8-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8a6c647f888ee170a62213766046337a5adfbe5e51e218dfe26fc9988afa6c25
MD5 c1524525bf39510f05490c66c629e748
BLAKE2b-256 e3f7c4ced47efa31864a275dd4b6060564c45116336132b8bf0351a248bfdfcd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.8-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 4139877b46029de3156aea4fe5723e930d2aa97688c4b4b3a8019a9bacea1392
MD5 a3938cec31753dc36614f5ec5f05e4de
BLAKE2b-256 df044ebf7f1556aab9ff62277d726a6ed0ea2bc336284a92f05c42652e941c15

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