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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

openscad_cpp_evaluator-0.3.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (2.7 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

openscad_cpp_evaluator-0.3.0-cp312-abi3-macosx_13_0_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.3.0-cp312-abi3-macosx_13_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

Details for the file openscad_cpp_evaluator-0.3.0.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.3.0.tar.gz
  • Upload date:
  • Size: 604.8 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.3.0.tar.gz
Algorithm Hash digest
SHA256 3d5847cb51c53e428cd35d5ab6b7f217253392b6c9e2d7bfba1aaca46e5587ba
MD5 cb98093d227d78a090c2c6eade201ef6
BLAKE2b-256 518868e5092061c1b9dda0830ddbb162e08ad56fbc4cb452d6eedccfea9d53d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.3.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 64f6fbb27a0e4ed20d0c9e42105abcd63eb805af964e0beb4f2915e40bbfeffb
MD5 c16b2bb88735517ee987f4a639340699
BLAKE2b-256 5ba0cf98f1acddaf1b0986270b1e07da897afd10b28fb3dd331a0dc515b7b940

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 85f6106f1ea34b37f11f220916584f75de40d16f5115c6fea4e91c480e5b9caa
MD5 681a57da9c2d3bc12fa670107af57169
BLAKE2b-256 f189d6af1004676052e6f2cd99dff15b2d4ca03af486db3f752bb11a2f2d2522

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.3.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 01dcb4bac7f13de69456d1c1c893117e8258db6a1268de6f23f1f014238f0f9d
MD5 f7b2e17fbf81b141b7d959e04bd3d400
BLAKE2b-256 14e83a7e9d1944438b504fd3a163da1900a24793ee7ddba6b1cafb6252047a56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.3.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 eb6fa4ddd673a6e62f5ae6e0d115f32f27412a6bd722627af3873b02478c132a
MD5 82ed5c788c7cdc9152c94d4f39f3fb22
BLAKE2b-256 827e1fcc8b01d5b51586235d1e498cfe04073c869a16b30096c9dda0f3bbcd91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.3.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 d7b652eb45a60c318a387e291cd7257b4a9c254d51ac763ec26010c4461a5470
MD5 1619741588275cc9528cd9ad51ab81db
BLAKE2b-256 6489fddbcbacf518f0a213592457fb05d3d5678022497410a598c6aa736d611f

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