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

import builtins
import collections.abc
import raygeo
import typing
__all__ = [
    "AdaptiveWavefrontSpec",
    "adaptive_wavefronts",
    "adaptive_wavefronts_multi_pocket",
]

@typing.final
class AdaptiveWavefrontSpec:
    r"""
    Parameters for the inside-out adaptive wavefront assembler.
    """
    @property
    def step_over(self) -> builtins.float: ...
    @property
    def z(self) -> builtins.float: ...
    @property
    def area_tolerance(self) -> builtins.float: ...
    @property
    def precision(self) -> builtins.float: ...
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...

def adaptive_wavefronts(part: raygeo.ops.part.Part, step_over: float = 2, z: float = 0, area_tolerance: float = 1, precision: float = 0, cut_feed_rate: int = 1200, cut_power: float = 1) -> raygeo.ops.assembly.AssemblyResult:
    r"""
    Inside-out adaptive wavefronts.
    
    Finds the largest inscribed circle inside *part*'s boundary,
    seeds the cleared area with concentric rings spaced
    *step_over* apart, then iteratively expands the frontier
    outward by *step_over*, clipping to the boundary.  The loop
    terminates when the newly added area drops below
    *area_tolerance*.
    
    Each ring fragment is emitted as ``MoveTo`` + ``LineTo`` at
    height *z* with *cut_feed_rate* applied.
    
    :param part: The part whose ``stock_region`` defines the
                 pocket boundary and islands.
    :param step_over: Radial expansion per iteration (default 2.0).
    :param z: Z height for generated commands (default 0.0).
    :param area_tolerance: Minimum area increase to continue (default 1.0).
    :param precision: Edge tolerance for frontier simplification and vertex
                      resampling; smaller values produce denser edges
                      (default 0.0 = use internal default).
    :param cut_feed_rate: Feed rate for cutting moves (default 1200).
    :param cut_power: Laser power for cutting moves (0.0-1.0, default 1.0).
    :returns: An :class:`AssemblyResult` with wavefront cutting commands.
    """

def adaptive_wavefronts_multi_pocket(part: raygeo.ops.part.Part, step_over: float = 2, offset_mm: float = 0, area_tolerance: float = 0.01, precision: float = 0, cut_feed_rate: int = 1200, cut_power: float = 1, profile: bool = False) -> raygeo.ops.assembly.AssemblyResult:
    r"""
    Multi-pocket adaptive wavefronts.
    
    Extracts all pockets from *part.geometry*, optionally offsets
    the boundary inward by *offset_mm*, seeds each pocket with
    concentric rings spaced *step_over* apart, and runs wavefront
    expansion inside each pocket.  Returns the combined result.
    
    :param part: The part whose geometry defines the pockets.
    :param step_over: Radial expansion per iteration (default 2.0).
    :param offset_mm: Inward offset applied to all contours (default 0.0).
    :param area_tolerance: Minimum area increase to continue (default 0.01).
    :param precision: Edge tolerance for frontier simplification (default 0.0).
    :param cut_feed_rate: Feed rate for cutting moves (default 1200).
    :param cut_power: Laser power for cutting moves (0.0-1.0, default 1.0).
    :param profile: Print a profiling report to stdout (default False).
    :returns: An :class:`AssemblyResult` with combined wavefront paths.
    :raises ValueError: If the part has no geometry or no closed contours.
    """

