Skip to main content

Python bindings for Geometer CAD geometry operations

Project description

Geometer

Focused C++ geometry library, CLI, Python package, and WASM interface built on OCCT. Geometer provides generic CAD/kernel operations for STEP-to-GLB conversion, STEP HLR projection, exact planar STEP synthesis, planar contouring, and packed planar boolean work.

Documentation

Build And Validate

uv sync --group dev
cmake --preset default
cmake --build build --config Release
uv run --group dev rack run --all
uv run pytest tests/L99_release -q
uv run python scripts/validate_native.py
uv run python scripts/validate_python_package.py

Native artifacts are copied to dist/native/<platform>/. Root-level dist/geometer* artifacts are intentionally not produced.

OCCT is generated dependency state under .deps/. When R2 cache credentials are configured, build scripts can restore verified prebuilt OCCT archives before falling back to source builds.

Build WASM artifacts:

python scripts/build_wasm.py

WASM artifacts are copied to:

  • dist/wasm/browser/
  • dist/wasm/node-test/
  • dist/wasm/planar-browser/

Python Package

PyPI distribution: wn-geometer

Import package: geometer

Install the current release:

python -m pip install wn-geometer==2026.6.10

Basic Python use:

from pathlib import Path
import geometer

version = geometer.version()
projection = geometer.project_step_hlr(
    Path("part.step"),
    views=[geometer.ProjectionView.top()],
)
glb_bytes = geometer.step_to_glb(Path("part.step"))
step_bytes = geometer.planar_step(
    {
        "schema": "geometry.planar_step.request.a0",
        "units": "mm",
        "bodies": [
            {
                "id": "copper",
                "thickness_mm": 0.035,
                "regions": [
                    {
                        "outer": {
                            "points": [[0, 0], [10, 0], [10, 5], [0, 5]],
                            "segments": [{"kind": "line"}] * 4,
                        }
                    }
                ],
            }
        ],
    }
)
geometer.write_planar_step(
    {
        "schema": "geometry.planar_step.request.a0",
        "units": "mm",
        "bodies": [
            {
                "id": "copper",
                "thickness_mm": 0.035,
                "fuse_regions": True,
                "regions": [
                    {
                        "outer": {
                            "points": [[0, 0], [10, 0], [10, 5], [0, 5]],
                            "segments": [{"kind": "line"}] * 4,
                        }
                    }
                ],
            }
        ],
    },
    "layer.step",
)

The package is executable-backed. Wheels bundle the platform executable under geometer/native/<platform>/, expose a geometer console command in the install environment, and call the executable through the JSON batch CLI.

CLI

geometer --version
geometer step-to-glb input.step output.glb
geometer step-project-hlr input.step output.json
geometer step-project-svg input.step output.svg --mode outline --view top
geometer planar-step planar-step-request.json output.step
geometer init-request request.json --step input.step --operation step_hlr_projection_json --output output.json
geometer run request.json response.json

Examples

  • examples/python/step_hlr_svg.py - no-GUI package example that writes HLR projection JSON, SVG, and GLB outputs.
  • examples/python/pyvista_hlr_viewer.py - PyVista/Qt STEP 3D + HLR preview.
  • examples/wasm/embedded_model_viewer.html - browser viewer using prepared GLB fixtures and the WASM HLR worker.
  • dist/wasm/demos/hlr_demo.html and dist/wasm/demos/planar_ring_solver_demo.html - one-file standalone browser demos for release review.
  • examples/cpp/ - native Dear ImGui + SDL3 + OpenGL HLR preview.

Serve browser examples from the repo root:

python -m http.server 8123 --bind 127.0.0.1

Open http://127.0.0.1:8123/examples/wasm/embedded_model_viewer.html.

The dist/wasm/demos/*.html files can also be opened directly from disk after running python scripts/build_wasm.py and the demo bake scripts.

Release

Geometer uses date-based releases per ADR 006:

  • Git tag: vYYYY-MM-DD
  • PyPI/CMake version: YYYY.M.D
  • C ABI generation: YYYYMMDD

Same-day follow-up releases append a serial to the tag and package version, for example v2026-05-24-2 and 2026.5.24.2. The C ABI generation stays at YYYYMMDD unless the C ABI generation itself changes.

Before tagging, run the L99 release gate plus native and package validation:

uv sync --group dev
uv run pytest tests/L99_release -q
uv run python scripts/validate_native.py
uv run python scripts/validate_python_package.py

The repository declares the python-native-wasm Wavenumber development standards profile. Lightweight CI runs the L99 gate on Ubuntu, Windows, and macOS. Full native/WASM rebuilds remain explicit validation steps because fresh OCCT and Emscripten dependency builds are expensive.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

wn_geometer-2026.6.10-py3-none-win_amd64.whl (7.2 MB view details)

Uploaded Python 3Windows x86-64

wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl (14.3 MB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl (13.6 MB view details)

Uploaded Python 3manylinux: glibc 2.39+ ARM64

wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl (10.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file wn_geometer-2026.6.10-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for wn_geometer-2026.6.10-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f814ef17a9d09f69e43e843803c522b1890ccecff2cc5c7acf6f8bd193ec4aa3
MD5 e53766c97babc2c4a8f5bb0548baad6a
BLAKE2b-256 baabe32d5960d12c80907571ce9d34b0b467e15ceff3e824974e08b413a2c591

See more details on using hashes here.

Provenance

The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-win_amd64.whl:

Publisher: release.yml on wavenumber-eng/geometer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e14504894403f52cae6bd79c9c0a56103494638555ba2316ebd33ed8eef5c4de
MD5 9d15b813e6ff8383e03f95a59043d3be
BLAKE2b-256 06a98c8568c71337be2298966fccf419471b936f18cc0906a2ea201c5ad0fdaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl:

Publisher: release.yml on wavenumber-eng/geometer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl.

File metadata

File hashes

Hashes for wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl
Algorithm Hash digest
SHA256 cf50f70882b9eb1e21b9e0c53ba0a64667270c90981931c0dc8fb6192eed719a
MD5 1b25365e34f596955a34f86a0a78904c
BLAKE2b-256 2dd39c97ff141b26bd6ec37de703ffc923677e601d0a4b8001fe6073358b12c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl:

Publisher: release.yml on wavenumber-eng/geometer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fff41eb880b3a493e1b01ecf4c72d6b40e0a6d6afeb2ccef098df9ba8ce2d522
MD5 c67233724c3b2b2cd5a40cbc16cc065f
BLAKE2b-256 435ddc4993dae57914edff4d0e6e2a22dfd457545212225c50e796cee66f4151

See more details on using hashes here.

Provenance

The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on wavenumber-eng/geometer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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