from enum import IntEnum
from typing import overload, NewType, Optional, Tuple

from OCC.Core.Standard import *
from OCC.Core.NCollection import *
from OCC.Core.gp import *
from OCC.Core.GeomAbs import *
from OCC.Core.TColgp import *
from OCC.Core.TColStd import *


class Geom2d_Geometry(Standard_Transient):
    def Copy(self) -> Geom2d_Geometry: ...
    @overload
    def Mirror(self, P: gp_Pnt2d) -> None: ...
    @overload
    def Mirror(self, A: gp_Ax2d) -> None: ...
    @overload
    def Mirrored(self, P: gp_Pnt2d) -> Geom2d_Geometry: ...
    @overload
    def Mirrored(self, A: gp_Ax2d) -> Geom2d_Geometry: ...
    def Rotate(self, P: gp_Pnt2d, Ang: float) -> None: ...
    def Rotated(self, P: gp_Pnt2d, Ang: float) -> Geom2d_Geometry: ...
    def Scale(self, P: gp_Pnt2d, S: float) -> None: ...
    def Scaled(self, P: gp_Pnt2d, S: float) -> Geom2d_Geometry: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def Transformed(self, T: gp_Trsf2d) -> Geom2d_Geometry: ...
    @overload
    def Translate(self, V: gp_Vec2d) -> None: ...
    @overload
    def Translate(self, P1: gp_Pnt2d, P2: gp_Pnt2d) -> None: ...
    @overload
    def Translated(self, V: gp_Vec2d) -> Geom2d_Geometry: ...
    @overload
    def Translated(self, P1: gp_Pnt2d, P2: gp_Pnt2d) -> Geom2d_Geometry: ...

class Geom2d_Transformation(Standard_Transient):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, T: gp_Trsf2d) -> None: ...
    def Copy(self) -> Geom2d_Transformation: ...
    def Form(self) -> gp_TrsfForm: ...
    def Invert(self) -> None: ...
    def Inverted(self) -> Geom2d_Transformation: ...
    def IsNegative(self) -> bool: ...
    def Multiplied(self, Other: Geom2d_Transformation) -> Geom2d_Transformation: ...
    def Multiply(self, Other: Geom2d_Transformation) -> None: ...
    def Power(self, N: int) -> None: ...
    def Powered(self, N: int) -> Geom2d_Transformation: ...
    def PreMultiply(self, Other: Geom2d_Transformation) -> None: ...
    def ScaleFactor(self) -> float: ...
    @overload
    def SetMirror(self, P: gp_Pnt2d) -> None: ...
    @overload
    def SetMirror(self, A: gp_Ax2d) -> None: ...
    def SetRotation(self, P: gp_Pnt2d, Ang: float) -> None: ...
    def SetScale(self, P: gp_Pnt2d, S: float) -> None: ...
    @overload
    def SetTransformation(self, FromSystem1: gp_Ax2d, ToSystem2: gp_Ax2d) -> None: ...
    @overload
    def SetTransformation(self, ToSystem: gp_Ax2d) -> None: ...
    @overload
    def SetTranslation(self, V: gp_Vec2d) -> None: ...
    @overload
    def SetTranslation(self, P1: gp_Pnt2d, P2: gp_Pnt2d) -> None: ...
    def SetTrsf2d(self, T: gp_Trsf2d) -> None: ...
    def Transforms(self) -> Tuple[float, float]: ...
    def Trsf2d(self) -> gp_Trsf2d: ...
    def Value(self, Row: int, Col: int) -> float: ...

class Geom2d_AxisPlacement(Geom2d_Geometry):
    @overload
    def __init__(self, A: gp_Ax2d) -> None: ...
    @overload
    def __init__(self, P: gp_Pnt2d, V: gp_Dir2d) -> None: ...
    def Angle(self, Other: Geom2d_AxisPlacement) -> float: ...
    def Ax2d(self) -> gp_Ax2d: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def Direction(self) -> gp_Dir2d: ...
    def Location(self) -> gp_Pnt2d: ...
    def Reverse(self) -> None: ...
    def Reversed(self) -> Geom2d_AxisPlacement: ...
    def SetAxis(self, A: gp_Ax2d) -> None: ...
    def SetDirection(self, V: gp_Dir2d) -> None: ...
    def SetLocation(self, P: gp_Pnt2d) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...

