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

from OCC.Core.Standard import *
from OCC.Core.NCollection import *
from OCC.Core.TColgp import *
from OCC.Core.Graphic3d import *
from OCC.Core.Poly import *
from OCC.Core.gp import *
from OCC.Core.Bnd import *
from OCC.Core.TCollection import *
from OCC.Core.GeomAbs import *
from OCC.Core.Aspect import *
from OCC.Core.Quantity import *
from OCC.Core.TColStd import *

# the following typedef cannot be wrapped as is
Prs3d_NListIteratorOfListOfSequenceOfPnt = NewType("Prs3d_NListIteratorOfListOfSequenceOfPnt", Any)
Prs3d_Presentation = NewType("Prs3d_Presentation", Graphic3d_Structure)

class Prs3d_NListOfSequenceOfPnt:
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...
    def Size(self) -> int: ...
    def Clear(self) -> None: ...
    def First(self) -> False: ...
    def Last(self) -> False: ...
    def Append(self, theItem: False) -> False: ...
    def Prepend(self, theItem: False) -> False: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def Value(self, theIndex: int) -> False: ...
    def SetValue(self, theIndex: int, theValue: False) -> None: ...

class Prs3d_DatumAttribute(IntEnum):
    Prs3d_DatumAttribute_XAxisLength: int = ...
    Prs3d_DatumAttribute_YAxisLength: int = ...
    Prs3d_DatumAttribute_ZAxisLength: int = ...
    Prs3d_DatumAttribute_ShadingTubeRadiusPercent: int = ...
    Prs3d_DatumAttribute_ShadingConeRadiusPercent: int = ...
    Prs3d_DatumAttribute_ShadingConeLengthPercent: int = ...
    Prs3d_DatumAttribute_ShadingOriginRadiusPercent: int = ...
    Prs3d_DatumAttribute_ShadingNumberOfFacettes: int = ...
    Prs3d_DA_XAxisLength: int = ...
    Prs3d_DA_YAxisLength: int = ...
    Prs3d_DA_ZAxisLength: int = ...
    Prs3d_DP_ShadingTubeRadiusPercent: int = ...
    Prs3d_DP_ShadingConeRadiusPercent: int = ...
    Prs3d_DP_ShadingConeLengthPercent: int = ...
    Prs3d_DP_ShadingOriginRadiusPercent: int = ...
    Prs3d_DP_ShadingNumberOfFacettes: int = ...

Prs3d_DatumAttribute_XAxisLength = Prs3d_DatumAttribute.Prs3d_DatumAttribute_XAxisLength
Prs3d_DatumAttribute_YAxisLength = Prs3d_DatumAttribute.Prs3d_DatumAttribute_YAxisLength
Prs3d_DatumAttribute_ZAxisLength = Prs3d_DatumAttribute.Prs3d_DatumAttribute_ZAxisLength
Prs3d_DatumAttribute_ShadingTubeRadiusPercent = Prs3d_DatumAttribute.Prs3d_DatumAttribute_ShadingTubeRadiusPercent
Prs3d_DatumAttribute_ShadingConeRadiusPercent = Prs3d_DatumAttribute.Prs3d_DatumAttribute_ShadingConeRadiusPercent
Prs3d_DatumAttribute_ShadingConeLengthPercent = Prs3d_DatumAttribute.Prs3d_DatumAttribute_ShadingConeLengthPercent
Prs3d_DatumAttribute_ShadingOriginRadiusPercent = Prs3d_DatumAttribute.Prs3d_DatumAttribute_ShadingOriginRadiusPercent
Prs3d_DatumAttribute_ShadingNumberOfFacettes = Prs3d_DatumAttribute.Prs3d_DatumAttribute_ShadingNumberOfFacettes
Prs3d_DA_XAxisLength = Prs3d_DatumAttribute.Prs3d_DA_XAxisLength
Prs3d_DA_YAxisLength = Prs3d_DatumAttribute.Prs3d_DA_YAxisLength
Prs3d_DA_ZAxisLength = Prs3d_DatumAttribute.Prs3d_DA_ZAxisLength
Prs3d_DP_ShadingTubeRadiusPercent = Prs3d_DatumAttribute.Prs3d_DP_ShadingTubeRadiusPercent
Prs3d_DP_ShadingConeRadiusPercent = Prs3d_DatumAttribute.Prs3d_DP_ShadingConeRadiusPercent
Prs3d_DP_ShadingConeLengthPercent = Prs3d_DatumAttribute.Prs3d_DP_ShadingConeLengthPercent
Prs3d_DP_ShadingOriginRadiusPercent = Prs3d_DatumAttribute.Prs3d_DP_ShadingOriginRadiusPercent
Prs3d_DP_ShadingNumberOfFacettes = Prs3d_DatumAttribute.Prs3d_DP_ShadingNumberOfFacettes


class Prs3d_DatumAxes(IntEnum):
    Prs3d_DatumAxes_XAxis: int = ...
    Prs3d_DatumAxes_YAxis: int = ...
    Prs3d_DatumAxes_ZAxis: int = ...
    Prs3d_DatumAxes_XYAxes: int = ...
    Prs3d_DatumAxes_YZAxes: int = ...
    Prs3d_DatumAxes_XZAxes: int = ...
    Prs3d_DatumAxes_XYZAxes: int = ...
    Prs3d_DA_XAxis: int = ...
    Prs3d_DA_YAxis: int = ...
    Prs3d_DA_ZAxis: int = ...
    Prs3d_DA_XYAxis: int = ...
    Prs3d_DA_YZAxis: int = ...
    Prs3d_DA_XZAxis: int = ...
    Prs3d_DA_XYZAxis: int = ...

