packages feed

moonlight-triangulation-1.4.0.2: ffi/bindings/python/src/moonlight_triangulation/values.py

from __future__ import annotations

from dataclasses import dataclass
from enum import IntEnum
from fractions import Fraction

from ._native_generated import (
    ML_MINKOWSKI_ADDITION,
    ML_MINKOWSKI_CLOSING,
    ML_MINKOWSKI_EROSION,
    ML_MINKOWSKI_OPENING,
    ML_REGION_BOUNDARY,
    ML_REGION_EXTERIOR,
    ML_REGION_INTERIOR,
)

Point = tuple[float, float]
Triangle = tuple[int, int, int]


@dataclass(frozen=True)
class PolygonComponent:
    outer: tuple[Point, ...]
    holes: tuple[tuple[Point, ...], ...] = ()


class RegionLocation(IntEnum):
    EXTERIOR = ML_REGION_EXTERIOR
    BOUNDARY = ML_REGION_BOUNDARY
    INTERIOR = ML_REGION_INTERIOR


class MinkowskiOperation(IntEnum):
    ADDITION = ML_MINKOWSKI_ADDITION
    EROSION = ML_MINKOWSKI_EROSION
    OPENING = ML_MINKOWSKI_OPENING
    CLOSING = ML_MINKOWSKI_CLOSING


@dataclass(frozen=True)
class RegionValuations:
    euler_characteristic: int
    area: Fraction
    perimeter_bounds: tuple[float, float]


@dataclass(frozen=True)
class MinkowskiReceipt:
    operation: MinkowskiOperation
    input_components: int
    convex_pieces: int
    generated_pieces: int
    generated_convolution_edges: int
    overlay_passes: int
    exact_crossings: int
    output_cells: int
    exact_coordinate_bit_growth: int