| # SPDX-License-Identifier: LGPL-2.1-or-later |
|
|
| from __future__ import annotations |
|
|
| from Metadata import export, constmethod |
| from PyObjectBase import PyObjectBase |
| from Vector import Vector |
| from Matrix import Matrix |
| from typing import overload, Any, Final, Tuple, Union |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| juergen-riegel.net) |
| Licence: LGPL |
| """ |
| |
| Center: Final[Any] = None |
| """Center point of the bounding box.""" |
| |
| XMax: float = 0.0 |
| """The maximum x boundary position.""" |
| |
| YMax: float = 0.0 |
| """The maximum y boundary position.""" |
| |
| ZMax: float = 0.0 |
| """The maximum z boundary position.""" |
| |
| XMin: float = 0.0 |
| """The minimum x boundary position.""" |
| |
| YMin: float = 0.0 |
| """The minimum y boundary position.""" |
| |
| ZMin: float = 0.0 |
| """The minimum z boundary position.""" |
| |
| XLength: Final[float] = 0.0 |
| """Length of the bounding box in x direction.""" |
| |
| YLength: Final[float] = 0.0 |
| """Length of the bounding box in y direction.""" |
| |
| ZLength: Final[float] = 0.0 |
| """Length of the bounding box in z direction.""" |
| |
| DiagonalLength: Final[float] = 0.0 |
| """Diagonal length of the bounding box.""" |
| |
| # fmt: off |
| @overload |
| def __init__(self) -> None: ... |
| @overload |
| def __init__(self, boundBox: "BoundBox") -> None: ... |
| @overload |
| def __init__( |
| self, |
| xMin: float, |
| yMin: float = 0, |
| zMin: float = 0, |
| xMax: float = 0, |
| yMax: float = 0, |
| zMax: float = 0, |
| ) -> None: ... |
| @overload |
| def __init__( |
| self, |
| min: Union[Vector, Tuple[float, float, float]], |
| max: Union[Vector, Tuple[float, float, float]], |
| ) -> None: ... |
| # fmt: on |
| |
| def setVoid(self) -> None: |
| """ |
| Invalidate the bounding box. |
| """ |
| ... |
| |
| @constmethod |
| def isValid(self) -> bool: |
| """ |
| Checks if the bounding box is valid. |
| """ |
| ... |
| |
| @overload |
| def add(self, minMax: Vector, /) -> None: ... |
| @overload |
| def add(self, minMax: Tuple[float, float, float], /) -> None: ... |
| @overload |
| def add(self, x: float, y: float, z: float, /) -> None: ... |
| def add(self, *args: Any, **kwargs: Any) -> None: |
| """ |
| Increase the maximum values or decrease the minimum values of this BoundBox by |
| replacing the current values with the given values, so the bounding box can grow |
| but not shrink. |
|
|
| minMax : Base.Vector, tuple |
| Values to enlarge at each direction. |
| x : float |
| Value to enlarge at x-direction. |
| y : float |
| Value to enlarge at y-direction. |
| z : float |
| Value to enlarge at z-direction. |
| """ |
| ... |
| |
| @constmethod |
| def getPoint(self, index: int, /) -> Vector: |
| """ |
| Get the point of the given index. |
| The index must be in the range of [0, 7]. |
|
|
| index : int |
| """ |
| ... |
| |
| @constmethod |
| def getEdge(self, index: int, /) -> Tuple[Vector, ...]: |
| """ |
| Get the edge points of the given index. |
| The index must be in the range of [0, 11]. |
|
|
| index : int |
| """ |
| ... |
| |
| @overload |
| def closestPoint(self, point: Vector, /) -> Vector: ... |
| @overload |
| def closestPoint(self, x: float, y: float, z: float, /) -> Vector: ... |
| @constmethod |
| def closestPoint(self, *args: Any, **kwargs: Any) -> Vector: |
| """ |
| Get the closest point of the bounding box to the given point. |
|
|
| point : Base.Vector, tuple |
| Coordinates of the given point. |
| x : float |
| X-coordinate of the given point. |
| y : float |
| Y-coordinate of the given point. |
| z : float |
| Z-coordinate of the given point. |
| """ |
| ... |
| |
| @overload |
| def intersect(self, boundBox2: "BoundBox", /) -> bool: ... |
| @overload |
| def intersect( |
| self, |
| base: Union[Vector, Tuple[float, float, float]], |
| dir: Union[Vector, Tuple[float, float, float]], |
| /, |
| ) -> bool: ... |
| def intersect(self, *args: Any) -> bool: |
| """ |
| Checks if the given object intersects with this bounding box. That can be |
| another bounding box or a line specified by base and direction. |
|
|
| boundBox2 : Base.BoundBox |
| base : Base.Vector, tuple |
| dir : Base.Vector, tuple |
| """ |
| ... |
| |
| def intersected(self, boundBox2: "BoundBox", /) -> "BoundBox": |
| """ |
| Returns the intersection of this and the given bounding box. |
|
|
| boundBox2 : Base.BoundBox |
| """ |
| ... |
| |
| def united(self, boundBox2: "BoundBox", /) -> "BoundBox": |
| """ |
| Returns the union of this and the given bounding box. |
|
|
| boundBox2 : Base.BoundBox |
| """ |
| ... |
| |
| def enlarge(self, variation: float, /) -> None: |
| """ |
| Decrease the minimum values and increase the maximum values by the given value. |
| A negative value shrinks the bounding box. |
|
|
| variation : float |
| """ |
| ... |
| |
| def getIntersectionPoint(self, base: Vector, dir: Vector, epsilon: float = 0.0001, /) -> Vector: |
| """ |
| Calculate the intersection point of a line with the bounding box. |
| The base point must lie inside the bounding box, if not an exception is thrown. |
|
|
| base : Base.Vector |
| Base point of the line. |
| dir : Base.Vector |
| Direction of the line. |
| epsilon : float |
| Bounding box size tolerance. |
| """ |
| ... |
| |
| @overload |
| def move(self, displacement: Vector, /) -> None: ... |
| @overload |
| def move(self, displacement: Tuple[float, float, float], /) -> None: ... |
| @overload |
| def move(self, x: float, y: float, z: float, /) -> None: ... |
| def move(self, *args: Any, **kwargs: Any) -> None: |
| """ |
| Move the bounding box by the given values. |
|
|
| displacement : Base.Vector, tuple |
| Displacement at each direction. |
| x : float |
| Displacement at x-direction. |
| y : float |
| Displacement at y-direction. |
| z : float |
| Displacement at z-direction. |
| """ |
| ... |
| |
| @overload |
| def scale(self, factor: Vector, /) -> None: ... |
| @overload |
| def scale(self, factor: Tuple[float, float, float], /) -> None: ... |
| @overload |
| def scale(self, x: float, y: float, z: float, /) -> None: ... |
| def scale(self, *args: Any, **kwargs: Any) -> None: |
| """ |
| Scale the bounding box by the given values. |
|
|
| factor : Base.Vector, tuple |
| Factor scale at each direction. |
| x : float |
| Scale at x-direction. |
| y : float |
| Scale at y-direction. |
| z : float |
| Scale at z-direction. |
| """ |
| ... |
| |
| def transformed(self, matrix: Matrix, /) -> "BoundBox": |
| """ |
| Returns a new BoundBox containing the transformed rectangular cuboid |
| represented by this BoundBox. |
|
|
| matrix : Base.Matrix |
| Transformation matrix. |
| """ |
| ... |
| |
| def isCutPlane(self, base: Vector, normal: Vector, /) -> bool: |
| """ |
| Check if the plane specified by base and normal intersects (cuts) this bounding |
| box. |
|
|
| base : Base.Vector |
| normal : Base.Vector |
| """ |
| ... |
| |
| @overload |
| def isInside(self, object: Vector, /) -> bool: ... |
| @overload |
| def isInside(self, object: "BoundBox", /) -> bool: ... |
| @overload |
| def isInside(self, x: float, y: float, z: float, /) -> bool: ... |
| def isInside(self, *args: Any) -> bool: |
| """ |
| Check if a point or a bounding box is inside this bounding box. |
|
|
| object : Base.Vector, Base.BoundBox |
| Object to check if it is inside this bounding box. |
| x : float |
| X-coordinate of the point to check. |
| y : float |
| Y-coordinate of the point to check. |
| z : float |
| Z-coordinate of the point to check. |
| """ |
| ... |
| |