Prs3d_DatumAxes_XAxis = Prs3d_DatumAxes.Prs3d_DatumAxes_XAxis
Prs3d_DatumAxes_YAxis = Prs3d_DatumAxes.Prs3d_DatumAxes_YAxis
Prs3d_DatumAxes_ZAxis = Prs3d_DatumAxes.Prs3d_DatumAxes_ZAxis
Prs3d_DatumAxes_XYAxes = Prs3d_DatumAxes.Prs3d_DatumAxes_XYAxes
Prs3d_DatumAxes_YZAxes = Prs3d_DatumAxes.Prs3d_DatumAxes_YZAxes
Prs3d_DatumAxes_XZAxes = Prs3d_DatumAxes.Prs3d_DatumAxes_XZAxes
Prs3d_DatumAxes_XYZAxes = Prs3d_DatumAxes.Prs3d_DatumAxes_XYZAxes
Prs3d_DA_XAxis = Prs3d_DatumAxes.Prs3d_DA_XAxis
Prs3d_DA_YAxis = Prs3d_DatumAxes.Prs3d_DA_YAxis
Prs3d_DA_ZAxis = Prs3d_DatumAxes.Prs3d_DA_ZAxis
Prs3d_DA_XYAxis = Prs3d_DatumAxes.Prs3d_DA_XYAxis
Prs3d_DA_YZAxis = Prs3d_DatumAxes.Prs3d_DA_YZAxis
Prs3d_DA_XZAxis = Prs3d_DatumAxes.Prs3d_DA_XZAxis
Prs3d_DA_XYZAxis = Prs3d_DatumAxes.Prs3d_DA_XYZAxis

class Prs3d_DatumMode(IntEnum):
    Prs3d_DM_WireFrame: int = ...
    Prs3d_DM_Shaded: int = ...

Prs3d_DM_WireFrame = Prs3d_DatumMode.Prs3d_DM_WireFrame
Prs3d_DM_Shaded = Prs3d_DatumMode.Prs3d_DM_Shaded

class Prs3d_DatumParts(IntEnum):
    Prs3d_DatumParts_Origin: int = ...
    Prs3d_DatumParts_XAxis: int = ...
    Prs3d_DatumParts_YAxis: int = ...
    Prs3d_DatumParts_ZAxis: int = ...
    Prs3d_DatumParts_XArrow: int = ...
    Prs3d_DatumParts_YArrow: int = ...
    Prs3d_DatumParts_ZArrow: int = ...
    Prs3d_DatumParts_XOYAxis: int = ...
    Prs3d_DatumParts_YOZAxis: int = ...
    Prs3d_DatumParts_XOZAxis: int = ...
    Prs3d_DatumParts_None: int = ...
    Prs3d_DP_Origin: int = ...
    Prs3d_DP_XAxis: int = ...
    Prs3d_DP_YAxis: int = ...
    Prs3d_DP_ZAxis: int = ...
    Prs3d_DP_XArrow: int = ...
    Prs3d_DP_YArrow: int = ...
    Prs3d_DP_ZArrow: int = ...
    Prs3d_DP_XOYAxis: int = ...
    Prs3d_DP_YOZAxis: int = ...
    Prs3d_DP_XOZAxis: int = ...
    Prs3d_DP_None: int = ...

Prs3d_DatumParts_Origin = Prs3d_DatumParts.Prs3d_DatumParts_Origin
Prs3d_DatumParts_XAxis = Prs3d_DatumParts.Prs3d_DatumParts_XAxis
Prs3d_DatumParts_YAxis = Prs3d_DatumParts.Prs3d_DatumParts_YAxis
Prs3d_DatumParts_ZAxis = Prs3d_DatumParts.Prs3d_DatumParts_ZAxis
Prs3d_DatumParts_XArrow = Prs3d_DatumParts.Prs3d_DatumParts_XArrow
Prs3d_DatumParts_YArrow = Prs3d_DatumParts.Prs3d_DatumParts_YArrow
Prs3d_DatumParts_ZArrow = Prs3d_DatumParts.Prs3d_DatumParts_ZArrow
Prs3d_DatumParts_XOYAxis = Prs3d_DatumParts.Prs3d_DatumParts_XOYAxis
Prs3d_DatumParts_YOZAxis = Prs3d_DatumParts.Prs3d_DatumParts_YOZAxis
Prs3d_DatumParts_XOZAxis = Prs3d_DatumParts.Prs3d_DatumParts_XOZAxis
Prs3d_DatumParts_None = Prs3d_DatumParts.Prs3d_DatumParts_None
Prs3d_DP_Origin = Prs3d_DatumParts.Prs3d_DP_Origin
Prs3d_DP_XAxis = Prs3d_DatumParts.Prs3d_DP_XAxis
Prs3d_DP_YAxis = Prs3d_DatumParts.Prs3d_DP_YAxis
Prs3d_DP_ZAxis = Prs3d_DatumParts.Prs3d_DP_ZAxis
Prs3d_DP_XArrow = Prs3d_DatumParts.Prs3d_DP_XArrow
Prs3d_DP_YArrow = Prs3d_DatumParts.Prs3d_DP_YArrow
Prs3d_DP_ZArrow = Prs3d_DatumParts.Prs3d_DP_ZArrow
Prs3d_DP_XOYAxis = Prs3d_DatumParts.Prs3d_DP_XOYAxis
Prs3d_DP_YOZAxis = Prs3d_DatumParts.Prs3d_DP_YOZAxis
Prs3d_DP_XOZAxis = Prs3d_DatumParts.Prs3d_DP_XOZAxis
Prs3d_DP_None = Prs3d_DatumParts.Prs3d_DP_None


class Prs3d_DimensionArrowOrientation(IntEnum):
    Prs3d_DAO_Internal: int = ...
    Prs3d_DAO_External: int = ...
    Prs3d_DAO_Fit: int = ...

Prs3d_DAO_Internal = Prs3d_DimensionArrowOrientation.Prs3d_DAO_Internal
Prs3d_DAO_External = Prs3d_DimensionArrowOrientation.Prs3d_DAO_External
Prs3d_DAO_Fit = Prs3d_DimensionArrowOrientation.Prs3d_DAO_Fit

