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

Uploaded CPython 3.12+Windows ARM64

openscad_cpp_evaluator-0.55.0-cp312-abi3-win_amd64.whl (10.0 MB view details)

Uploaded CPython 3.12+Windows x86-64

openscad_cpp_evaluator-0.55.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.4 MB view details)

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

openscad_cpp_evaluator-0.55.0-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.0-cp312-abi3-macosx_13_0_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12+macOS 13.0+ x86-64

openscad_cpp_evaluator-0.55.0-cp312-abi3-macosx_13_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.12+macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: openscad_cpp_evaluator-0.55.0.tar.gz
  • Upload date:
  • Size: 940.6 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.0.tar.gz
Algorithm Hash digest
SHA256 3154b517809a59846a8216ba7d5dce66ca417791349bd997ebefb7a11e9acdfe
MD5 3380c9be94faa732ffe038cf561541dd
BLAKE2b-256 4e9e08428002a2f083684eab5653780c217d58764f8c560a4154acb368438971

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.0-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 ea07e3aebbecf72c9d1a5ab32b6dd5705de98a6052c8e140192dcae9ce0bbb06
MD5 060fb30bf911386a58dbe2400047ac9f
BLAKE2b-256 349817c87342c9f8e5e9da7f1f59e8a64cc515e0551c7955896bc2d842ab085d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a49d909b5e42872b1cec47c89a1119f57b8805693fe2443ba11e8c5b00d5d456
MD5 faff9a4be2683f6564df87ee3acdff11
BLAKE2b-256 a51c6392d94557c8c4dff662f901cd37621eef61a484dc29474b5a655beea385

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2566bbf3addd04d5b848cf5af1a08eb6ba0bc87b78121f10fd5830b91e8505b3
MD5 23b5cf219c0a0536e241d82e29050371
BLAKE2b-256 4abce1e24fd2a2804d3daf08b6adf26e76ce0adf4d8925c3badde059495e2d92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0ae1fd8b58c6a529733fc60e57c87feea42b7f356343e807d728d7100204efd7
MD5 7f40866f130cd021e34ee694ac8723d3
BLAKE2b-256 17fb554079ec8dae434c2253b429cd51414860cfe73f7c4b8d012b1ec3b83682

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.0-cp312-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 0ae60639b991f1bc316324f097ce7d507e7affaf8bfe1340a6e867b72c86b3e6
MD5 312a133f6dae01307c828100f5e363ce
BLAKE2b-256 64c9ffcc1c46034b4a7cac2a43e14fd41e1d0970dda76c07a860a04cd07c0586

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for openscad_cpp_evaluator-0.55.0-cp312-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 316bb3fb2fce822ab3b1acd32461e9a4ded80c1ac06cf42eab58b788b9e9efe8
MD5 128eba0d88e09e1123092a049f5be798
BLAKE2b-256 fbfda677574d9b5aa7129d766e7a98bfacf3f9cad898db4b8bfe84ac02da2e86

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

0.55.2

7 files

0.55.1

7 files

This release

0.55.0 This release

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