BoundingBox — Aspose.3D FOSS for Python API Reference

Example

BoundingBox является ограничивающим параллелепипедом, выровненным по осям (AABB), определяемым двумя Vector3 углами: minimum (наименьшие x, y, z) и maximum (наибольшие x, y, z). Он используется для пространственных запросов, таких как тесты point-in-box, вспомогательные функции отсечения фрустума и оценка размеров на уровне сцены.

A BoundingBox может находиться в null (пустом/неинициализированном) состоянии при создании без аргументов. Вызов merge() при null box инициализирует его из первой предоставленной точки или бокса.

Example: aspose.threed.utilities

from aspose.threed.utilities import BoundingBox, Vector3

Example

ExampleExample
BoundingBox()Null (пустой) bounding box
BoundingBox(minimum, maximum)Создаёт из двух Vector3 углов
BoundingBox(min_x, min_y, min_z, max_x, max_y, max_z)Создаёт из шести скалярных значений

Example

ExampleExampleExample
minimumVector3Угол с наименьшими значениями x, y, z. Возвращает (+inf, +inf, +inf) для null box
maximumVector3Угол с наибольшими значениями x, y, z. Возвращает (-inf, -inf, -inf) для null box
centerVector3Средняя точка между minimum и maximum; (0,0,0) для null box
sizeVector3Протяжённость по оси (maximum - minimum); (0,0,0) для null box

Статические фабричные методы

ExampleТип возвращаемого значенияExample
BoundingBox.get_null()BoundingBoxВозвращает null (пустой) bounding box
BoundingBox.get_infinite()BoundingBoxВозвращает бесконечный ограничивающий прямоугольник, охватывающий всё пространство

Методы экземпляра

ExampleТип возвращаемого значенияExample
merge(point)NoneРасширяет коробку, чтобы включить Vector3, Vector4, или другой BoundingBox
merge(x, y, z)NoneРасширяет коробку, чтобы включить точку (x, y, z)
contains(point)boolExample True если Vector3 точка находится внутри или на границе
contains(box)boolExample True если box полностью находится внутри этой коробки
overlaps_with(box)boolExample True если две коробки пересекаются
scale()floatВозвращает наибольшее абсолютное значение координаты — полезно как грубая оценка масштаба сцены

Example

from aspose.threed.utilities import BoundingBox, Vector3

# Build a bounding box from a list of points
bb = BoundingBox()
points = [
    Vector3(0.0, 0.0, 0.0),
    Vector3(1.0, 2.0, 3.0),
    Vector3(-1.0, 0.5, 1.5),
]
for p in points:
    bb.merge(p)

print(bb.minimum)   # Vector3(-1.0, 0.0, 0.0)
print(bb.maximum)   # Vector3(1.0, 2.0, 3.0)
print(bb.center)    # Vector3(0.0, 1.0, 1.5)
print(bb.size)      # Vector3(2.0, 2.0, 3.0)

# Point containment
print(bb.contains(Vector3(0.5, 1.0, 1.5)))   # True
print(bb.contains(Vector3(5.0, 0.0, 0.0)))   # False

# Box containment
inner = BoundingBox(Vector3(0, 0, 0), Vector3(0.5, 0.5, 0.5))
print(bb.contains(inner))   # True

# Overlap test
other = BoundingBox(Vector3(0.5, 0.5, 0.5), Vector3(2.0, 2.0, 2.0))
print(bb.overlaps_with(other))   # True

# Retrieve from a node
from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

scene = Scene()
mesh = Mesh()
mesh.control_points.append(Vector4(-1, 0, 0, 1))
mesh.control_points.append(Vector4( 1, 0, 0, 1))
mesh.control_points.append(Vector4( 0, 1, 0, 1))
mesh.create_polygon(0, 1, 2)
node = scene.root_node.create_child_node("tri", mesh)
node_bb = node.get_bounding_box()
print(node_bb.minimum)
print(node_bb.maximum)

См. также

 Русский