class Prs3d_DimensionTextHorizontalPosition(IntEnum):
    Prs3d_DTHP_Left: int = ...
    Prs3d_DTHP_Right: int = ...
    Prs3d_DTHP_Center: int = ...
    Prs3d_DTHP_Fit: int = ...

Prs3d_DTHP_Left = Prs3d_DimensionTextHorizontalPosition.Prs3d_DTHP_Left
Prs3d_DTHP_Right = Prs3d_DimensionTextHorizontalPosition.Prs3d_DTHP_Right
Prs3d_DTHP_Center = Prs3d_DimensionTextHorizontalPosition.Prs3d_DTHP_Center
Prs3d_DTHP_Fit = Prs3d_DimensionTextHorizontalPosition.Prs3d_DTHP_Fit

class Prs3d_DimensionTextVerticalPosition(IntEnum):
    Prs3d_DTVP_Above: int = ...
    Prs3d_DTVP_Below: int = ...
    Prs3d_DTVP_Center: int = ...

Prs3d_DTVP_Above = Prs3d_DimensionTextVerticalPosition.Prs3d_DTVP_Above
Prs3d_DTVP_Below = Prs3d_DimensionTextVerticalPosition.Prs3d_DTVP_Below
Prs3d_DTVP_Center = Prs3d_DimensionTextVerticalPosition.Prs3d_DTVP_Center

class Prs3d_TypeOfHLR(IntEnum):
    Prs3d_TOH_NotSet: int = ...
    Prs3d_TOH_PolyAlgo: int = ...
    Prs3d_TOH_Algo: int = ...

Prs3d_TOH_NotSet = Prs3d_TypeOfHLR.Prs3d_TOH_NotSet
Prs3d_TOH_PolyAlgo = Prs3d_TypeOfHLR.Prs3d_TOH_PolyAlgo
Prs3d_TOH_Algo = Prs3d_TypeOfHLR.Prs3d_TOH_Algo

class Prs3d_TypeOfHighlight(IntEnum):
    Prs3d_TypeOfHighlight_None: int = ...
    Prs3d_TypeOfHighlight_Selected: int = ...
    Prs3d_TypeOfHighlight_Dynamic: int = ...
    Prs3d_TypeOfHighlight_LocalSelected: int = ...
    Prs3d_TypeOfHighlight_LocalDynamic: int = ...
    Prs3d_TypeOfHighlight_SubIntensity: int = ...
    Prs3d_TypeOfHighlight_NB: int = ...

Prs3d_TypeOfHighlight_None = Prs3d_TypeOfHighlight.Prs3d_TypeOfHighlight_None
Prs3d_TypeOfHighlight_Selected = Prs3d_TypeOfHighlight.Prs3d_TypeOfHighlight_Selected
Prs3d_TypeOfHighlight_Dynamic = Prs3d_TypeOfHighlight.Prs3d_TypeOfHighlight_Dynamic
Prs3d_TypeOfHighlight_LocalSelected = Prs3d_TypeOfHighlight.Prs3d_TypeOfHighlight_LocalSelected
Prs3d_TypeOfHighlight_LocalDynamic = Prs3d_TypeOfHighlight.Prs3d_TypeOfHighlight_LocalDynamic
Prs3d_TypeOfHighlight_SubIntensity = Prs3d_TypeOfHighlight.Prs3d_TypeOfHighlight_SubIntensity
Prs3d_TypeOfHighlight_NB = Prs3d_TypeOfHighlight.Prs3d_TypeOfHighlight_NB

class Prs3d_TypeOfLinePicking(IntEnum):
    Prs3d_TOLP_Point: int = ...
    Prs3d_TOLP_Segment: int = ...

Prs3d_TOLP_Point = Prs3d_TypeOfLinePicking.Prs3d_TOLP_Point
Prs3d_TOLP_Segment = Prs3d_TypeOfLinePicking.Prs3d_TOLP_Segment

class Prs3d_VertexDrawMode(IntEnum):
    Prs3d_VDM_Isolated: int = ...
    Prs3d_VDM_All: int = ...
    Prs3d_VDM_Inherited: int = ...

Prs3d_VDM_Isolated = Prs3d_VertexDrawMode.Prs3d_VDM_Isolated
Prs3d_VDM_All = Prs3d_VertexDrawMode.Prs3d_VDM_All
Prs3d_VDM_Inherited = Prs3d_VertexDrawMode.Prs3d_VDM_Inherited

class prs3d:
    @staticmethod
    def AddFreeEdges(theSegments: TColgp_SequenceOfPnt, thePolyTri: Poly_Triangulation, theLocation: gp_Trsf) -> None: ...
    @staticmethod
    def AddPrimitivesGroup(thePrs: Prs3d_Presentation, theAspect: Prs3d_LineAspect, thePolylines: Prs3d_NListOfSequenceOfPnt) -> None: ...
    @overload
    @staticmethod
    def GetDeflection(theBndMin: Graphic3d_Vec3d, theBndMax: Graphic3d_Vec3d, theDeviationCoefficient: float) -> float: ...
    @overload
    @staticmethod
    def GetDeflection(theBndBox: Bnd_Box, theDeviationCoefficient: float, theMaximalChordialDeviation: float) -> float: ...
    @staticmethod
    def MatchSegment(X: float, Y: float, Z: float, aDistance: float, p1: gp_Pnt, p2: gp_Pnt) -> Tuple[bool, float]: ...
    @staticmethod
    def PrimitivesFromPolylines(thePoints: Prs3d_NListOfSequenceOfPnt) -> Graphic3d_ArrayOfPrimitives: ...

