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

from OCC.Core.Standard import *
from OCC.Core.NCollection import *
from OCC.Core.Geom import *
from OCC.Core.GeomAbs import *
from OCC.Core.Geom2d import *
from OCC.Core.GeomLProp import *


class LocalAnalysis_StatusErrorType(IntEnum):
    LocalAnalysis_NullFirstDerivative: int = ...
    LocalAnalysis_NullSecondDerivative: int = ...
    LocalAnalysis_TangentNotDefined: int = ...
    LocalAnalysis_NormalNotDefined: int = ...
    LocalAnalysis_CurvatureNotDefined: int = ...

LocalAnalysis_NullFirstDerivative = LocalAnalysis_StatusErrorType.LocalAnalysis_NullFirstDerivative
LocalAnalysis_NullSecondDerivative = LocalAnalysis_StatusErrorType.LocalAnalysis_NullSecondDerivative
LocalAnalysis_TangentNotDefined = LocalAnalysis_StatusErrorType.LocalAnalysis_TangentNotDefined
LocalAnalysis_NormalNotDefined = LocalAnalysis_StatusErrorType.LocalAnalysis_NormalNotDefined
LocalAnalysis_CurvatureNotDefined = LocalAnalysis_StatusErrorType.LocalAnalysis_CurvatureNotDefined

class localanalysis:
    @overload
    @staticmethod
    def Dump(surfconti: LocalAnalysis_SurfaceContinuity) -> str: ...
    @overload
    @staticmethod
    def Dump(curvconti: LocalAnalysis_CurveContinuity) -> str: ...

class LocalAnalysis_CurveContinuity:
    def __init__(self, Curv1: Geom_Curve, u1: float, Curv2: Geom_Curve, u2: float, Order: GeomAbs_Shape, EpsNul: Optional[float] = 0.001, EpsC0: Optional[float] = 0.001, EpsC1: Optional[float] = 0.001, EpsC2: Optional[float] = 0.001, EpsG1: Optional[float] = 0.001, EpsG2: Optional[float] = 0.001, Percent: Optional[float] = 0.01, Maxlen: Optional[float] = 10000) -> None: ...
    def C0Value(self) -> float: ...
    def C1Angle(self) -> float: ...
    def C1Ratio(self) -> float: ...
    def C2Angle(self) -> float: ...
    def C2Ratio(self) -> float: ...
    def ContinuityStatus(self) -> GeomAbs_Shape: ...
    def G1Angle(self) -> float: ...
    def G2Angle(self) -> float: ...
    def G2CurvatureVariation(self) -> float: ...
    def IsC0(self) -> bool: ...
    def IsC1(self) -> bool: ...
    def IsC2(self) -> bool: ...
    def IsDone(self) -> bool: ...
    def IsG1(self) -> bool: ...
    def IsG2(self) -> bool: ...
    def StatusError(self) -> LocalAnalysis_StatusErrorType: ...

class LocalAnalysis_SurfaceContinuity:
    @overload
    def __init__(self, Surf1: Geom_Surface, u1: float, v1: float, Surf2: Geom_Surface, u2: float, v2: float, Order: GeomAbs_Shape, EpsNul: Optional[float] = 0.001, EpsC0: Optional[float] = 0.001, EpsC1: Optional[float] = 0.001, EpsC2: Optional[float] = 0.001, EpsG1: Optional[float] = 0.001, Percent: Optional[float] = 0.01, Maxlen: Optional[float] = 10000) -> None: ...
    @overload
    def __init__(self, curv1: Geom2d_Curve, curv2: Geom2d_Curve, U: float, Surf1: Geom_Surface, Surf2: Geom_Surface, Order: GeomAbs_Shape, EpsNul: Optional[float] = 0.001, EpsC0: Optional[float] = 0.001, EpsC1: Optional[float] = 0.001, EpsC2: Optional[float] = 0.001, EpsG1: Optional[float] = 0.001, Percent: Optional[float] = 0.01, Maxlen: Optional[float] = 10000) -> None: ...
    @overload
    def __init__(self, EpsNul: Optional[float] = 0.001, EpsC0: Optional[float] = 0.001, EpsC1: Optional[float] = 0.001, EpsC2: Optional[float] = 0.001, EpsG1: Optional[float] = 0.001, Percent: Optional[float] = 0.01, Maxlen: Optional[float] = 10000) -> None: ...
    def C0Value(self) -> float: ...
    def C1UAngle(self) -> float: ...
    def C1URatio(self) -> float: ...
    def C1VAngle(self) -> float: ...
    def C1VRatio(self) -> float: ...
    def C2UAngle(self) -> float: ...
    def C2URatio(self) -> float: ...
    def C2VAngle(self) -> float: ...
    def C2VRatio(self) -> float: ...
    def ComputeAnalysis(self, Surf1: GeomLProp_SLProps, Surf2: GeomLProp_SLProps, Order: GeomAbs_Shape) -> None: ...
    def ContinuityStatus(self) -> GeomAbs_Shape: ...
    def G1Angle(self) -> float: ...
    def G2CurvatureGap(self) -> float: ...
    def IsC0(self) -> bool: ...
    def IsC1(self) -> bool: ...
    def IsC2(self) -> bool: ...
    def IsDone(self) -> bool: ...
    def IsG1(self) -> bool: ...
    def IsG2(self) -> bool: ...
    def StatusError(self) -> LocalAnalysis_StatusErrorType: ...

# harray1 classes
# harray2 classes
# hsequence classes

