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

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.1.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.1.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.1.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.1.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.1.0.tar.gz.

File metadata

  • Download URL: openscad_cpp_evaluator-0.1.0.tar.gz
  • Upload date:
  • Size: 595.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.1.0.tar.gz
Algorithm Hash digest
SHA256 e81987bfd436be6061f392a3264ab02be7e426f9618f51425b7155420ce99a08
MD5 75f6041786f3d2009c34e8991ffc8418
BLAKE2b-256 cddf91c3aa07b59db5559d9841998fd694239a4dddeb1da29b441d20357c6604

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.1.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 fb011ab65efcbd8c50a7b5fbf610013ebdcf7abba93ec3659d28094b21010f23
MD5 d94bcd007ca9bd50f47adcde037fadc9
BLAKE2b-256 2c68b8906fb343f0306e92dad8ed42a27bbc1fb0050e6f8f0843f90cec336f29

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a26d01008f585cb4d69674bace7f7be3996347c898d69f2292909664912e8c0e
MD5 18a8c4c9927b7c1c30e6690aa3115cb2
BLAKE2b-256 8ed4690c1727cf09702020278c856eba1272be06f404d99effef8da9cb89b513

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.1.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6f41d04a391f09e01b5cf6e65651ab5d37443990adadb1394356da7d63f01616
MD5 f4af85fd2effdcc606bdeb64cdb05912
BLAKE2b-256 5609a969111b4d3fac0f24276cba78ccde3c1d51abeb9c4a6d7ea5705dcaa24e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.1.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 1424fec4c597550d53d3c551c6b210fc68b466a079328a2572bfb691d7d3b245
MD5 b2436fac3d3251683042ec5a0f3530d3
BLAKE2b-256 b47bd241ab55f4551c791803784483304a3508e12f49e5cfbc07a9784c298fd9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.1.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 40e96658e20a1a30f04e959804761d268a50fe3b3df74b3b7acedc85994e8f98
MD5 b98656524f0d246da22e6dd2b7cfc433
BLAKE2b-256 9f1daa8eb47c73502a6de907410d3c5d1db59b7ad54ff65f0f5e18b11140ae15

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