class Prs3d_Arrow:
    @staticmethod
    def Draw(theGroup: Graphic3d_Group, theLocation: gp_Pnt, theDirection: gp_Dir, theAngle: float, theLength: float) -> None: ...
    @staticmethod
    def DrawSegments(theLocation: gp_Pnt, theDir: gp_Dir, theAngle: float, theLength: float, theNbSegments: int) -> Graphic3d_ArrayOfSegments: ...
    @staticmethod
    def DrawShaded(theAxis: gp_Ax1, theTubeRadius: float, theAxisLength: float, theConeRadius: float, theConeLength: float, theNbFacettes: int) -> Graphic3d_ArrayOfTriangles: ...

class Prs3d_BasicAspect(Standard_Transient):
    pass

class Prs3d_DimensionUnits:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, theUnits: Prs3d_DimensionUnits) -> None: ...
    def GetAngleUnits(self) -> str: ...
    def GetLengthUnits(self) -> str: ...
    def SetAngleUnits(self, theUnits: str) -> None: ...
    def SetLengthUnits(self, theUnits: str) -> None: ...

class Prs3d_Drawer(Graphic3d_PresentationAttributes):
    def __init__(self) -> None: ...
    def ArrowAspect(self) -> Prs3d_ArrowAspect: ...
    def ClearLocalAttributes(self) -> None: ...
    def DatumAspect(self) -> Prs3d_DatumAspect: ...
    def DeviationAngle(self) -> float: ...
    def DeviationCoefficient(self) -> float: ...
    def DimAngleDisplayUnits(self) -> str: ...
    def DimAngleModelUnits(self) -> str: ...
    def DimLengthDisplayUnits(self) -> str: ...
    def DimLengthModelUnits(self) -> str: ...
    def DimensionAspect(self) -> Prs3d_DimensionAspect: ...
    def DisableDrawHiddenLine(self) -> None: ...
    def Discretisation(self) -> int: ...
    def DrawHiddenLine(self) -> bool: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def EnableDrawHiddenLine(self) -> None: ...
    def FaceBoundaryAspect(self) -> Prs3d_LineAspect: ...
    def FaceBoundaryDraw(self) -> bool: ...
    def FaceBoundaryUpperContinuity(self) -> GeomAbs_Shape: ...
    def FreeBoundaryAspect(self) -> Prs3d_LineAspect: ...
    def FreeBoundaryDraw(self) -> bool: ...
    def HLRAngle(self) -> float: ...
    def HasLink(self) -> bool: ...
    def HasOwnArrowAspect(self) -> bool: ...
    def HasOwnDatumAspect(self) -> bool: ...
    def HasOwnDeviationAngle(self) -> bool: ...
    def HasOwnDeviationCoefficient(self) -> bool: ...
    def HasOwnDimAngleDisplayUnits(self) -> bool: ...
    def HasOwnDimAngleModelUnits(self) -> bool: ...
    def HasOwnDimLengthDisplayUnits(self) -> bool: ...
    def HasOwnDimLengthModelUnits(self) -> bool: ...
    def HasOwnDimensionAspect(self) -> bool: ...
    def HasOwnDiscretisation(self) -> bool: ...
    def HasOwnDrawHiddenLine(self) -> bool: ...
    def HasOwnFaceBoundaryAspect(self) -> bool: ...
    def HasOwnFaceBoundaryDraw(self) -> bool: ...
    def HasOwnFaceBoundaryUpperContinuity(self) -> bool: ...
    def HasOwnFreeBoundaryAspect(self) -> bool: ...
    def HasOwnFreeBoundaryDraw(self) -> bool: ...
    def HasOwnHLRDeviationAngle(self) -> bool: ...
    def HasOwnHiddenLineAspect(self) -> bool: ...
    def HasOwnIsAutoTriangulation(self) -> bool: ...
    def HasOwnIsoOnPlane(self) -> bool: ...
    def HasOwnIsoOnTriangulation(self) -> bool: ...
    def HasOwnLineArrowDraw(self) -> bool: ...
    def HasOwnLineAspect(self) -> bool: ...
    def HasOwnMaximalChordialDeviation(self) -> bool: ...
    def HasOwnMaximalParameterValue(self) -> bool: ...
    def HasOwnPlaneAspect(self) -> bool: ...
    def HasOwnPointAspect(self) -> bool: ...
    def HasOwnSectionAspect(self) -> bool: ...
    def HasOwnSeenLineAspect(self) -> bool: ...
    def HasOwnShadingAspect(self) -> bool: ...
    def HasOwnTextAspect(self) -> bool: ...
    def HasOwnTypeOfDeflection(self) -> bool: ...
    def HasOwnTypeOfHLR(self) -> bool: ...
    def HasOwnUIsoAspect(self) -> bool: ...
    def HasOwnUnFreeBoundaryAspect(self) -> bool: ...
    def HasOwnUnFreeBoundaryDraw(self) -> bool: ...
    def HasOwnVIsoAspect(self) -> bool: ...
    def HasOwnVectorAspect(self) -> bool: ...
    def HasOwnVertexDrawMode(self) -> bool: ...
    def HasOwnWireAspect(self) -> bool: ...
    def HasOwnWireDraw(self) -> bool: ...
    def HiddenLineAspect(self) -> Prs3d_LineAspect: ...
    def IsAutoTriangulation(self) -> bool: ...
    def IsoOnPlane(self) -> bool: ...
    def IsoOnTriangulation(self) -> bool: ...
    def LineArrowDraw(self) -> bool: ...
    def LineAspect(self) -> Prs3d_LineAspect: ...
    @overload
    def Link(self) -> Prs3d_Drawer: ...
    @overload
    def Link(self, theDrawer: Prs3d_Drawer) -> None: ...
    def MaximalChordialDeviation(self) -> float: ...
    def MaximalParameterValue(self) -> float: ...
    def PlaneAspect(self) -> Prs3d_PlaneAspect: ...
    def PointAspect(self) -> Prs3d_PointAspect: ...
    def PreviousDeviationAngle(self) -> float: ...
    def PreviousDeviationCoefficient(self) -> float: ...
    def PreviousHLRDeviationAngle(self) -> float: ...
    def SectionAspect(self) -> Prs3d_LineAspect: ...
    def SeenLineAspect(self) -> Prs3d_LineAspect: ...
    def SetArrowAspect(self, theAspect: Prs3d_ArrowAspect) -> None: ...
    def SetAutoTriangulation(self, theIsEnabled: bool) -> None: ...
    def SetDatumAspect(self, theAspect: Prs3d_DatumAspect) -> None: ...
    @overload
    def SetDeviationAngle(self, theAngle: float) -> None: ...
    @overload
    def SetDeviationAngle(self) -> None: ...
    @overload
    def SetDeviationCoefficient(self, theCoefficient: float) -> None: ...
    @overload
    def SetDeviationCoefficient(self) -> None: ...
    def SetDimAngleDisplayUnits(self, theUnits: str) -> None: ...
    def SetDimAngleModelUnits(self, theUnits: str) -> None: ...
    def SetDimLengthDisplayUnits(self, theUnits: str) -> None: ...
    def SetDimLengthModelUnits(self, theUnits: str) -> None: ...
    def SetDimensionAspect(self, theAspect: Prs3d_DimensionAspect) -> None: ...
    def SetDiscretisation(self, theValue: int) -> None: ...
    def SetFaceBoundaryAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetFaceBoundaryDraw(self, theIsEnabled: bool) -> None: ...
    def SetFaceBoundaryUpperContinuity(self, theMostAllowedEdgeClass: GeomAbs_Shape) -> None: ...
    def SetFreeBoundaryAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetFreeBoundaryDraw(self, theIsEnabled: bool) -> None: ...
    @overload
    def SetHLRAngle(self, theAngle: float) -> None: ...
    @overload
    def SetHLRAngle(self) -> None: ...
    def SetHiddenLineAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetIsoOnPlane(self, theIsEnabled: bool) -> None: ...
    def SetIsoOnTriangulation(self, theToEnable: bool) -> None: ...
    def SetLineArrowDraw(self, theIsEnabled: bool) -> None: ...
    def SetLineAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetLink(self, theDrawer: Prs3d_Drawer) -> None: ...
    def SetMaximalChordialDeviation(self, theChordialDeviation: float) -> None: ...
    def SetMaximalParameterValue(self, theValue: float) -> None: ...
    def SetOwnDatumAspects(self, theDefaults: Optional[Prs3d_Drawer] = Prs3d_Drawer()) -> bool: ...
    def SetOwnLineAspects(self, theDefaults: Optional[Prs3d_Drawer] = Prs3d_Drawer()) -> bool: ...
    def SetPlaneAspect(self, theAspect: Prs3d_PlaneAspect) -> None: ...
    def SetPointAspect(self, theAspect: Prs3d_PointAspect) -> None: ...
    def SetSectionAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetSeenLineAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetShaderProgram(self, theProgram: Graphic3d_ShaderProgram, theAspect: Graphic3d_GroupAspect, theToOverrideDefaults: Optional[bool] = false) -> bool: ...
    def SetShadingAspect(self, theAspect: Prs3d_ShadingAspect) -> None: ...
    def SetShadingModel(self, theModel: Graphic3d_TypeOfShadingModel, theToOverrideDefaults: Optional[bool] = false) -> bool: ...
    def SetTextAspect(self, theAspect: Prs3d_TextAspect) -> None: ...
    def SetTypeOfDeflection(self, theTypeOfDeflection: Aspect_TypeOfDeflection) -> None: ...
    def SetTypeOfHLR(self, theTypeOfHLR: Prs3d_TypeOfHLR) -> None: ...
    def SetUIsoAspect(self, theAspect: Prs3d_IsoAspect) -> None: ...
    def SetUnFreeBoundaryAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetUnFreeBoundaryDraw(self, theIsEnabled: bool) -> None: ...
    def SetVIsoAspect(self, theAspect: Prs3d_IsoAspect) -> None: ...
    def SetVectorAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetVertexDrawMode(self, theMode: Prs3d_VertexDrawMode) -> None: ...
    def SetWireAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetWireDraw(self, theIsEnabled: bool) -> None: ...
    def SetupOwnDefaults(self) -> None: ...
    def SetupOwnFaceBoundaryAspect(self, theDefaults: Optional[Prs3d_Drawer] = Prs3d_Drawer()) -> bool: ...
    def SetupOwnPointAspect(self, theDefaults: Optional[Prs3d_Drawer] = Prs3d_Drawer()) -> bool: ...
    def SetupOwnShadingAspect(self, theDefaults: Optional[Prs3d_Drawer] = Prs3d_Drawer()) -> bool: ...
    def ShadingAspect(self) -> Prs3d_ShadingAspect: ...
    def TextAspect(self) -> Prs3d_TextAspect: ...
    def TypeOfDeflection(self) -> Aspect_TypeOfDeflection: ...
    def TypeOfHLR(self) -> Prs3d_TypeOfHLR: ...
    def UIsoAspect(self) -> Prs3d_IsoAspect: ...
    def UnFreeBoundaryAspect(self) -> Prs3d_LineAspect: ...
    def UnFreeBoundaryDraw(self) -> bool: ...
    def UnsetFaceBoundaryUpperContinuity(self) -> None: ...
    def UnsetOwnDimAngleDisplayUnits(self) -> None: ...
    def UnsetOwnDimAngleModelUnits(self) -> None: ...
    def UnsetOwnDimLengthDisplayUnits(self) -> None: ...
    def UnsetOwnDimLengthModelUnits(self) -> None: ...
    def UnsetOwnDiscretisation(self) -> None: ...
    def UnsetOwnDrawHiddenLine(self) -> None: ...
    def UnsetOwnFaceBoundaryDraw(self) -> None: ...
    def UnsetOwnFreeBoundaryDraw(self) -> None: ...
    def UnsetOwnIsAutoTriangulation(self) -> None: ...
    def UnsetOwnIsoOnPlane(self) -> None: ...
    def UnsetOwnIsoOnTriangulation(self) -> None: ...
    def UnsetOwnLineArrowDraw(self) -> None: ...
    def UnsetOwnMaximalChordialDeviation(self) -> None: ...
    def UnsetOwnMaximalParameterValue(self) -> None: ...
    def UnsetOwnTypeOfDeflection(self) -> None: ...
    def UnsetOwnUnFreeBoundaryDraw(self) -> None: ...
    def UnsetOwnWireDraw(self) -> None: ...
    def UpdatePreviousDeviationAngle(self) -> None: ...
    def UpdatePreviousDeviationCoefficient(self) -> None: ...
    def VIsoAspect(self) -> Prs3d_IsoAspect: ...
    def VectorAspect(self) -> Prs3d_LineAspect: ...
    def VertexDrawMode(self) -> Prs3d_VertexDrawMode: ...
    def WireAspect(self) -> Prs3d_LineAspect: ...
    def WireDraw(self) -> bool: ...

