Skip to main content

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).

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.55.2.tar.gz (944.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.55.2-cp312-abi3-win_arm64.whl (9.6 MB view details)

Uploaded CPython 3.12+Windows ARM64

openscad_cpp_evaluator-0.55.2-cp312-abi3-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.55.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.5 MB view details)

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

openscad_cpp_evaluator-0.55.2-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (6.1 MB view details)

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

openscad_cpp_evaluator-0.55.2-cp312-abi3-macosx_13_0_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.55.2-cp312-abi3-macosx_13_0_arm64.whl (4.8 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.55.2.tar.gz
  • Upload date:
  • Size: 944.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for openscad_cpp_evaluator-0.55.2.tar.gz
Algorithm Hash digest
SHA256 3eaf3fdd3ad2821e025d5b7c37636818da900ba28ede792e796bcbdc06a0d3e5
MD5 23a289ba15da423479b91558b931b5a3
BLAKE2b-256 eb613fa1dd0f4598b384a80fb4f5d3449b18c26e7cf268be75ad338cf3d7018a

See more details on using hashes here.

File details

Details for the file openscad_cpp_evaluator-0.55.2-cp312-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.2-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 7844932dc82bc85c0c83d560b7b3bf58cb462eba10b7dd89ee1229c1599b602f
MD5 f51df708d8a5aa4d804f9a0d0be5d21e
BLAKE2b-256 9434ffc74c17d07f226617e54a4391fb671ba648882d8717179f33c9357141a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.2-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 65f4faad743ee35094a815bcebdb5b69f886566ee4c65e855d349b3be80dd67f
MD5 3d8d222695823486b14336953190ad0e
BLAKE2b-256 10ec6acff82db850848301a3fec78925e12fede986edb6c408d70391efd7964f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 077934aab960b91d283f4ceeeb9110f8711517502a8331e71346746dc8625f16
MD5 6eebc2612ab5d7dcceec48be3263cab0
BLAKE2b-256 ad15efb907d194b094fd80767994d7278a8602b2e0dac00a38767933ece7a1cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.2-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 34b05ebc6cd2632ed309e6a96c25a7529cbcecd6016771a156920f43932a3aca
MD5 df8aa1e1f4c614cf82a9c24572530174
BLAKE2b-256 1138b8361775068684f439ca8fb78b8fd8e0446845033adb35514dc23d774392

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.2-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 35a680701bd98ff9a61fe72b1b7f0ff6a277eea179ccd15a1257b10374f6acae
MD5 7f0f6abff899b52d431dfe97ad877e77
BLAKE2b-256 6e4eff23ae6a2cead6b4ae060cadc6f95a4e82cdaf8e8ea30b589a6e6d945546

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.2-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 9cdf80a8c51e83c85e0f557791e95ac9616d44e5d1ef7911447eae8d63e616a7
MD5 6e8ec22af95f8a82dffdd8394ced1a18
BLAKE2b-256 4ddbb784a466171ebdc45b4c6f97f1a0d9c7b1353d0a13e2021bd387fe598364

See more details on using hashes here.

Release history Release notifications | RSS feed

0.55.5

7 files

0.55.4

7 files

0.55.3

7 files

This release

0.55.2 This release

7 files

0.55.1

7 files

0.55.0

7 files

0.54.0

7 files

0.53.0

7 files

0.52.0

7 files

0.51.3

7 files

0.51.1

7 files

0.51.0

7 files

0.50.1

7 files

0.50.0

7 files

0.49.0

7 files

0.48.0

7 files

0.47.0

7 files

0.46.0

7 files

0.45.1

7 files

0.45.0

7 files

0.44.0

7 files

0.43.0

7 files

0.42.1

7 files

0.42.0

7 files

0.41.0

7 files

0.40.0

7 files

0.39.0

7 files

0.38.1

7 files

0.38.0

7 files

0.37.0

7 files

0.36.0

7 files

0.35.0

7 files

0.34.0

7 files

0.33.0

7 files

0.32.2

7 files

0.32.0

7 files

0.31.2

7 files

0.31.1

7 files

0.31.0

7 files

0.30.0

7 files

0.29.3

7 files

0.29.2

7 files

0.29.1

6 files

0.29.0

6 files

0.28.2

6 files

0.28.0

6 files

0.27.1

6 files

0.27.0

6 files

0.26.1

6 files

0.26.0

6 files

0.25.0

6 files

0.24.0

6 files

0.23.0

6 files

0.22.0

6 files

0.21.0

6 files

0.17.0

6 files

0.16.0

6 files

0.15.0

6 files

0.14.0

6 files

0.13.10

6 files

0.13.9

6 files

0.13.7

6 files

0.13.5

6 files

0.13.4

6 files

0.13.3

6 files

0.13.2

6 files

0.13.1

6 files

0.13.0

6 files

0.10.0

6 files

0.9.2

6 files

0.9.1

6 files

0.9.0

6 files

0.8.1

6 files

0.8.0

6 files

0.7.0

6 files

0.6.1

6 files

0.6.0

6 files

0.5.1

6 files

0.4.10

6 files

0.4.9

6 files

0.4.8

6 files

0.4.7

6 files

0.4.6

6 files

0.4.5

6 files

0.4.4

6 files

0.4.3

6 files

0.4.2

6 files

0.4.1

6 files

0.4.0

6 files

0.3.0

6 files

0.2.0

6 files

0.1.0

6 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page