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

from OCC.Core.Standard import *
from OCC.Core.NCollection import *


class GeomAbs_IsoType(IntEnum):
	GeomAbs_IsoU: int = ...
	GeomAbs_IsoV: int = ...
	GeomAbs_NoneIso: int = ...
GeomAbs_IsoU = GeomAbs_IsoType.GeomAbs_IsoU
GeomAbs_IsoV = GeomAbs_IsoType.GeomAbs_IsoV
GeomAbs_NoneIso = GeomAbs_IsoType.GeomAbs_NoneIso

class GeomAbs_JoinType(IntEnum):
	GeomAbs_Arc: int = ...
	GeomAbs_Tangent: int = ...
	GeomAbs_Intersection: int = ...
GeomAbs_Arc = GeomAbs_JoinType.GeomAbs_Arc
GeomAbs_Tangent = GeomAbs_JoinType.GeomAbs_Tangent
GeomAbs_Intersection = GeomAbs_JoinType.GeomAbs_Intersection

class GeomAbs_SurfaceType(IntEnum):
	GeomAbs_Plane: int = ...
	GeomAbs_Cylinder: int = ...
	GeomAbs_Cone: int = ...
	GeomAbs_Sphere: int = ...
	GeomAbs_Torus: int = ...
	GeomAbs_BezierSurface: int = ...
	GeomAbs_BSplineSurface: int = ...
	GeomAbs_SurfaceOfRevolution: int = ...
	GeomAbs_SurfaceOfExtrusion: int = ...
	GeomAbs_OffsetSurface: int = ...
	GeomAbs_OtherSurface: int = ...
GeomAbs_Plane = GeomAbs_SurfaceType.GeomAbs_Plane
GeomAbs_Cylinder = GeomAbs_SurfaceType.GeomAbs_Cylinder
GeomAbs_Cone = GeomAbs_SurfaceType.GeomAbs_Cone
GeomAbs_Sphere = GeomAbs_SurfaceType.GeomAbs_Sphere
GeomAbs_Torus = GeomAbs_SurfaceType.GeomAbs_Torus
GeomAbs_BezierSurface = GeomAbs_SurfaceType.GeomAbs_BezierSurface
GeomAbs_BSplineSurface = GeomAbs_SurfaceType.GeomAbs_BSplineSurface
GeomAbs_SurfaceOfRevolution = GeomAbs_SurfaceType.GeomAbs_SurfaceOfRevolution
GeomAbs_SurfaceOfExtrusion = GeomAbs_SurfaceType.GeomAbs_SurfaceOfExtrusion
GeomAbs_OffsetSurface = GeomAbs_SurfaceType.GeomAbs_OffsetSurface
GeomAbs_OtherSurface = GeomAbs_SurfaceType.GeomAbs_OtherSurface

class GeomAbs_CurveType(IntEnum):
	GeomAbs_Line: int = ...
	GeomAbs_Circle: int = ...
	GeomAbs_Ellipse: int = ...
	GeomAbs_Hyperbola: int = ...
	GeomAbs_Parabola: int = ...
	GeomAbs_BezierCurve: int = ...
	GeomAbs_BSplineCurve: int = ...
	GeomAbs_OffsetCurve: int = ...
	GeomAbs_OtherCurve: int = ...
GeomAbs_Line = GeomAbs_CurveType.GeomAbs_Line
GeomAbs_Circle = GeomAbs_CurveType.GeomAbs_Circle
GeomAbs_Ellipse = GeomAbs_CurveType.GeomAbs_Ellipse
GeomAbs_Hyperbola = GeomAbs_CurveType.GeomAbs_Hyperbola
GeomAbs_Parabola = GeomAbs_CurveType.GeomAbs_Parabola
GeomAbs_BezierCurve = GeomAbs_CurveType.GeomAbs_BezierCurve
GeomAbs_BSplineCurve = GeomAbs_CurveType.GeomAbs_BSplineCurve
GeomAbs_OffsetCurve = GeomAbs_CurveType.GeomAbs_OffsetCurve
GeomAbs_OtherCurve = GeomAbs_CurveType.GeomAbs_OtherCurve

class GeomAbs_Shape(IntEnum):
	GeomAbs_C0: int = ...
	GeomAbs_G1: int = ...
	GeomAbs_C1: int = ...
	GeomAbs_G2: int = ...
	GeomAbs_C2: int = ...
	GeomAbs_C3: int = ...
	GeomAbs_CN: int = ...
GeomAbs_C0 = GeomAbs_Shape.GeomAbs_C0
GeomAbs_G1 = GeomAbs_Shape.GeomAbs_G1
GeomAbs_C1 = GeomAbs_Shape.GeomAbs_C1
GeomAbs_G2 = GeomAbs_Shape.GeomAbs_G2
GeomAbs_C2 = GeomAbs_Shape.GeomAbs_C2
GeomAbs_C3 = GeomAbs_Shape.GeomAbs_C3
GeomAbs_CN = GeomAbs_Shape.GeomAbs_CN

class GeomAbs_BSplKnotDistribution(IntEnum):
	GeomAbs_NonUniform: int = ...
	GeomAbs_Uniform: int = ...
	GeomAbs_QuasiUniform: int = ...
	GeomAbs_PiecewiseBezier: int = ...
GeomAbs_NonUniform = GeomAbs_BSplKnotDistribution.GeomAbs_NonUniform
GeomAbs_Uniform = GeomAbs_BSplKnotDistribution.GeomAbs_Uniform
GeomAbs_QuasiUniform = GeomAbs_BSplKnotDistribution.GeomAbs_QuasiUniform
GeomAbs_PiecewiseBezier = GeomAbs_BSplKnotDistribution.GeomAbs_PiecewiseBezier

# harray1 classes
# harray2 classes
# hsequence classes

