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

Uploaded CPython 3.12+Windows x86-64

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.4.6.tar.gz
  • Upload date:
  • Size: 618.6 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.6.tar.gz
Algorithm Hash digest
SHA256 ae5614b6838269c2628096f4c0deb00b1d1e0cc7c9c7791ad0a0ee0c040d9119
MD5 f7011c0c8c3664b57c87c252366624ca
BLAKE2b-256 6dcc98ea3eba099f51b3c8cac44b497cb4c97c8be151f593c8014f0a8ad67b84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.6-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ec97c300bf50b667e11981e2a44319a284e9f24d5958ae4427c84bc720d38832
MD5 e0c6441e212bd45deb5d896e90816517
BLAKE2b-256 eed0444e7762a0e75bd012b12557f73ea3cb89d8a3ab5961b13a67f62f7d89fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.6-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b3a3afc1692773c72e381ee6edcc87999b9939a4daa3ed12943cd35f6e223569
MD5 3a2c34c1abe9e0ade6b81cb749794b7e
BLAKE2b-256 1fc988e70b28733e534fab61751a47039d693314f7f06408331442e28aa7768f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.6-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0697310fda2e88f79f1ee1e91d8bb496bcaf5162aa378339b48a196f29c6f9e0
MD5 d072a7b952a942e6ca47a414f3d61581
BLAKE2b-256 f49f6dee19cfe66dfab103eb820b73ca74da2148cf520cefe6cd77fae9f3be20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.6-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3acc9b4c78ff9ad91884e4b2e69a6a019b4a8a739568c1cc5fbe931491ba4dda
MD5 411b97f1ade7adc1a8c4cc52d1e979d4
BLAKE2b-256 36c384d650be13c109fba587dd381d16df5132c1909bf0d1814420c641b7cbe0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.4.6-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 36dddbd7d99ae62ff3569081eb329ef3725f886337730c70f37630d2e9ea3320
MD5 cbae258979badb176bee83b8306397af
BLAKE2b-256 dc4c0f4a2b55819ce6c86d86767b29ddaf9170ca6bc18c2cd9ee30c04183159f

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