class Prs3d_Point:
    pass

class Prs3d_PresentationShadow(Graphic3d_Structure):
    def __init__(self, theViewer: Graphic3d_StructureManager, thePrs: Graphic3d_Structure) -> None: ...
    def CalculateBoundBox(self) -> None: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def ParentAffinity(self) -> Graphic3d_ViewAffinity: ...
    def ParentId(self) -> int: ...

class Prs3d_Root:
    @staticmethod
    def CurrentGroup(thePrs3d: Prs3d_Presentation) -> Graphic3d_Group: ...
    @staticmethod
    def NewGroup(thePrs3d: Prs3d_Presentation) -> Graphic3d_Group: ...

class Prs3d_Text:
    @overload
    @staticmethod
    def Draw(theGroup: Graphic3d_Group, theAspect: Prs3d_TextAspect, theText: str, theAttachmentPoint: gp_Pnt) -> Graphic3d_Text: ...
    @overload
    @staticmethod
    def Draw(theGroup: Graphic3d_Group, theAspect: Prs3d_TextAspect, theText: str, theOrientation: gp_Ax2, theHasOwnAnchor: Optional[bool] = True) -> Graphic3d_Text: ...

class Prs3d_ToolQuadric:
    def CreatePolyTriangulation(self, theTrsf: gp_Trsf) -> Poly_Triangulation: ...
    def CreateTriangulation(self, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...
    @overload
    def FillArray(self, theArray: Graphic3d_ArrayOfTriangles, theTrsf: gp_Trsf) -> None: ...
    @overload
    def FillArray(self, theArray: Graphic3d_ArrayOfTriangles, theTriangulation: Poly_Triangulation, theTrsf: gp_Trsf) -> None: ...
    @overload
    @staticmethod
    def TrianglesNb(theSlicesNb: int, theStacksNb: int) -> int: ...
    @overload
    def TrianglesNb(self) -> int: ...
    @overload
    @staticmethod
    def VerticesNb(theSlicesNb: int, theStacksNb: int, theIsIndexed: Optional[bool] = True) -> int: ...
    @overload
    def VerticesNb(self, theIsIndexed: Optional[bool] = true) -> int: ...

class Prs3d_ArrowAspect(Prs3d_BasicAspect):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, anAngle: float, aLength: float) -> None: ...
    @overload
    def __init__(self, theAspect: Graphic3d_AspectLine3d) -> None: ...
    def Angle(self) -> float: ...
    def Aspect(self) -> Graphic3d_AspectLine3d: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def IsZoomable(self) -> bool: ...
    def Length(self) -> float: ...
    def SetAngle(self, anAngle: float) -> None: ...
    def SetAspect(self, theAspect: Graphic3d_AspectLine3d) -> None: ...
    def SetColor(self, theColor: Quantity_Color) -> None: ...
    def SetLength(self, theLength: float) -> None: ...
    def SetZoomable(self, theIsZoomable: bool) -> None: ...