class Geom2d_Curve(Geom2d_Geometry):
    def Continuity(self) -> GeomAbs_Shape: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def FirstParameter(self) -> float: ...
    def IsCN(self, N: int) -> bool: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def ParametricTransformation(self, T: gp_Trsf2d) -> float: ...
    def Period(self) -> float: ...
    def Reverse(self) -> None: ...
    def Reversed(self) -> Geom2d_Curve: ...
    def ReversedParameter(self, U: float) -> float: ...
    def TransformedParameter(self, U: float, T: gp_Trsf2d) -> float: ...
    def Value(self, U: float) -> gp_Pnt2d: ...

class Geom2d_Point(Geom2d_Geometry):
    def Coord(self) -> Tuple[float, float]: ...
    def Distance(self, Other: Geom2d_Point) -> float: ...
    def Pnt2d(self) -> gp_Pnt2d: ...
    def SquareDistance(self, Other: Geom2d_Point) -> float: ...
    def X(self) -> float: ...
    def Y(self) -> float: ...

class Geom2d_Vector(Geom2d_Geometry):
    def Angle(self, Other: Geom2d_Vector) -> float: ...
    def Coord(self) -> Tuple[float, float]: ...
    def Crossed(self, Other: Geom2d_Vector) -> float: ...
    def Dot(self, Other: Geom2d_Vector) -> float: ...
    def Magnitude(self) -> float: ...
    def Reverse(self) -> None: ...
    def Reversed(self) -> Geom2d_Vector: ...
    def SquareMagnitude(self) -> float: ...
    def Vec2d(self) -> gp_Vec2d: ...
    def X(self) -> float: ...
    def Y(self) -> float: ...

class Geom2d_BoundedCurve(Geom2d_Curve):
    def EndPoint(self) -> gp_Pnt2d: ...
    def StartPoint(self) -> gp_Pnt2d: ...

class Geom2d_CartesianPoint(Geom2d_Point):
    @overload
    def __init__(self, P: gp_Pnt2d) -> None: ...
    @overload
    def __init__(self, X: float, Y: float) -> None: ...
    def Coord(self) -> Tuple[float, float]: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def Pnt2d(self) -> gp_Pnt2d: ...
    def SetCoord(self, X: float, Y: float) -> None: ...
    def SetPnt2d(self, P: gp_Pnt2d) -> None: ...
    def SetX(self, X: float) -> None: ...
    def SetY(self, Y: float) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def X(self) -> float: ...
    def Y(self) -> float: ...

class Geom2d_Conic(Geom2d_Curve):
    def Continuity(self) -> GeomAbs_Shape: ...
    def Eccentricity(self) -> float: ...
    def IsCN(self, N: int) -> bool: ...
    def Location(self) -> gp_Pnt2d: ...
    def Position(self) -> gp_Ax22d: ...
    def Reverse(self) -> None: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetAxis(self, theA: gp_Ax22d) -> None: ...
    def SetLocation(self, theP: gp_Pnt2d) -> None: ...
    def SetXAxis(self, theAX: gp_Ax2d) -> None: ...
    def SetYAxis(self, theAY: gp_Ax2d) -> None: ...
    def XAxis(self) -> gp_Ax2d: ...
    def YAxis(self) -> gp_Ax2d: ...

class Geom2d_Direction(Geom2d_Vector):
    @overload
    def __init__(self, X: float, Y: float) -> None: ...
    @overload
    def __init__(self, V: gp_Dir2d) -> None: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def Crossed(self, Other: Geom2d_Vector) -> float: ...
    def Dir2d(self) -> gp_Dir2d: ...
    def Magnitude(self) -> float: ...
    def SetCoord(self, X: float, Y: float) -> None: ...
    def SetDir2d(self, V: gp_Dir2d) -> None: ...
    def SetX(self, X: float) -> None: ...
    def SetY(self, Y: float) -> None: ...
    def SquareMagnitude(self) -> float: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...

