from Base.Metadata import export
from Part.Conic2d import Conic2d
from typing import Final, overload

@export(
    Twin="Geom2dHyperbola",
    TwinPointer="Geom2dHyperbola",
    PythonName="Part.Geom2d.Hyperbola2d",
    FatherInclude="Mod/Part/App/Geom2d/Conic2dPy.h",
    Include="Mod/Part/App/Geometry2d.h",
    Constructor=True,
)
class Hyperbola2d(Conic2d):
    """
    Describes a hyperbola in 2D space
    To create a hyperbola there are several ways:
    Part.Geom2d.Hyperbola2d()
        Creates a hyperbola with major radius 2 and minor radius 1 with the
        center in (0,0)

    Part.Geom2d.Hyperbola2d(Hyperbola)
        Create a copy of the given hyperbola

    Part.Geom2d.Hyperbola2d(S1,S2,Center)
        Creates a hyperbola centered on the point Center, S1 and S2,
        its major axis is defined by Center and S1,
        its major radius is the distance between Center and S1, and
        its minor radius is the distance between S2 and the major axis.

    Part.Geom2d.Hyperbola2d(Center,MajorRadius,MinorRadius)
        Creates a hyperbola with major and minor radii MajorRadius and
        MinorRadius and located at Center

    Author: Werner Mayer (wmayer@users.sourceforge.net)
    Licence: LGPL
    """

    MajorRadius: float = ...
    """The major radius of the hyperbola."""

    MinorRadius: float = ...
    """The minor radius of the hyperbola."""

    Focal: Final[float] = ...
    """The focal distance of the hyperbola."""

    Focus1: Final[object] = ...
    """
    The first focus is on the positive side of the major axis of the hyperbola;
    the second focus is on the negative side.
    """

    Focus2: Final[object] = ...
    """
    The first focus is on the positive side of the major axis of the hyperbola;
    the second focus is on the negative side.
    """

    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, Hyperbola: "Hyperbola2d") -> None: ...
    @overload
    def __init__(self, S1: object, S2: object, Center: object) -> None: ...
    @overload
    def __init__(self, Center: object, MajorRadius: float, MinorRadius: float) -> None: ...