class Prs3d_BndBox(Prs3d_Root):
    @overload
    @staticmethod
    def Add(thePresentation: Prs3d_Presentation, theBndBox: Bnd_Box, theDrawer: Prs3d_Drawer) -> None: ...
    @overload
    @staticmethod
    def Add(thePresentation: Prs3d_Presentation, theBndBox: Bnd_OBB, theDrawer: Prs3d_Drawer) -> None: ...
    @overload
    @staticmethod
    def FillSegments(theBox: Bnd_OBB) -> Graphic3d_ArrayOfSegments: ...
    @overload
    @staticmethod
    def FillSegments(theBox: Bnd_Box) -> Graphic3d_ArrayOfSegments: ...
    @overload
    @staticmethod
    def FillSegments(theSegments: Graphic3d_ArrayOfSegments, theBox: Bnd_OBB) -> None: ...
    @overload
    @staticmethod
    def FillSegments(theSegments: Graphic3d_ArrayOfSegments, theBox: Bnd_Box) -> None: ...
    @staticmethod
    def fillSegments(theSegments: Graphic3d_ArrayOfSegments, theBox: gp_Pnt) -> None: ...

class Prs3d_DatumAspect(Prs3d_BasicAspect):
    def __init__(self) -> None: ...
    def ArrowAspect(self) -> Prs3d_ArrowAspect: ...
    @staticmethod
    def ArrowPartForAxis(thePart: Prs3d_DatumParts) -> Prs3d_DatumParts: ...
    def Attribute(self, theType: Prs3d_DatumAttribute) -> float: ...
    def AxisLength(self, thePart: Prs3d_DatumParts) -> float: ...
    def CopyAspectsFrom(self, theOther: Prs3d_DatumAspect) -> None: ...
    def DatumAxes(self) -> Prs3d_DatumAxes: ...
    def DrawDatumPart(self, thePart: Prs3d_DatumParts) -> bool: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def LineAspect(self, thePart: Prs3d_DatumParts) -> Prs3d_LineAspect: ...
    def PointAspect(self) -> Prs3d_PointAspect: ...
    def SetArrowAspect(self, theAspect: Prs3d_ArrowAspect) -> None: ...
    def SetAttribute(self, theType: Prs3d_DatumAttribute, theValue: float) -> None: ...
    def SetAxisLength(self, theL1: float, theL2: float, theL3: float) -> None: ...
    def SetDrawArrows(self, theToDraw: bool) -> None: ...
    def SetDrawDatumAxes(self, theType: Prs3d_DatumAxes) -> None: ...
    def SetDrawLabels(self, theToDraw: bool) -> None: ...
    def SetPointAspect(self, theAspect: Prs3d_PointAspect) -> None: ...
    def SetTextAspect(self, theTextAspect: Prs3d_TextAspect) -> None: ...
    def SetToDrawLabels(self, theToDraw: bool) -> None: ...
    def ShadingAspect(self, thePart: Prs3d_DatumParts) -> Prs3d_ShadingAspect: ...
    @overload
    def TextAspect(self, thePart: Prs3d_DatumParts) -> Prs3d_TextAspect: ...
    @overload
    def TextAspect(self) -> Prs3d_TextAspect: ...
    def ToDrawArrows(self) -> bool: ...
    def ToDrawLabels(self) -> bool: ...

