from ..VarType import *
from .Matrix import *
from .Vector import *

class PyGePoint3d(vDoubleArray):
    def __init__(self, *args) -> None: ...
    @property
    def x(self): ...
    @x.setter
    def x(self, value) -> None: ...
    @property
    def y(self): ...
    @y.setter
    def y(self, value) -> None: ...
    @property
    def z(self): ...
    @z.setter
    def z(self, value) -> None: ...
    def __add__(self, vector: PyGeVector3d) -> PyGePoint3d: ...
    def __sub__(self, other: PyGePoint3d | PyGeVector3d) -> PyGeVector3d | PyGePoint3d: ...
    def __mul__(self, scalar: int | float) -> PyGePoint3d: ...
    def __rmul__(self, scalar: int | float) -> PyGePoint3d: ...
    def __truediv__(self, scalar: int | float) -> PyGePoint3d: ...
    def __iadd__(self, vector: PyGeVector3d) -> PyGePoint3d: ...
    def __isub__(self, vector: PyGeVector3d) -> PyGePoint3d: ...
    def __imul__(self, scalar: int | float) -> PyGePoint3d: ...
    def __itruediv__(self, scalar: int | float) -> PyGePoint3d: ...
    def asVector(self) -> PyGeVector3d: ...
    def distanceTo(self, other: PyGePoint3d) -> float: ...
    def isEqualTo(self, other_point: PyGePoint3d, tolerance: float = 1e-09) -> bool: ...
    def transformBy(self, matrix: PyGeMatrix3d) -> None: ...

class PyGePoint2d(vDoubleArray):
    def __init__(self, *args) -> None: ...
    @property
    def x(self): ...
    @x.setter
    def x(self, value) -> None: ...
    @property
    def y(self): ...
    @y.setter
    def y(self, value) -> None: ...
    def __add__(self, vector: PyGeVector2d) -> PyGePoint2d: ...
    def __sub__(self, other: PyGePoint2d | PyGeVector2d) -> PyGeVector2d | PyGePoint2d: ...
    def __mul__(self, scalar: int | float) -> PyGePoint2d: ...
    def __rmul__(self, scalar: int | float) -> PyGePoint2d: ...
    def __truediv__(self, scalar: int | float) -> PyGePoint2d: ...
    def __iadd__(self, vector: PyGeVector2d) -> PyGePoint2d: ...
    def __isub__(self, vector: PyGeVector2d) -> PyGePoint2d: ...
    def __imul__(self, scalar: int | float) -> PyGePoint2d: ...
    def __itruediv__(self, scalar: int | float) -> PyGePoint2d: ...
    def asVector(self) -> PyGeVector2d: ...
    def distanceTo(self, other: PyGePoint2d) -> float: ...
    def isEqualTo(self, other: PyGePoint2d, tolerance: float = 1e-09) -> bool: ...
    def transformBy(self, matrix: PyGeMatrix2d) -> PyGePoint2d: ...

class PyGePoint3dArray(vDoubleArray):
    def __init__(self, *args) -> None: ...
    def __iter__(self): ...
    def __getitem__(self, index): ...
    def __setitem__(self, index, value) -> None: ...
    def __len__(self) -> int: ...
    def __add__(self, other): ...

class PyGePoint2dArray(vDoubleArray):
    def __init__(self, *args) -> None: ...
    def __iter__(self): ...
    def __getitem__(self, index): ...
    def __setitem__(self, index, value) -> None: ...
    def __len__(self) -> int: ...
    def __add__(self, other): ...
