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

Uploaded CPython 3.12+Windows x86-64

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.4.7.tar.gz
  • Upload date:
  • Size: 619.2 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.7.tar.gz
Algorithm Hash digest
SHA256 76fc751ce04ffdfa29a2ecaa5c0406f5f70ad6c76c57ca49d9c67cf91a96dbbc
MD5 aa58b3a9e079da4732f1eb86e96161f9
BLAKE2b-256 fcadc100bd3b498de9f6f9c81b6b98ee7774a02a79971dbc6dfed46eda1d0ed6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.7-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8a9682b8271914691ca2f443c413908306e7ce36195a014ec18ebf5f12129140
MD5 08cbc6a84d16536ef176b4ce807b4ced
BLAKE2b-256 aa190e8970a4f7e9d97681a7b407f1c91376ec0ad57d3c627015b902d72d1f56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.7-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2ecae47e4bf2b57ce31c580c096809be42b21f2e22e58099ca8842a875b6597d
MD5 b8a7fff435671b502be55c813efbf1d8
BLAKE2b-256 e186b93e11ab6ee97bdbeeca7691ee000efaa9508564e571c3961bf976acd0ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.7-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d3053f9ac8c3d5ee864eefef6d9db7e5695abc9ac76eace787bae4e3db075a22
MD5 bb29ad0ef6e178337798498a383c7deb
BLAKE2b-256 686d3d7171a4c684c11b3528a3e1b0ffa91536496c9121e65b17abc716311bd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.7-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b2d6ad9c06b543410b64b32ab8d68e889a0ac53c7c1010ef4edd27c7dfae1697
MD5 182a40210019be6b8338f2e4108505d9
BLAKE2b-256 d0b786d3d6a7f29bda972ca37cf1536e56100545f70ba74bb7f4b1cd25bd7952

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.7-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 808a02f8c0ff6b4158476619454fb8912d64522b48447ef3c448bfd889ae8f83
MD5 c8c968c46b524c0c97cb6641fdc8b628
BLAKE2b-256 f3d920bcae95eac0ca674f9f5aa7e388ecfa6db2335eb2aaa00523cd116055a3

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