class Prs3d_DimensionAspect(Prs3d_BasicAspect):
    def __init__(self) -> None: ...
    def ArrowAspect(self) -> Prs3d_ArrowAspect: ...
    def ArrowOrientation(self) -> Prs3d_DimensionArrowOrientation: ...
    def ArrowTailSize(self) -> float: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def ExtensionSize(self) -> float: ...
    def IsArrows3d(self) -> bool: ...
    def IsText3d(self) -> bool: ...
    def IsTextShaded(self) -> bool: ...
    def IsUnitsDisplayed(self) -> bool: ...
    def LineAspect(self) -> Prs3d_LineAspect: ...
    def MakeArrows3d(self, theIsArrows3d: bool) -> None: ...
    def MakeText3d(self, isText3d: bool) -> None: ...
    def MakeTextShaded(self, theIsTextShaded: bool) -> None: ...
    def MakeUnitsDisplayed(self, theIsDisplayed: bool) -> None: ...
    def SetArrowAspect(self, theAspect: Prs3d_ArrowAspect) -> None: ...
    def SetArrowOrientation(self, theArrowOrient: Prs3d_DimensionArrowOrientation) -> None: ...
    def SetArrowTailSize(self, theSize: float) -> None: ...
    def SetCommonColor(self, theColor: Quantity_Color) -> None: ...
    def SetExtensionSize(self, theSize: float) -> None: ...
    def SetLineAspect(self, theAspect: Prs3d_LineAspect) -> None: ...
    def SetTextAspect(self, theAspect: Prs3d_TextAspect) -> None: ...
    def SetTextHorizontalPosition(self, thePosition: Prs3d_DimensionTextHorizontalPosition) -> None: ...
    def SetTextVerticalPosition(self, thePosition: Prs3d_DimensionTextVerticalPosition) -> None: ...
    def SetValueStringFormat(self, theFormat: str) -> None: ...
    def TextAspect(self) -> Prs3d_TextAspect: ...
    def TextHorizontalPosition(self) -> Prs3d_DimensionTextHorizontalPosition: ...
    def TextVerticalPosition(self) -> Prs3d_DimensionTextVerticalPosition: ...
    def ValueStringFormat(self) -> str: ...

class Prs3d_LineAspect(Prs3d_BasicAspect):
    @overload
    def __init__(self, theColor: Quantity_Color, theType: Aspect_TypeOfLine, theWidth: float) -> None: ...
    @overload
    def __init__(self, theAspect: Graphic3d_AspectLine3d) -> None: ...
    def Aspect(self) -> Graphic3d_AspectLine3d: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def SetAspect(self, theAspect: Graphic3d_AspectLine3d) -> None: ...
    def SetColor(self, theColor: Quantity_Color) -> None: ...
    def SetTypeOfLine(self, theType: Aspect_TypeOfLine) -> None: ...
    def SetWidth(self, theWidth: float) -> None: ...

class Prs3d_PlaneAspect(Prs3d_BasicAspect):
    def __init__(self) -> None: ...
    def ArrowAspect(self) -> Prs3d_LineAspect: ...
    def ArrowsAngle(self) -> float: ...
    def ArrowsLength(self) -> float: ...
    def ArrowsSize(self) -> float: ...
    def DisplayCenterArrow(self) -> bool: ...
    def DisplayEdges(self) -> bool: ...
    def DisplayEdgesArrows(self) -> bool: ...
    def DisplayIso(self) -> bool: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def EdgesAspect(self) -> Prs3d_LineAspect: ...
    def IsoAspect(self) -> Prs3d_LineAspect: ...
    def IsoDistance(self) -> float: ...
    def PlaneXLength(self) -> float: ...
    def PlaneYLength(self) -> float: ...
    def SetArrowsAngle(self, theAngle: float) -> None: ...
    def SetArrowsLength(self, theLength: float) -> None: ...
    def SetArrowsSize(self, theSize: float) -> None: ...
    def SetDisplayCenterArrow(self, theToDraw: bool) -> None: ...
    def SetDisplayEdges(self, theToDraw: bool) -> None: ...
    def SetDisplayEdgesArrows(self, theToDraw: bool) -> None: ...
    def SetDisplayIso(self, theToDraw: bool) -> None: ...
    def SetIsoDistance(self, theL: float) -> None: ...
    def SetPlaneLength(self, theLX: float, theLY: float) -> None: ...

