# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501, F401, F403, F405

import builtins
import raygeo
import typing
__all__ = [
    "ContourSpec",
    "contour",
]

@typing.final
class ContourSpec:
    r"""
    Parameters for the ``contour`` assembler.
    
    Construct with ``ContourSpec(kerf_mm, path_offset_mm, cut_side,
    overcut, cut_order, remove_inner, arc_tolerance, allow_arcs,
    supports_curves)``. Wrap in an
    :class:`~raygeo.ops.assembly.Assembler` instance to drive the
    `Assembler` trait.
    """
    @property
    def kerf_mm(self) -> builtins.float:
        r"""
        Tool kerf width in mm.
        """
    @property
    def path_offset_mm(self) -> builtins.float:
        r"""
        Additional offset distance in mm.
        """
    @property
    def cut_side(self) -> builtins.str:
        r"""
        ``"centerline"``, ``"outside"``, or ``"inside"``.
        """
    @property
    def overcut(self) -> builtins.float:
        r"""
        Distance to extend closed contours past their start point (mm).
        """
    @property
    def cut_order(self) -> builtins.str:
        r"""
        ``"inside_outside"`` or ``"outside_inside"``.
        """
    @property
    def remove_inner(self) -> builtins.bool:
        r"""
        Remove inner (hole) contours.
        """
    @property
    def arc_tolerance(self) -> builtins.float:
        r"""
        Curve fitting tolerance in mm; when > 0 arcs/beziers are fitted.
        """
    @property
    def allow_arcs(self) -> builtins.bool:
        r"""
        Fit arcs when arc_tolerance > 0.
        """
    @property
    def supports_curves(self) -> builtins.bool:
        r"""
        Keep Bézier curves when arc_tolerance > 0.
        """
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...
    def __new__(cls, kerf_mm: builtins.float = 0.0, path_offset_mm: builtins.float = 0.0, cut_side: builtins.str = 'centerline', overcut: builtins.float = 0.0, cut_order: builtins.str = 'inside_outside', remove_inner: builtins.bool = False, arc_tolerance: builtins.float = 0.0, allow_arcs: builtins.bool = True, supports_curves: builtins.bool = False) -> ContourSpec: ...

def contour(part: raygeo.ops.part.Part, kerf_mm: float = 0, path_offset_mm: float = 0, cut_side: str = 'centerline', overcut: float = 0, cut_order: str = 'inside_outside', remove_inner: bool = False, arc_tolerance: float = 0, allow_arcs: bool = True, supports_curves: bool = False) -> raygeo.ops.assembly.AssemblyResult:
    r"""
    Trace contours from the part geometry.
    
    Extracts the vector geometry from *part*, computes the total
    offset from kerf / path-offset / cut-side, applies it with
    winding-order normalisation and offset fallback, orders
    inner/outer contours, applies overcut, optionally fits arcs
    and curves, and returns the result as an
    :class:`AssemblyResult`.
    
    :param part: The part whose geometry defines the contours.
    :param kerf_mm: Tool kerf width in mm (default 0.0).
    :param path_offset_mm: Additional offset distance in mm
        (default 0.0).
    :param cut_side: ``"centerline"``, ``"outside"``, or
        ``"inside"`` (default ``"centerline"``).
    :param overcut: Distance to extend closed contours past their
        start point (mm, default 0.0).
    :param cut_order: ``"inside_outside"`` or ``"outside_inside"``
        (default ``"inside_outside"``).
    :param remove_inner: Remove inner (hole) contours (default False).
    :param arc_tolerance: Curve fitting tolerance in mm; when > 0
        arcs/beziers are fitted (default 0.0).
    :param allow_arcs: Fit arcs when arc_tolerance > 0 (default True).
    :param supports_curves: Keep Bézier curves when arc_tolerance > 0
        (default False).
    :returns: An :class:`AssemblyResult` with the contour path.
    :raises ValueError: If the part has no geometry.
    """

