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

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

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 simple --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.
  • 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.

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.4-py3-none-win_amd64.whl (7.3 MB view details)

Uploaded Python 3Windows x86-64

wn_geometer-2026.6.4-py3-none-manylinux_2_39_x86_64.whl (13.5 MB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

wn_geometer-2026.6.4-py3-none-macosx_11_0_arm64.whl (10.6 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for wn_geometer-2026.6.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 5d02e1b7a1b3356e0807f5447ba8d7157e871672cbd8db5e7fcf80337098724e
MD5 42cf6003d1b1dd9d54405d4ce906b80f
BLAKE2b-256 24ef26f7b28cad6932320ba6259a9245acc7e90effc30b9add736db6c682844d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wn_geometer-2026.6.4-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1edbebccc99e7b6e86d9394470b14c503dbb285628faf4744d515ca48e4772ce
MD5 c8709d8dd9531ef01ac46357d7de3f90
BLAKE2b-256 296616b918a4a9020c4400f06a8e31b2a4a05da50ce887fae384333bd432e503

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wn_geometer-2026.6.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 592aa8676e6f5d4e4a5923b5a415e41ddaa71a159d44d08531dbb84ad260f681
MD5 b673cfd2673eac50e4df57b255103cd2
BLAKE2b-256 9cf830392d32d4c6fa992355dbe7026b831421765b3df2e68f918eb76dcac7e6

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