class Prs3d_PointAspect(Prs3d_BasicAspect):
    @overload
    def __init__(self, theType: Aspect_TypeOfMarker, theColor: Quantity_Color, theScale: float) -> None: ...
    @overload
    def __init__(self, theColor: Quantity_Color, theWidth: int, theHeight: int, theTexture: TColStd_HArray1OfByte) -> None: ...
    @overload
    def __init__(self, theAspect: Graphic3d_AspectMarker3d) -> None: ...
    def Aspect(self) -> Graphic3d_AspectMarker3d: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def GetTexture(self) -> Graphic3d_MarkerImage: ...
    def GetTextureSize(self) -> Tuple[int, int]: ...
    def SetAspect(self, theAspect: Graphic3d_AspectMarker3d) -> None: ...
    def SetColor(self, theColor: Quantity_Color) -> None: ...
    def SetScale(self, theScale: float) -> None: ...
    def SetTypeOfMarker(self, theType: Aspect_TypeOfMarker) -> None: ...

class Prs3d_ShadingAspect(Prs3d_BasicAspect):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, theAspect: Graphic3d_AspectFillArea3d) -> None: ...
    def Aspect(self) -> Graphic3d_AspectFillArea3d: ...
    def Color(self, aModel: Optional[Aspect_TypeOfFacingModel] = Aspect_TOFM_FRONT_SIDE) -> Quantity_Color: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def Material(self, aModel: Optional[Aspect_TypeOfFacingModel] = Aspect_TOFM_FRONT_SIDE) -> Graphic3d_MaterialAspect: ...
    def SetAspect(self, theAspect: Graphic3d_AspectFillArea3d) -> None: ...
    def SetColor(self, aColor: Quantity_Color, aModel: Optional[Aspect_TypeOfFacingModel] = Aspect_TOFM_BOTH_SIDE) -> None: ...
    def SetMaterial(self, aMaterial: Graphic3d_MaterialAspect, aModel: Optional[Aspect_TypeOfFacingModel] = Aspect_TOFM_BOTH_SIDE) -> None: ...
    def SetTransparency(self, aValue: float, aModel: Optional[Aspect_TypeOfFacingModel] = Aspect_TOFM_BOTH_SIDE) -> None: ...
    def Transparency(self, aModel: Optional[Aspect_TypeOfFacingModel] = Aspect_TOFM_FRONT_SIDE) -> float: ...

class Prs3d_TextAspect(Prs3d_BasicAspect):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, theAspect: Graphic3d_AspectText3d) -> None: ...
    def Angle(self) -> float: ...
    def Aspect(self) -> Graphic3d_AspectText3d: ...
    def DumpJson(self, depth: Optional[int]=-1) -> str: ...
    def Height(self) -> float: ...
    def HorizontalJustification(self) -> Graphic3d_HorizontalTextAlignment: ...
    def Orientation(self) -> Graphic3d_TextPath: ...
    def SetAngle(self, theAngle: float) -> None: ...
    def SetAspect(self, theAspect: Graphic3d_AspectText3d) -> None: ...
    def SetColor(self, theColor: Quantity_Color) -> None: ...
    def SetFont(self, theFont: str) -> None: ...
    def SetHeight(self, theHeight: float) -> None: ...
    def SetHorizontalJustification(self, theJustification: Graphic3d_HorizontalTextAlignment) -> None: ...
    def SetOrientation(self, theOrientation: Graphic3d_TextPath) -> None: ...
    def SetVerticalJustification(self, theJustification: Graphic3d_VerticalTextAlignment) -> None: ...
    def VerticalJustification(self) -> Graphic3d_VerticalTextAlignment: ...

class Prs3d_ToolCylinder(Prs3d_ToolQuadric):
    def __init__(self, theBottomRad: float, theTopRad: float, theHeight: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @staticmethod
    def Create(theBottomRad: float, theTopRad: float, theHeight: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...

class Prs3d_ToolDisk(Prs3d_ToolQuadric):
    def __init__(self, theInnerRadius: float, theOuterRadius: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @staticmethod
    def Create(theInnerRadius: float, theOuterRadius: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...
    def SetAngleRange(self, theStartAngle: float, theEndAngle: float) -> None: ...

class Prs3d_ToolSector(Prs3d_ToolQuadric):
    def __init__(self, theRadius: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @staticmethod
    def Create(theRadius: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...

class Prs3d_ToolSphere(Prs3d_ToolQuadric):
    def __init__(self, theRadius: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @staticmethod
    def Create(theRadius: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...

class Prs3d_ToolTorus(Prs3d_ToolQuadric):
    @overload
    def __init__(self, theMajorRad: float, theMinorRad: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @overload
    def __init__(self, theMajorRad: float, theMinorRad: float, theAngle: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @overload
    def __init__(self, theMajorRad: float, theMinorRad: float, theAngle1: float, theAngle2: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @overload
    def __init__(self, theMajorRad: float, theMinorRad: float, theAngle1: float, theAngle2: float, theAngle: float, theNbSlices: int, theNbStacks: int) -> None: ...
    @overload
    @staticmethod
    def Create(theMajorRad: float, theMinorRad: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...
    @overload
    @staticmethod
    def Create(theMajorRad: float, theMinorRad: float, theAngle: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...
    @overload
    @staticmethod
    def Create(theMajorRad: float, theMinorRad: float, theAngle1: float, theAngle2: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...
    @overload
    @staticmethod
    def Create(theMajorRad: float, theMinorRad: float, theAngle1: float, theAngle2: float, theAngle: float, theNbSlices: int, theNbStacks: int, theTrsf: gp_Trsf) -> Graphic3d_ArrayOfTriangles: ...

class Prs3d_IsoAspect(Prs3d_LineAspect):
    def __init__(self, theColor: Quantity_Color, theType: Aspect_TypeOfLine, theWidth: float, theNumber: int) -> None: ...
    def Number(self) -> int: ...
    def SetNumber(self, theNumber: int) -> None: ...

#classnotwrapped
class Prs3d_ShapeTool: ...

# harray1 classes
# harray2 classes
# hsequence classes

