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.Geom2d import *
from OCC.Core.Geom2dAdaptor import *


class geom2devaluator:
    @staticmethod
    def CalculateD0(theValue: gp_Pnt2d, theD1: gp_Vec2d, theOffset: float) -> None: ...
    @staticmethod
    def CalculateD1(theValue: gp_Pnt2d, theD1: gp_Vec2d, theD2: gp_Vec2d, theOffset: float) -> None: ...
    @staticmethod
    def CalculateD2(theValue: gp_Pnt2d, theD1: gp_Vec2d, theD2: gp_Vec2d, theD3: gp_Vec2d, theIsDirChange: bool, theOffset: float) -> None: ...
    @staticmethod
    def CalculateD3(theValue: gp_Pnt2d, theD1: gp_Vec2d, theD2: gp_Vec2d, theD3: gp_Vec2d, theD4: gp_Vec2d, theIsDirChange: bool, theOffset: float) -> None: ...

class Geom2dEvaluator_Curve(Standard_Transient):
    def D0(self, theU: float, theValue: gp_Pnt2d) -> None: ...
    def D1(self, theU: float, theValue: gp_Pnt2d, theD1: gp_Vec2d) -> None: ...
    def D2(self, theU: float, theValue: gp_Pnt2d, theD1: gp_Vec2d, theD2: gp_Vec2d) -> None: ...
    def D3(self, theU: float, theValue: gp_Pnt2d, theD1: gp_Vec2d, theD2: gp_Vec2d, theD3: gp_Vec2d) -> None: ...
    def DN(self, theU: float, theDerU: int) -> gp_Vec2d: ...
    def ShallowCopy(self) -> Geom2dEvaluator_Curve: ...

class Geom2dEvaluator_OffsetCurve(Geom2dEvaluator_Curve):
    @overload
    def __init__(self, theBase: Geom2d_Curve, theOffset: float) -> None: ...
    @overload
    def __init__(self, theBase: Geom2dAdaptor_Curve, theOffset: float) -> None: ...
    def D0(self, theU: float, theValue: gp_Pnt2d) -> None: ...
    def D1(self, theU: float, theValue: gp_Pnt2d, theD1: gp_Vec2d) -> None: ...
    def D2(self, theU: float, theValue: gp_Pnt2d, theD1: gp_Vec2d, theD2: gp_Vec2d) -> None: ...
    def D3(self, theU: float, theValue: gp_Pnt2d, theD1: gp_Vec2d, theD2: gp_Vec2d, theD3: gp_Vec2d) -> None: ...
    def DN(self, theU: float, theDeriv: int) -> gp_Vec2d: ...
    def SetOffsetValue(self, theOffset: float) -> None: ...
    def ShallowCopy(self) -> Geom2dEvaluator_Curve: ...

# harray1 classes
# harray2 classes
# hsequence classes

