import java
import java.awt
import java.io
import java.lang
import typing



class AffineTransform(java.lang.Cloneable, java.io.Serializable):
    TYPE_IDENTITY: typing.ClassVar[int] = ...
    TYPE_TRANSLATION: typing.ClassVar[int] = ...
    TYPE_UNIFORM_SCALE: typing.ClassVar[int] = ...
    TYPE_GENERAL_SCALE: typing.ClassVar[int] = ...
    TYPE_MASK_SCALE: typing.ClassVar[int] = ...
    TYPE_FLIP: typing.ClassVar[int] = ...
    TYPE_QUADRANT_ROTATION: typing.ClassVar[int] = ...
    TYPE_GENERAL_ROTATION: typing.ClassVar[int] = ...
    TYPE_MASK_ROTATION: typing.ClassVar[int] = ...
    TYPE_GENERAL_TRANSFORM: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self): ...
    @typing.overload
    def __init__(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float): ...
    @typing.overload
    def __init__(self, doubleArray: typing.List[float]): ...
    @typing.overload
    def __init__(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float): ...
    @typing.overload
    def __init__(self, floatArray: typing.List[float]): ...
    @typing.overload
    def __init__(self, affineTransform: 'AffineTransform'): ...
    def clone(self) -> typing.Any: ...
    def concatenate(self, affineTransform: 'AffineTransform') -> None: ...
    def createInverse(self) -> 'AffineTransform': ...
    def createTransformedShape(self, shape: java.awt.Shape) -> java.awt.Shape: ...
    @typing.overload
    def deltaTransform(self, point2D: 'Point2D', point2D2: 'Point2D') -> 'Point2D': ...
    @typing.overload
    def deltaTransform(self, doubleArray: typing.List[float], int: int, doubleArray2: typing.List[float], int2: int, int3: int) -> None: ...
    def equals(self, object: typing.Any) -> bool: ...
    def getDeterminant(self) -> float: ...
    def getMatrix(self, doubleArray: typing.List[float]) -> None: ...
    @typing.overload
    @staticmethod
    def getQuadrantRotateInstance(int: int) -> 'AffineTransform': ...
    @typing.overload
    @staticmethod
    def getQuadrantRotateInstance(int: int, double: float, double2: float) -> 'AffineTransform': ...
    @typing.overload
    @staticmethod
    def getRotateInstance(double: float) -> 'AffineTransform': ...
    @typing.overload
    @staticmethod
    def getRotateInstance(double: float, double2: float) -> 'AffineTransform': ...
    @typing.overload
    @staticmethod
    def getRotateInstance(double: float, double2: float, double3: float) -> 'AffineTransform': ...
    @typing.overload
    @staticmethod
    def getRotateInstance(double: float, double2: float, double3: float, double4: float) -> 'AffineTransform': ...
    @staticmethod
    def getScaleInstance(double: float, double2: float) -> 'AffineTransform': ...
    def getScaleX(self) -> float: ...
    def getScaleY(self) -> float: ...
    @staticmethod
    def getShearInstance(double: float, double2: float) -> 'AffineTransform': ...
    def getShearX(self) -> float: ...
    def getShearY(self) -> float: ...
    @staticmethod
    def getTranslateInstance(double: float, double2: float) -> 'AffineTransform': ...
    def getTranslateX(self) -> float: ...
    def getTranslateY(self) -> float: ...
    def getType(self) -> int: ...
    def hashCode(self) -> int: ...
    @typing.overload
    def inverseTransform(self, point2D: 'Point2D', point2D2: 'Point2D') -> 'Point2D': ...
    @typing.overload
    def inverseTransform(self, doubleArray: typing.List[float], int: int, doubleArray2: typing.List[float], int2: int, int3: int) -> None: ...
    def invert(self) -> None: ...
    def isIdentity(self) -> bool: ...
    def preConcatenate(self, affineTransform: 'AffineTransform') -> None: ...
    @typing.overload
    def quadrantRotate(self, int: int) -> None: ...
    @typing.overload
    def quadrantRotate(self, int: int, double: float, double2: float) -> None: ...
    @typing.overload
    def rotate(self, double: float) -> None: ...
    @typing.overload
    def rotate(self, double: float, double2: float) -> None: ...
    @typing.overload
    def rotate(self, double: float, double2: float, double3: float) -> None: ...
    @typing.overload
    def rotate(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    def scale(self, double: float, double2: float) -> None: ...
    def setToIdentity(self) -> None: ...
    @typing.overload
    def setToQuadrantRotation(self, int: int) -> None: ...
    @typing.overload
    def setToQuadrantRotation(self, int: int, double: float, double2: float) -> None: ...
    @typing.overload
    def setToRotation(self, double: float) -> None: ...
    @typing.overload
    def setToRotation(self, double: float, double2: float) -> None: ...
    @typing.overload
    def setToRotation(self, double: float, double2: float, double3: float) -> None: ...
    @typing.overload
    def setToRotation(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    def setToScale(self, double: float, double2: float) -> None: ...
    def setToShear(self, double: float, double2: float) -> None: ...
    def setToTranslation(self, double: float, double2: float) -> None: ...
    @typing.overload
    def setTransform(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
    @typing.overload
    def setTransform(self, affineTransform: 'AffineTransform') -> None: ...
    def shear(self, double: float, double2: float) -> None: ...
    def toString(self) -> str: ...
    @typing.overload
    def transform(self, point2D: 'Point2D', point2D2: 'Point2D') -> 'Point2D': ...
    @typing.overload
    def transform(self, doubleArray: typing.List[float], int: int, doubleArray2: typing.List[float], int2: int, int3: int) -> None: ...
    @typing.overload
    def transform(self, doubleArray: typing.List[float], int: int, floatArray: typing.List[float], int2: int, int3: int) -> None: ...
    @typing.overload
    def transform(self, floatArray: typing.List[float], int: int, doubleArray: typing.List[float], int2: int, int3: int) -> None: ...
    @typing.overload
    def transform(self, floatArray: typing.List[float], int: int, floatArray2: typing.List[float], int2: int, int3: int) -> None: ...
    @typing.overload
    def transform(self, point2DArray: typing.List['Point2D'], int: int, point2DArray2: typing.List['Point2D'], int2: int, int3: int) -> None: ...
    def translate(self, double: float, double2: float) -> None: ...

class Area(java.awt.Shape, java.lang.Cloneable):
    @typing.overload
    def __init__(self): ...
    @typing.overload
    def __init__(self, shape: java.awt.Shape): ...
    def add(self, area: 'Area') -> None: ...
    def clone(self) -> typing.Any: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: 'Point2D') -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def createTransformedArea(self, affineTransform: AffineTransform) -> 'Area': ...
    @typing.overload
    def equals(self, area: 'Area') -> bool: ...
    @typing.overload
    def equals(self, object: typing.Any) -> bool: ...
    def exclusiveOr(self, area: 'Area') -> None: ...
    def getBounds(self) -> java.awt.Rectangle: ...
    def getBounds2D(self) -> 'Rectangle2D': ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> 'PathIterator': ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> 'PathIterator': ...
    def intersect(self, area: 'Area') -> None: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def isEmpty(self) -> bool: ...
    def isPolygonal(self) -> bool: ...
    def isRectangular(self) -> bool: ...
    def isSingular(self) -> bool: ...
    def reset(self) -> None: ...
    def subtract(self, area: 'Area') -> None: ...
    def transform(self, affineTransform: AffineTransform) -> None: ...

class Dimension2D(java.lang.Cloneable):
    def clone(self) -> typing.Any: ...
    def getHeight(self) -> float: ...
    def getWidth(self) -> float: ...
    @typing.overload
    def setSize(self, double: float, double2: float) -> None: ...
    @typing.overload
    def setSize(self, dimension2D: 'Dimension2D') -> None: ...

class IllegalPathStateException(java.lang.RuntimeException):
    @typing.overload
    def __init__(self): ...
    @typing.overload
    def __init__(self, string: str): ...

class NoninvertibleTransformException(java.lang.Exception):
    def __init__(self, string: str): ...

class PathIterator:
    WIND_EVEN_ODD: typing.ClassVar[int] = ...
    WIND_NON_ZERO: typing.ClassVar[int] = ...
    SEG_MOVETO: typing.ClassVar[int] = ...
    SEG_LINETO: typing.ClassVar[int] = ...
    SEG_QUADTO: typing.ClassVar[int] = ...
    SEG_CUBICTO: typing.ClassVar[int] = ...
    SEG_CLOSE: typing.ClassVar[int] = ...
    @typing.overload
    def currentSegment(self, doubleArray: typing.List[float]) -> int: ...
    @typing.overload
    def currentSegment(self, floatArray: typing.List[float]) -> int: ...
    def getWindingRule(self) -> int: ...
    def isDone(self) -> bool: ...
    def next(self) -> None: ...

class RectangularShape(java.awt.Shape, java.lang.Cloneable):
    def clone(self) -> typing.Any: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: 'Point2D') -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def getBounds(self) -> java.awt.Rectangle: ...
    def getCenterX(self) -> float: ...
    def getCenterY(self) -> float: ...
    def getFrame(self) -> 'Rectangle2D': ...
    def getHeight(self) -> float: ...
    def getMaxX(self) -> float: ...
    def getMaxY(self) -> float: ...
    def getMinX(self) -> float: ...
    def getMinY(self) -> float: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def getWidth(self) -> float: ...
    def getX(self) -> float: ...
    def getY(self) -> float: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def isEmpty(self) -> bool: ...
    @typing.overload
    def setFrame(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setFrame(self, point2D: 'Point2D', dimension2D: Dimension2D) -> None: ...
    @typing.overload
    def setFrame(self, rectangle2D: 'Rectangle2D') -> None: ...
    @typing.overload
    def setFrameFromCenter(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setFrameFromCenter(self, point2D: 'Point2D', point2D2: 'Point2D') -> None: ...
    @typing.overload
    def setFrameFromDiagonal(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setFrameFromDiagonal(self, point2D: 'Point2D', point2D2: 'Point2D') -> None: ...

class FlatteningPathIterator(PathIterator):
    @typing.overload
    def __init__(self, pathIterator: PathIterator, double: float): ...
    @typing.overload
    def __init__(self, pathIterator: PathIterator, double: float, int: int): ...
    @typing.overload
    def currentSegment(self, doubleArray: typing.List[float]) -> int: ...
    @typing.overload
    def currentSegment(self, floatArray: typing.List[float]) -> int: ...
    def getFlatness(self) -> float: ...
    def getRecursionLimit(self) -> int: ...
    def getWindingRule(self) -> int: ...
    def isDone(self) -> bool: ...
    def next(self) -> None: ...

class Arc2D(RectangularShape):
    OPEN: typing.ClassVar[int] = ...
    CHORD: typing.ClassVar[int] = ...
    PIE: typing.ClassVar[int] = ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    @typing.overload
    def contains(self, point2D: 'Point2D') -> bool: ...
    def containsAngle(self, double: float) -> bool: ...
    def equals(self, object: typing.Any) -> bool: ...
    def getAngleExtent(self) -> float: ...
    def getAngleStart(self) -> float: ...
    def getArcType(self) -> int: ...
    def getBounds2D(self) -> 'Rectangle2D': ...
    def getEndPoint(self) -> 'Point2D': ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def getStartPoint(self) -> 'Point2D': ...
    def hashCode(self) -> int: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def setAngleExtent(self, double: float) -> None: ...
    @typing.overload
    def setAngleStart(self, double: float) -> None: ...
    @typing.overload
    def setAngleStart(self, point2D: 'Point2D') -> None: ...
    @typing.overload
    def setAngles(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setAngles(self, point2D: 'Point2D', point2D2: 'Point2D') -> None: ...
    @typing.overload
    def setArc(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, int: int) -> None: ...
    @typing.overload
    def setArc(self, arc2D: 'Arc2D') -> None: ...
    @typing.overload
    def setArc(self, point2D: 'Point2D', dimension2D: Dimension2D, double: float, double2: float, int: int) -> None: ...
    @typing.overload
    def setArc(self, rectangle2D: 'Rectangle2D', double: float, double2: float, int: int) -> None: ...
    def setArcByCenter(self, double: float, double2: float, double3: float, double4: float, double5: float, int: int) -> None: ...
    def setArcByTangent(self, point2D: 'Point2D', point2D2: 'Point2D', point2D3: 'Point2D', double: float) -> None: ...
    def setArcType(self, int: int) -> None: ...
    @typing.overload
    def setFrame(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setFrame(self, point2D: 'Point2D', dimension2D: Dimension2D) -> None: ...
    @typing.overload
    def setFrame(self, rectangle2D: 'Rectangle2D') -> None: ...
    class Double(java.awt.geom.Arc2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        start: float = ...
        extent: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, int: int): ...
        @typing.overload
        def __init__(self, int: int): ...
        @typing.overload
        def __init__(self, rectangle2D: 'Rectangle2D', double: float, double2: float, int: int): ...
        def getAngleExtent(self) -> float: ...
        def getAngleStart(self) -> float: ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        def setAngleExtent(self, double: float) -> None: ...
        @typing.overload
        def setAngleStart(self, double: float) -> None: ...
        @typing.overload
        def setAngleStart(self, point2D: 'Point2D') -> None: ...
        @typing.overload
        def setArc(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, int: int) -> None: ...
        @typing.overload
        def setArc(self, arc2D: 'Arc2D') -> None: ...
        @typing.overload
        def setArc(self, point2D: 'Point2D', dimension2D: Dimension2D, double: float, double2: float, int: int) -> None: ...
        @typing.overload
        def setArc(self, rectangle2D: 'Rectangle2D', double: float, double2: float, int: int) -> None: ...
    class Float(java.awt.geom.Arc2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        start: float = ...
        extent: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float, int: int): ...
        @typing.overload
        def __init__(self, int: int): ...
        @typing.overload
        def __init__(self, rectangle2D: 'Rectangle2D', float: float, float2: float, int: int): ...
        def getAngleExtent(self) -> float: ...
        def getAngleStart(self) -> float: ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        def setAngleExtent(self, double: float) -> None: ...
        @typing.overload
        def setAngleStart(self, double: float) -> None: ...
        @typing.overload
        def setAngleStart(self, point2D: 'Point2D') -> None: ...
        @typing.overload
        def setArc(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, int: int) -> None: ...
        @typing.overload
        def setArc(self, arc2D: 'Arc2D') -> None: ...
        @typing.overload
        def setArc(self, point2D: 'Point2D', dimension2D: Dimension2D, double: float, double2: float, int: int) -> None: ...
        @typing.overload
        def setArc(self, rectangle2D: 'Rectangle2D', double: float, double2: float, int: int) -> None: ...

class CubicCurve2D(java.awt.Shape, java.lang.Cloneable):
    def clone(self) -> typing.Any: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: 'Point2D') -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def getBounds(self) -> java.awt.Rectangle: ...
    def getCtrlP1(self) -> 'Point2D': ...
    def getCtrlP2(self) -> 'Point2D': ...
    def getCtrlX1(self) -> float: ...
    def getCtrlX2(self) -> float: ...
    def getCtrlY1(self) -> float: ...
    def getCtrlY2(self) -> float: ...
    @typing.overload
    def getFlatness(self) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatness(double: float, double2: float, double3: float, double4: float, double5: float, double6: float, double7: float, double8: float) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatness(doubleArray: typing.List[float], int: int) -> float: ...
    @typing.overload
    def getFlatnessSq(self) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatnessSq(double: float, double2: float, double3: float, double4: float, double5: float, double6: float, double7: float, double8: float) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatnessSq(doubleArray: typing.List[float], int: int) -> float: ...
    def getP1(self) -> 'Point2D': ...
    def getP2(self) -> 'Point2D': ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def getX1(self) -> float: ...
    def getX2(self) -> float: ...
    def getY1(self) -> float: ...
    def getY2(self) -> float: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    @typing.overload
    def setCurve(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, double7: float, double8: float) -> None: ...
    @typing.overload
    def setCurve(self, doubleArray: typing.List[float], int: int) -> None: ...
    @typing.overload
    def setCurve(self, cubicCurve2D: 'CubicCurve2D') -> None: ...
    @typing.overload
    def setCurve(self, point2D: 'Point2D', point2D2: 'Point2D', point2D3: 'Point2D', point2D4: 'Point2D') -> None: ...
    @typing.overload
    def setCurve(self, point2DArray: typing.List['Point2D'], int: int) -> None: ...
    @typing.overload
    @staticmethod
    def solveCubic(doubleArray: typing.List[float]) -> int: ...
    @typing.overload
    @staticmethod
    def solveCubic(doubleArray: typing.List[float], doubleArray2: typing.List[float]) -> int: ...
    @typing.overload
    @staticmethod
    def subdivide(doubleArray: typing.List[float], int: int, doubleArray2: typing.List[float], int2: int, doubleArray3: typing.List[float], int3: int) -> None: ...
    @typing.overload
    @staticmethod
    def subdivide(cubicCurve2D: 'CubicCurve2D', cubicCurve2D2: 'CubicCurve2D', cubicCurve2D3: 'CubicCurve2D') -> None: ...
    @typing.overload
    def subdivide(self, cubicCurve2D: 'CubicCurve2D', cubicCurve2D2: 'CubicCurve2D') -> None: ...
    class Double(java.awt.geom.CubicCurve2D, java.io.Serializable):
        x1: float = ...
        y1: float = ...
        ctrlx1: float = ...
        ctrly1: float = ...
        ctrlx2: float = ...
        ctrly2: float = ...
        x2: float = ...
        y2: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, double7: float, double8: float): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getCtrlP1(self) -> 'Point2D': ...
        def getCtrlP2(self) -> 'Point2D': ...
        def getCtrlX1(self) -> float: ...
        def getCtrlX2(self) -> float: ...
        def getCtrlY1(self) -> float: ...
        def getCtrlY2(self) -> float: ...
        def getP1(self) -> 'Point2D': ...
        def getP2(self) -> 'Point2D': ...
        def getX1(self) -> float: ...
        def getX2(self) -> float: ...
        def getY1(self) -> float: ...
        def getY2(self) -> float: ...
        @typing.overload
        def setCurve(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, double7: float, double8: float) -> None: ...
        @typing.overload
        def setCurve(self, doubleArray: typing.List[float], int: int) -> None: ...
        @typing.overload
        def setCurve(self, cubicCurve2D: 'CubicCurve2D') -> None: ...
        @typing.overload
        def setCurve(self, point2D: 'Point2D', point2D2: 'Point2D', point2D3: 'Point2D', point2D4: 'Point2D') -> None: ...
        @typing.overload
        def setCurve(self, point2DArray: typing.List['Point2D'], int: int) -> None: ...
    class Float(java.awt.geom.CubicCurve2D, java.io.Serializable):
        x1: float = ...
        y1: float = ...
        ctrlx1: float = ...
        ctrly1: float = ...
        ctrlx2: float = ...
        ctrly2: float = ...
        x2: float = ...
        y2: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float, float7: float, float8: float): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getCtrlP1(self) -> 'Point2D': ...
        def getCtrlP2(self) -> 'Point2D': ...
        def getCtrlX1(self) -> float: ...
        def getCtrlX2(self) -> float: ...
        def getCtrlY1(self) -> float: ...
        def getCtrlY2(self) -> float: ...
        def getP1(self) -> 'Point2D': ...
        def getP2(self) -> 'Point2D': ...
        def getX1(self) -> float: ...
        def getX2(self) -> float: ...
        def getY1(self) -> float: ...
        def getY2(self) -> float: ...
        @typing.overload
        def setCurve(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float, double7: float, double8: float) -> None: ...
        @typing.overload
        def setCurve(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float, float7: float, float8: float) -> None: ...
        @typing.overload
        def setCurve(self, doubleArray: typing.List[float], int: int) -> None: ...
        @typing.overload
        def setCurve(self, cubicCurve2D: 'CubicCurve2D') -> None: ...
        @typing.overload
        def setCurve(self, point2D: 'Point2D', point2D2: 'Point2D', point2D3: 'Point2D', point2D4: 'Point2D') -> None: ...
        @typing.overload
        def setCurve(self, point2DArray: typing.List['Point2D'], int: int) -> None: ...

class Ellipse2D(RectangularShape):
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: 'Point2D') -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def equals(self, object: typing.Any) -> bool: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def hashCode(self) -> int: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    class Double(java.awt.geom.Ellipse2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float, double3: float, double4: float): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        @typing.overload
        def setFrame(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        @typing.overload
        def setFrame(self, point2D: 'Point2D', dimension2D: Dimension2D) -> None: ...
        @typing.overload
        def setFrame(self, rectangle2D: 'Rectangle2D') -> None: ...
    class Float(java.awt.geom.Ellipse2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float, float3: float, float4: float): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        @typing.overload
        def setFrame(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        @typing.overload
        def setFrame(self, float: float, float2: float, float3: float, float4: float) -> None: ...
        @typing.overload
        def setFrame(self, point2D: 'Point2D', dimension2D: Dimension2D) -> None: ...
        @typing.overload
        def setFrame(self, rectangle2D: 'Rectangle2D') -> None: ...

class GeneralPath(java.awt.geom.Path2D.Float):
    @typing.overload
    def __init__(self): ...
    @typing.overload
    def __init__(self, int: int): ...
    @typing.overload
    def __init__(self, int: int, int2: int): ...
    @typing.overload
    def __init__(self, shape: java.awt.Shape): ...

class Line2D(java.awt.Shape, java.lang.Cloneable):
    def clone(self) -> typing.Any: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: 'Point2D') -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def getBounds(self) -> java.awt.Rectangle: ...
    def getP1(self) -> 'Point2D': ...
    def getP2(self) -> 'Point2D': ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def getX1(self) -> float: ...
    def getX2(self) -> float: ...
    def getY1(self) -> float: ...
    def getY2(self) -> float: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    @typing.overload
    def intersectsLine(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersectsLine(self, line2D: 'Line2D') -> bool: ...
    @staticmethod
    def linesIntersect(double: float, double2: float, double3: float, double4: float, double5: float, double6: float, double7: float, double8: float) -> bool: ...
    @typing.overload
    def ptLineDist(self, double: float, double2: float) -> float: ...
    @typing.overload
    def ptLineDist(self, point2D: 'Point2D') -> float: ...
    @typing.overload
    @staticmethod
    def ptLineDist(double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> float: ...
    @typing.overload
    def ptLineDistSq(self, double: float, double2: float) -> float: ...
    @typing.overload
    def ptLineDistSq(self, point2D: 'Point2D') -> float: ...
    @typing.overload
    @staticmethod
    def ptLineDistSq(double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> float: ...
    @typing.overload
    def ptSegDist(self, double: float, double2: float) -> float: ...
    @typing.overload
    def ptSegDist(self, point2D: 'Point2D') -> float: ...
    @typing.overload
    @staticmethod
    def ptSegDist(double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> float: ...
    @typing.overload
    def ptSegDistSq(self, double: float, double2: float) -> float: ...
    @typing.overload
    def ptSegDistSq(self, point2D: 'Point2D') -> float: ...
    @typing.overload
    @staticmethod
    def ptSegDistSq(double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> float: ...
    @typing.overload
    def relativeCCW(self, double: float, double2: float) -> int: ...
    @typing.overload
    def relativeCCW(self, point2D: 'Point2D') -> int: ...
    @typing.overload
    @staticmethod
    def relativeCCW(double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> int: ...
    @typing.overload
    def setLine(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setLine(self, line2D: 'Line2D') -> None: ...
    @typing.overload
    def setLine(self, point2D: 'Point2D', point2D2: 'Point2D') -> None: ...
    class Double(java.awt.geom.Line2D, java.io.Serializable):
        x1: float = ...
        y1: float = ...
        x2: float = ...
        y2: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float, double3: float, double4: float): ...
        @typing.overload
        def __init__(self, point2D: 'Point2D', point2D2: 'Point2D'): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getP1(self) -> 'Point2D': ...
        def getP2(self) -> 'Point2D': ...
        def getX1(self) -> float: ...
        def getX2(self) -> float: ...
        def getY1(self) -> float: ...
        def getY2(self) -> float: ...
        @typing.overload
        def setLine(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        @typing.overload
        def setLine(self, line2D: 'Line2D') -> None: ...
        @typing.overload
        def setLine(self, point2D: 'Point2D', point2D2: 'Point2D') -> None: ...
    class Float(java.awt.geom.Line2D, java.io.Serializable):
        x1: float = ...
        y1: float = ...
        x2: float = ...
        y2: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float, float3: float, float4: float): ...
        @typing.overload
        def __init__(self, point2D: 'Point2D', point2D2: 'Point2D'): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getP1(self) -> 'Point2D': ...
        def getP2(self) -> 'Point2D': ...
        def getX1(self) -> float: ...
        def getX2(self) -> float: ...
        def getY1(self) -> float: ...
        def getY2(self) -> float: ...
        @typing.overload
        def setLine(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        @typing.overload
        def setLine(self, float: float, float2: float, float3: float, float4: float) -> None: ...
        @typing.overload
        def setLine(self, line2D: 'Line2D') -> None: ...
        @typing.overload
        def setLine(self, point2D: 'Point2D', point2D2: 'Point2D') -> None: ...

class Path2D(java.awt.Shape, java.lang.Cloneable):
    WIND_EVEN_ODD: typing.ClassVar[int] = ...
    WIND_NON_ZERO: typing.ClassVar[int] = ...
    @typing.overload
    def append(self, pathIterator: PathIterator, boolean: bool) -> None: ...
    @typing.overload
    def append(self, shape: java.awt.Shape, boolean: bool) -> None: ...
    def clone(self) -> typing.Any: ...
    def closePath(self) -> None: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: 'Point2D') -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    @typing.overload
    @staticmethod
    def contains(pathIterator: PathIterator, double: float, double2: float) -> bool: ...
    @typing.overload
    @staticmethod
    def contains(pathIterator: PathIterator, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    @staticmethod
    def contains(pathIterator: PathIterator, point2D: 'Point2D') -> bool: ...
    @typing.overload
    @staticmethod
    def contains(pathIterator: PathIterator, rectangle2D: 'Rectangle2D') -> bool: ...
    def createTransformedShape(self, affineTransform: AffineTransform) -> java.awt.Shape: ...
    def curveTo(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
    def getBounds(self) -> java.awt.Rectangle: ...
    def getCurrentPoint(self) -> 'Point2D': ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def getWindingRule(self) -> int: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    @typing.overload
    @staticmethod
    def intersects(pathIterator: PathIterator, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    @staticmethod
    def intersects(pathIterator: PathIterator, rectangle2D: 'Rectangle2D') -> bool: ...
    def lineTo(self, double: float, double2: float) -> None: ...
    def moveTo(self, double: float, double2: float) -> None: ...
    def quadTo(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    def reset(self) -> None: ...
    def setWindingRule(self, int: int) -> None: ...
    def transform(self, affineTransform: AffineTransform) -> None: ...
    def trimToSize(self) -> None: ...
    class Double(java.awt.geom.Path2D, java.io.Serializable):
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, int: int): ...
        @typing.overload
        def __init__(self, int: int, int2: int): ...
        @typing.overload
        def __init__(self, shape: java.awt.Shape): ...
        @typing.overload
        def __init__(self, shape: java.awt.Shape, affineTransform: AffineTransform): ...
        @typing.overload
        def append(self, pathIterator: PathIterator, boolean: bool) -> None: ...
        @typing.overload
        def append(self, shape: java.awt.Shape, boolean: bool) -> None: ...
        def clone(self) -> typing.Any: ...
        def curveTo(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        @typing.overload
        def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
        @typing.overload
        def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
        def lineTo(self, double: float, double2: float) -> None: ...
        def moveTo(self, double: float, double2: float) -> None: ...
        def quadTo(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        def transform(self, affineTransform: AffineTransform) -> None: ...
        def trimToSize(self) -> None: ...
    class Float(java.awt.geom.Path2D, java.io.Serializable):
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, int: int): ...
        @typing.overload
        def __init__(self, int: int, int2: int): ...
        @typing.overload
        def __init__(self, shape: java.awt.Shape): ...
        @typing.overload
        def __init__(self, shape: java.awt.Shape, affineTransform: AffineTransform): ...
        @typing.overload
        def append(self, pathIterator: PathIterator, boolean: bool) -> None: ...
        @typing.overload
        def append(self, shape: java.awt.Shape, boolean: bool) -> None: ...
        def clone(self) -> typing.Any: ...
        @typing.overload
        def curveTo(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
        @typing.overload
        def curveTo(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float) -> None: ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        @typing.overload
        def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
        @typing.overload
        def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
        @typing.overload
        def lineTo(self, double: float, double2: float) -> None: ...
        @typing.overload
        def lineTo(self, float: float, float2: float) -> None: ...
        @typing.overload
        def moveTo(self, double: float, double2: float) -> None: ...
        @typing.overload
        def moveTo(self, float: float, float2: float) -> None: ...
        @typing.overload
        def quadTo(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        @typing.overload
        def quadTo(self, float: float, float2: float, float3: float, float4: float) -> None: ...
        def transform(self, affineTransform: AffineTransform) -> None: ...
        def trimToSize(self) -> None: ...

class Point2D(java.lang.Cloneable):
    def clone(self) -> typing.Any: ...
    @typing.overload
    def distance(self, double: float, double2: float) -> float: ...
    @typing.overload
    def distance(self, point2D: 'Point2D') -> float: ...
    @typing.overload
    @staticmethod
    def distance(double: float, double2: float, double3: float, double4: float) -> float: ...
    @typing.overload
    def distanceSq(self, double: float, double2: float) -> float: ...
    @typing.overload
    def distanceSq(self, point2D: 'Point2D') -> float: ...
    @typing.overload
    @staticmethod
    def distanceSq(double: float, double2: float, double3: float, double4: float) -> float: ...
    def equals(self, object: typing.Any) -> bool: ...
    def getX(self) -> float: ...
    def getY(self) -> float: ...
    def hashCode(self) -> int: ...
    @typing.overload
    def setLocation(self, double: float, double2: float) -> None: ...
    @typing.overload
    def setLocation(self, point2D: 'Point2D') -> None: ...
    class Double(java.awt.geom.Point2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float): ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        @typing.overload
        def setLocation(self, double: float, double2: float) -> None: ...
        @typing.overload
        def setLocation(self, point2D: 'Point2D') -> None: ...
        def toString(self) -> str: ...
    class Float(java.awt.geom.Point2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float): ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        @typing.overload
        def setLocation(self, double: float, double2: float) -> None: ...
        @typing.overload
        def setLocation(self, float: float, float2: float) -> None: ...
        @typing.overload
        def setLocation(self, point2D: 'Point2D') -> None: ...
        def toString(self) -> str: ...

class QuadCurve2D(java.awt.Shape, java.lang.Cloneable):
    def clone(self) -> typing.Any: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: Point2D) -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def getBounds(self) -> java.awt.Rectangle: ...
    def getCtrlPt(self) -> Point2D: ...
    def getCtrlX(self) -> float: ...
    def getCtrlY(self) -> float: ...
    @typing.overload
    def getFlatness(self) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatness(double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatness(doubleArray: typing.List[float], int: int) -> float: ...
    @typing.overload
    def getFlatnessSq(self) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatnessSq(double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> float: ...
    @typing.overload
    @staticmethod
    def getFlatnessSq(doubleArray: typing.List[float], int: int) -> float: ...
    def getP1(self) -> Point2D: ...
    def getP2(self) -> Point2D: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def getX1(self) -> float: ...
    def getX2(self) -> float: ...
    def getY1(self) -> float: ...
    def getY2(self) -> float: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    @typing.overload
    def setCurve(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
    @typing.overload
    def setCurve(self, doubleArray: typing.List[float], int: int) -> None: ...
    @typing.overload
    def setCurve(self, point2D: Point2D, point2D2: Point2D, point2D3: Point2D) -> None: ...
    @typing.overload
    def setCurve(self, point2DArray: typing.List[Point2D], int: int) -> None: ...
    @typing.overload
    def setCurve(self, quadCurve2D: 'QuadCurve2D') -> None: ...
    @typing.overload
    @staticmethod
    def solveQuadratic(doubleArray: typing.List[float]) -> int: ...
    @typing.overload
    @staticmethod
    def solveQuadratic(doubleArray: typing.List[float], doubleArray2: typing.List[float]) -> int: ...
    @typing.overload
    @staticmethod
    def subdivide(doubleArray: typing.List[float], int: int, doubleArray2: typing.List[float], int2: int, doubleArray3: typing.List[float], int3: int) -> None: ...
    @typing.overload
    @staticmethod
    def subdivide(quadCurve2D: 'QuadCurve2D', quadCurve2D2: 'QuadCurve2D', quadCurve2D3: 'QuadCurve2D') -> None: ...
    @typing.overload
    def subdivide(self, quadCurve2D: 'QuadCurve2D', quadCurve2D2: 'QuadCurve2D') -> None: ...
    class Double(java.awt.geom.QuadCurve2D, java.io.Serializable):
        x1: float = ...
        y1: float = ...
        ctrlx: float = ...
        ctrly: float = ...
        x2: float = ...
        y2: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getCtrlPt(self) -> Point2D: ...
        def getCtrlX(self) -> float: ...
        def getCtrlY(self) -> float: ...
        def getP1(self) -> Point2D: ...
        def getP2(self) -> Point2D: ...
        def getX1(self) -> float: ...
        def getX2(self) -> float: ...
        def getY1(self) -> float: ...
        def getY2(self) -> float: ...
        @typing.overload
        def setCurve(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
        @typing.overload
        def setCurve(self, doubleArray: typing.List[float], int: int) -> None: ...
        @typing.overload
        def setCurve(self, point2D: Point2D, point2D2: Point2D, point2D3: Point2D) -> None: ...
        @typing.overload
        def setCurve(self, point2DArray: typing.List[Point2D], int: int) -> None: ...
        @typing.overload
        def setCurve(self, quadCurve2D: 'QuadCurve2D') -> None: ...
    class Float(java.awt.geom.QuadCurve2D, java.io.Serializable):
        x1: float = ...
        y1: float = ...
        ctrlx: float = ...
        ctrly: float = ...
        x2: float = ...
        y2: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float): ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getCtrlPt(self) -> Point2D: ...
        def getCtrlX(self) -> float: ...
        def getCtrlY(self) -> float: ...
        def getP1(self) -> Point2D: ...
        def getP2(self) -> Point2D: ...
        def getX1(self) -> float: ...
        def getX2(self) -> float: ...
        def getY1(self) -> float: ...
        def getY2(self) -> float: ...
        @typing.overload
        def setCurve(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
        @typing.overload
        def setCurve(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float) -> None: ...
        @typing.overload
        def setCurve(self, doubleArray: typing.List[float], int: int) -> None: ...
        @typing.overload
        def setCurve(self, point2D: Point2D, point2D2: Point2D, point2D3: Point2D) -> None: ...
        @typing.overload
        def setCurve(self, point2DArray: typing.List[Point2D], int: int) -> None: ...
        @typing.overload
        def setCurve(self, quadCurve2D: 'QuadCurve2D') -> None: ...

class Rectangle2D(RectangularShape):
    OUT_LEFT: typing.ClassVar[int] = ...
    OUT_TOP: typing.ClassVar[int] = ...
    OUT_RIGHT: typing.ClassVar[int] = ...
    OUT_BOTTOM: typing.ClassVar[int] = ...
    @typing.overload
    def add(self, double: float, double2: float) -> None: ...
    @typing.overload
    def add(self, point2D: Point2D) -> None: ...
    @typing.overload
    def add(self, rectangle2D: 'Rectangle2D') -> None: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def contains(self, point2D: Point2D) -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: 'Rectangle2D') -> bool: ...
    def createIntersection(self, rectangle2D: 'Rectangle2D') -> 'Rectangle2D': ...
    def createUnion(self, rectangle2D: 'Rectangle2D') -> 'Rectangle2D': ...
    def equals(self, object: typing.Any) -> bool: ...
    def getBounds2D(self) -> 'Rectangle2D': ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    def hashCode(self) -> int: ...
    @staticmethod
    def intersect(rectangle2D: 'Rectangle2D', rectangle2D2: 'Rectangle2D', rectangle2D3: 'Rectangle2D') -> None: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersects(self, rectangle2D: 'Rectangle2D') -> bool: ...
    @typing.overload
    def intersectsLine(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def intersectsLine(self, line2D: Line2D) -> bool: ...
    @typing.overload
    def outcode(self, double: float, double2: float) -> int: ...
    @typing.overload
    def outcode(self, point2D: Point2D) -> int: ...
    @typing.overload
    def setFrame(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setFrame(self, point2D: Point2D, dimension2D: Dimension2D) -> None: ...
    @typing.overload
    def setFrame(self, rectangle2D: 'Rectangle2D') -> None: ...
    @typing.overload
    def setRect(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setRect(self, rectangle2D: 'Rectangle2D') -> None: ...
    @staticmethod
    def union(rectangle2D: 'Rectangle2D', rectangle2D2: 'Rectangle2D', rectangle2D3: 'Rectangle2D') -> None: ...
    class Double(java.awt.geom.Rectangle2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float, double3: float, double4: float): ...
        def createIntersection(self, rectangle2D: 'Rectangle2D') -> 'Rectangle2D': ...
        def createUnion(self, rectangle2D: 'Rectangle2D') -> 'Rectangle2D': ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        @typing.overload
        def outcode(self, double: float, double2: float) -> int: ...
        @typing.overload
        def outcode(self, point2D: Point2D) -> int: ...
        @typing.overload
        def setRect(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        @typing.overload
        def setRect(self, rectangle2D: 'Rectangle2D') -> None: ...
        def toString(self) -> str: ...
    class Float(java.awt.geom.Rectangle2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float, float3: float, float4: float): ...
        def createIntersection(self, rectangle2D: 'Rectangle2D') -> 'Rectangle2D': ...
        def createUnion(self, rectangle2D: 'Rectangle2D') -> 'Rectangle2D': ...
        def getBounds2D(self) -> 'Rectangle2D': ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        @typing.overload
        def outcode(self, double: float, double2: float) -> int: ...
        @typing.overload
        def outcode(self, point2D: Point2D) -> int: ...
        @typing.overload
        def setRect(self, double: float, double2: float, double3: float, double4: float) -> None: ...
        @typing.overload
        def setRect(self, float: float, float2: float, float3: float, float4: float) -> None: ...
        @typing.overload
        def setRect(self, rectangle2D: 'Rectangle2D') -> None: ...
        def toString(self) -> str: ...

class RoundRectangle2D(RectangularShape):
    @typing.overload
    def contains(self, point2D: Point2D) -> bool: ...
    @typing.overload
    def contains(self, rectangle2D: Rectangle2D) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float) -> bool: ...
    @typing.overload
    def contains(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    def equals(self, object: typing.Any) -> bool: ...
    def getArcHeight(self) -> float: ...
    def getArcWidth(self) -> float: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform, double: float) -> PathIterator: ...
    @typing.overload
    def getPathIterator(self, affineTransform: AffineTransform) -> PathIterator: ...
    def hashCode(self) -> int: ...
    @typing.overload
    def intersects(self, rectangle2D: Rectangle2D) -> bool: ...
    @typing.overload
    def intersects(self, double: float, double2: float, double3: float, double4: float) -> bool: ...
    @typing.overload
    def setFrame(self, point2D: Point2D, dimension2D: Dimension2D) -> None: ...
    @typing.overload
    def setFrame(self, rectangle2D: Rectangle2D) -> None: ...
    @typing.overload
    def setFrame(self, double: float, double2: float, double3: float, double4: float) -> None: ...
    @typing.overload
    def setRoundRect(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
    @typing.overload
    def setRoundRect(self, roundRectangle2D: 'RoundRectangle2D') -> None: ...
    class Double(java.awt.geom.RoundRectangle2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        arcwidth: float = ...
        archeight: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float): ...
        def getArcHeight(self) -> float: ...
        def getArcWidth(self) -> float: ...
        def getBounds2D(self) -> Rectangle2D: ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        @typing.overload
        def setRoundRect(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
        @typing.overload
        def setRoundRect(self, roundRectangle2D: 'RoundRectangle2D') -> None: ...
    class Float(java.awt.geom.RoundRectangle2D, java.io.Serializable):
        x: float = ...
        y: float = ...
        width: float = ...
        height: float = ...
        arcwidth: float = ...
        archeight: float = ...
        @typing.overload
        def __init__(self): ...
        @typing.overload
        def __init__(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float): ...
        def getArcHeight(self) -> float: ...
        def getArcWidth(self) -> float: ...
        def getBounds2D(self) -> Rectangle2D: ...
        def getHeight(self) -> float: ...
        def getWidth(self) -> float: ...
        def getX(self) -> float: ...
        def getY(self) -> float: ...
        def isEmpty(self) -> bool: ...
        @typing.overload
        def setRoundRect(self, double: float, double2: float, double3: float, double4: float, double5: float, double6: float) -> None: ...
        @typing.overload
        def setRoundRect(self, float: float, float2: float, float3: float, float4: float, float5: float, float6: float) -> None: ...
        @typing.overload
        def setRoundRect(self, roundRectangle2D: 'RoundRectangle2D') -> None: ...


class __module_protocol__(typing.Protocol):
    # A module protocol which reflects the result of ``jp.JPackage("java.awt.geom")``.

    AffineTransform: typing.Type[AffineTransform]
    Arc2D: typing.Type[Arc2D]
    Area: typing.Type[Area]
    CubicCurve2D: typing.Type[CubicCurve2D]
    Dimension2D: typing.Type[Dimension2D]
    Ellipse2D: typing.Type[Ellipse2D]
    FlatteningPathIterator: typing.Type[FlatteningPathIterator]
    GeneralPath: typing.Type[GeneralPath]
    IllegalPathStateException: typing.Type[IllegalPathStateException]
    Line2D: typing.Type[Line2D]
    NoninvertibleTransformException: typing.Type[NoninvertibleTransformException]
    Path2D: typing.Type[Path2D]
    PathIterator: typing.Type[PathIterator]
    Point2D: typing.Type[Point2D]
    QuadCurve2D: typing.Type[QuadCurve2D]
    Rectangle2D: typing.Type[Rectangle2D]
    RectangularShape: typing.Type[RectangularShape]
    RoundRectangle2D: typing.Type[RoundRectangle2D]