class Geom2d_Line(Geom2d_Curve):
    @overload
    def __init__(self, A: gp_Ax2d) -> None: ...
    @overload
    def __init__(self, L: gp_Lin2d) -> None: ...
    @overload
    def __init__(self, P: gp_Pnt2d, V: gp_Dir2d) -> None: ...
    def Continuity(self) -> GeomAbs_Shape: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def Direction(self) -> gp_Dir2d: ...
    def Distance(self, P: gp_Pnt2d) -> float: ...
    def FirstParameter(self) -> float: ...
    def IsCN(self, N: int) -> bool: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def Lin2d(self) -> gp_Lin2d: ...
    def Location(self) -> gp_Pnt2d: ...
    def ParametricTransformation(self, T: gp_Trsf2d) -> float: ...
    def Position(self) -> gp_Ax2d: ...
    def Reverse(self) -> None: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetDirection(self, V: gp_Dir2d) -> None: ...
    def SetLin2d(self, L: gp_Lin2d) -> None: ...
    def SetLocation(self, P: gp_Pnt2d) -> None: ...
    def SetPosition(self, A: gp_Ax2d) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def TransformedParameter(self, U: float, T: gp_Trsf2d) -> float: ...

class Geom2d_OffsetCurve(Geom2d_Curve):
    def __init__(self, C: Geom2d_Curve, Offset: float, isNotCheckC0: Optional[bool] = False) -> None: ...
    def BasisCurve(self) -> Geom2d_Curve: ...
    def Continuity(self) -> GeomAbs_Shape: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def FirstParameter(self) -> float: ...
    def GetBasisCurveContinuity(self) -> GeomAbs_Shape: ...
    def IsCN(self, N: int) -> bool: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def Offset(self) -> float: ...
    def ParametricTransformation(self, T: gp_Trsf2d) -> float: ...
    def Period(self) -> float: ...
    def Reverse(self) -> None: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetBasisCurve(self, C: Geom2d_Curve, isNotCheckC0: Optional[bool] = False) -> None: ...
    def SetOffsetValue(self, D: float) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def TransformedParameter(self, U: float, T: gp_Trsf2d) -> float: ...

class Geom2d_VectorWithMagnitude(Geom2d_Vector):
    @overload
    def __init__(self, V: gp_Vec2d) -> None: ...
    @overload
    def __init__(self, X: float, Y: float) -> None: ...
    @overload
    def __init__(self, P1: gp_Pnt2d, P2: gp_Pnt2d) -> None: ...
    def Add(self, Other: Geom2d_Vector) -> None: ...
    def Added(self, Other: Geom2d_Vector) -> Geom2d_VectorWithMagnitude: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def Crossed(self, Other: Geom2d_Vector) -> float: ...
    def Divide(self, Scalar: float) -> None: ...
    def Divided(self, Scalar: float) -> Geom2d_VectorWithMagnitude: ...
    def Magnitude(self) -> float: ...
    def Multiplied(self, Scalar: float) -> Geom2d_VectorWithMagnitude: ...
    def Multiply(self, Scalar: float) -> None: ...
    def Normalize(self) -> None: ...
    def Normalized(self) -> Geom2d_VectorWithMagnitude: ...
    def SetCoord(self, X: float, Y: float) -> None: ...
    def SetVec2d(self, V: gp_Vec2d) -> None: ...
    def SetX(self, X: float) -> None: ...
    def SetY(self, Y: float) -> None: ...
    def SquareMagnitude(self) -> float: ...
    def Subtract(self, Other: Geom2d_Vector) -> None: ...
    def Subtracted(self, Other: Geom2d_Vector) -> Geom2d_VectorWithMagnitude: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...

class Geom2d_BSplineCurve(Geom2d_BoundedCurve):
    @overload
    def __init__(self, Poles: TColgp_Array1OfPnt2d, Knots: TColStd_Array1OfReal, Multiplicities: TColStd_Array1OfInteger, Degree: int, Periodic: Optional[bool] = False) -> None: ...
    @overload
    def __init__(self, Poles: TColgp_Array1OfPnt2d, Weights: TColStd_Array1OfReal, Knots: TColStd_Array1OfReal, Multiplicities: TColStd_Array1OfInteger, Degree: int, Periodic: Optional[bool] = False) -> None: ...
    def Continuity(self) -> GeomAbs_Shape: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def Degree(self) -> int: ...
    def EndPoint(self) -> gp_Pnt2d: ...
    def FirstParameter(self) -> float: ...
    def FirstUKnotIndex(self) -> int: ...
    def IncreaseDegree(self, Degree: int) -> None: ...
    @overload
    def IncreaseMultiplicity(self, Index: int, M: int) -> None: ...
    @overload
    def IncreaseMultiplicity(self, I1: int, I2: int, M: int) -> None: ...
    def IncrementMultiplicity(self, I1: int, I2: int, M: int) -> None: ...
    def InsertKnot(self, U: float, M: Optional[int] = 1, ParametricTolerance: Optional[float] = 0.0) -> None: ...
    def InsertKnots(self, Knots: TColStd_Array1OfReal, Mults: TColStd_Array1OfInteger, ParametricTolerance: Optional[float] = 0.0, Add: Optional[bool] = False) -> None: ...
    def InsertPoleAfter(self, Index: int, P: gp_Pnt2d, Weight: Optional[float] = 1.0) -> None: ...
    def InsertPoleBefore(self, Index: int, P: gp_Pnt2d, Weight: Optional[float] = 1.0) -> None: ...
    def IsCN(self, N: int) -> bool: ...
    def IsClosed(self) -> bool: ...
    def IsG1(self, theTf: float, theTl: float, theAngTol: float) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def IsRational(self) -> bool: ...
    def Knot(self, Index: int) -> float: ...
    def KnotDistribution(self) -> GeomAbs_BSplKnotDistribution: ...
    @overload
    def KnotSequence(self, K: TColStd_Array1OfReal) -> None: ...
    @overload
    def KnotSequence(self) -> TColStd_Array1OfReal: ...
    @overload
    def Knots(self, K: TColStd_Array1OfReal) -> None: ...
    @overload
    def Knots(self) -> TColStd_Array1OfReal: ...
    def LastParameter(self) -> float: ...
    def LastUKnotIndex(self) -> int: ...
    def LocalD0(self, U: float, FromK1: int, ToK2: int, P: gp_Pnt2d) -> None: ...
    def LocalD1(self, U: float, FromK1: int, ToK2: int, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def LocalD2(self, U: float, FromK1: int, ToK2: int, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def LocalD3(self, U: float, FromK1: int, ToK2: int, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def LocalDN(self, U: float, FromK1: int, ToK2: int, N: int) -> gp_Vec2d: ...
    def LocalValue(self, U: float, FromK1: int, ToK2: int) -> gp_Pnt2d: ...
    def LocateU(self, U: float, ParametricTolerance: float, WithKnotRepetition: Optional[bool] = False) -> Tuple[int, int]: ...
    @staticmethod
    def MaxDegree() -> int: ...
    def MovePoint(self, U: float, P: gp_Pnt2d, Index1: int, Index2: int) -> Tuple[int, int]: ...
    def MovePointAndTangent(self, U: float, P: gp_Pnt2d, Tangent: gp_Vec2d, Tolerance: float, StartingCondition: int, EndingCondition: int) -> int: ...
    @overload
    def Multiplicities(self, M: TColStd_Array1OfInteger) -> None: ...
    @overload
    def Multiplicities(self) -> TColStd_Array1OfInteger: ...
    def Multiplicity(self, Index: int) -> int: ...
    def NbKnots(self) -> int: ...
    def NbPoles(self) -> int: ...
    def PeriodicNormalization(self) -> float: ...
    def Pole(self, Index: int) -> gp_Pnt2d: ...
    @overload
    def Poles(self, P: TColgp_Array1OfPnt2d) -> None: ...
    @overload
    def Poles(self) -> TColgp_Array1OfPnt2d: ...
    def RemoveKnot(self, Index: int, M: int, Tolerance: float) -> bool: ...
    def RemovePole(self, Index: int) -> None: ...
    def Resolution(self, ToleranceUV: float) -> float: ...
    def Reverse(self) -> None: ...
    def ReversedParameter(self, U: float) -> float: ...
    def Segment(self, U1: float, U2: float, theTolerance: Optional[float] = precision_PConfusion()) -> None: ...
    @overload
    def SetKnot(self, Index: int, K: float) -> None: ...
    @overload
    def SetKnot(self, Index: int, K: float, M: int) -> None: ...
    def SetKnots(self, K: TColStd_Array1OfReal) -> None: ...
    def SetNotPeriodic(self) -> None: ...
    def SetOrigin(self, Index: int) -> None: ...
    def SetPeriodic(self) -> None: ...
    @overload
    def SetPole(self, Index: int, P: gp_Pnt2d) -> None: ...
    @overload
    def SetPole(self, Index: int, P: gp_Pnt2d, Weight: float) -> None: ...
    def SetWeight(self, Index: int, Weight: float) -> None: ...
    def StartPoint(self) -> gp_Pnt2d: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def Weight(self, Index: int) -> float: ...
    @overload
    def Weights(self, W: TColStd_Array1OfReal) -> None: ...
    @overload
    def Weights(self) -> TColStd_Array1OfReal: ...

class Geom2d_BezierCurve(Geom2d_BoundedCurve):
    @overload
    def __init__(self, CurvePoles: TColgp_Array1OfPnt2d) -> None: ...
    @overload
    def __init__(self, CurvePoles: TColgp_Array1OfPnt2d, PoleWeights: TColStd_Array1OfReal) -> None: ...
    def Continuity(self) -> GeomAbs_Shape: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def Degree(self) -> int: ...
    def EndPoint(self) -> gp_Pnt2d: ...
    def FirstParameter(self) -> float: ...
    def Increase(self, Degree: int) -> None: ...
    def InsertPoleAfter(self, Index: int, P: gp_Pnt2d, Weight: Optional[float] = 1.0) -> None: ...
    def InsertPoleBefore(self, Index: int, P: gp_Pnt2d, Weight: Optional[float] = 1.0) -> None: ...
    def IsCN(self, N: int) -> bool: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def IsRational(self) -> bool: ...
    def LastParameter(self) -> float: ...
    @staticmethod
    def MaxDegree() -> int: ...
    def NbPoles(self) -> int: ...
    def Pole(self, Index: int) -> gp_Pnt2d: ...
    @overload
    def Poles(self, P: TColgp_Array1OfPnt2d) -> None: ...
    @overload
    def Poles(self) -> TColgp_Array1OfPnt2d: ...
    def RemovePole(self, Index: int) -> None: ...
    def Resolution(self, ToleranceUV: float) -> float: ...
    def Reverse(self) -> None: ...
    def ReversedParameter(self, U: float) -> float: ...
    def Segment(self, U1: float, U2: float) -> None: ...
    @overload
    def SetPole(self, Index: int, P: gp_Pnt2d) -> None: ...
    @overload
    def SetPole(self, Index: int, P: gp_Pnt2d, Weight: float) -> None: ...
    def SetWeight(self, Index: int, Weight: float) -> None: ...
    def StartPoint(self) -> gp_Pnt2d: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def Weight(self, Index: int) -> float: ...
    @overload
    def Weights(self, W: TColStd_Array1OfReal) -> None: ...
    @overload
    def Weights(self) -> TColStd_Array1OfReal: ...

class Geom2d_Circle(Geom2d_Conic):
    @overload
    def __init__(self, C: gp_Circ2d) -> None: ...
    @overload
    def __init__(self, A: gp_Ax2d, Radius: float, Sense: Optional[bool] = True) -> None: ...
    @overload
    def __init__(self, A: gp_Ax22d, Radius: float) -> None: ...
    def Circ2d(self) -> gp_Circ2d: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def Eccentricity(self) -> float: ...
    def FirstParameter(self) -> float: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def Radius(self) -> float: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetCirc2d(self, C: gp_Circ2d) -> None: ...
    def SetRadius(self, R: float) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...

class Geom2d_Ellipse(Geom2d_Conic):
    @overload
    def __init__(self, E: gp_Elips2d) -> None: ...
    @overload
    def __init__(self, MajorAxis: gp_Ax2d, MajorRadius: float, MinorRadius: float, Sense: Optional[bool] = True) -> None: ...
    @overload
    def __init__(self, Axis: gp_Ax22d, MajorRadius: float, MinorRadius: float) -> None: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def Directrix1(self) -> gp_Ax2d: ...
    def Directrix2(self) -> gp_Ax2d: ...
    def Eccentricity(self) -> float: ...
    def Elips2d(self) -> gp_Elips2d: ...
    def FirstParameter(self) -> float: ...
    def Focal(self) -> float: ...
    def Focus1(self) -> gp_Pnt2d: ...
    def Focus2(self) -> gp_Pnt2d: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def MajorRadius(self) -> float: ...
    def MinorRadius(self) -> float: ...
    def Parameter(self) -> float: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetElips2d(self, E: gp_Elips2d) -> None: ...
    def SetMajorRadius(self, MajorRadius: float) -> None: ...
    def SetMinorRadius(self, MinorRadius: float) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...

class Geom2d_Hyperbola(Geom2d_Conic):
    @overload
    def __init__(self, H: gp_Hypr2d) -> None: ...
    @overload
    def __init__(self, MajorAxis: gp_Ax2d, MajorRadius: float, MinorRadius: float, Sense: Optional[bool] = True) -> None: ...
    @overload
    def __init__(self, Axis: gp_Ax22d, MajorRadius: float, MinorRadius: float) -> None: ...
    def Asymptote1(self) -> gp_Ax2d: ...
    def Asymptote2(self) -> gp_Ax2d: ...
    def ConjugateBranch1(self) -> gp_Hypr2d: ...
    def ConjugateBranch2(self) -> gp_Hypr2d: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def Directrix1(self) -> gp_Ax2d: ...
    def Directrix2(self) -> gp_Ax2d: ...
    def Eccentricity(self) -> float: ...
    def FirstParameter(self) -> float: ...
    def Focal(self) -> float: ...
    def Focus1(self) -> gp_Pnt2d: ...
    def Focus2(self) -> gp_Pnt2d: ...
    def Hypr2d(self) -> gp_Hypr2d: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def MajorRadius(self) -> float: ...
    def MinorRadius(self) -> float: ...
    def OtherBranch(self) -> gp_Hypr2d: ...
    def Parameter(self) -> float: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetHypr2d(self, H: gp_Hypr2d) -> None: ...
    def SetMajorRadius(self, MajorRadius: float) -> None: ...
    def SetMinorRadius(self, MinorRadius: float) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...

class Geom2d_Parabola(Geom2d_Conic):
    @overload
    def __init__(self, Prb: gp_Parab2d) -> None: ...
    @overload
    def __init__(self, MirrorAxis: gp_Ax2d, Focal: float, Sense: Optional[bool] = True) -> None: ...
    @overload
    def __init__(self, Axis: gp_Ax22d, Focal: float) -> None: ...
    @overload
    def __init__(self, D: gp_Ax2d, F: gp_Pnt2d) -> None: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def Directrix(self) -> gp_Ax2d: ...
    def Eccentricity(self) -> float: ...
    def FirstParameter(self) -> float: ...
    def Focal(self) -> float: ...
    def Focus(self) -> gp_Pnt2d: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def Parab2d(self) -> gp_Parab2d: ...
    def Parameter(self) -> float: ...
    def ParametricTransformation(self, T: gp_Trsf2d) -> float: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetFocal(self, Focal: float) -> None: ...
    def SetParab2d(self, Prb: gp_Parab2d) -> None: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def TransformedParameter(self, U: float, T: gp_Trsf2d) -> float: ...

class Geom2d_TrimmedCurve(Geom2d_BoundedCurve):
    def __init__(self, C: Geom2d_Curve, U1: float, U2: float, Sense: Optional[bool] = True, theAdjustPeriodic: Optional[bool] = True) -> None: ...
    def BasisCurve(self) -> Geom2d_Curve: ...
    def Continuity(self) -> GeomAbs_Shape: ...
    def Copy(self) -> Geom2d_Geometry: ...
    def D0(self, U: float, P: gp_Pnt2d) -> None: ...
    def D1(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d) -> None: ...
    def D2(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d) -> None: ...
    def D3(self, U: float, P: gp_Pnt2d, V1: gp_Vec2d, V2: gp_Vec2d, V3: gp_Vec2d) -> None: ...
    def DN(self, U: float, N: int) -> gp_Vec2d: ...
    def EndPoint(self) -> gp_Pnt2d: ...
    def FirstParameter(self) -> float: ...
    def IsCN(self, N: int) -> bool: ...
    def IsClosed(self) -> bool: ...
    def IsPeriodic(self) -> bool: ...
    def LastParameter(self) -> float: ...
    def ParametricTransformation(self, T: gp_Trsf2d) -> float: ...
    def Period(self) -> float: ...
    def Reverse(self) -> None: ...
    def ReversedParameter(self, U: float) -> float: ...
    def SetTrim(self, U1: float, U2: float, Sense: Optional[bool] = True, theAdjustPeriodic: Optional[bool] = True) -> None: ...
    def StartPoint(self) -> gp_Pnt2d: ...
    def Transform(self, T: gp_Trsf2d) -> None: ...
    def TransformedParameter(self, U: float, T: gp_Trsf2d) -> float: ...

# harray1 classes
# harray2 classes
# hsequence classes

Geom2d_BSplineCurve_MaxDegree = Geom2d_BSplineCurve.MaxDegree
Geom2d_BezierCurve_MaxDegree = Geom2d_BezierCurve.MaxDegree
