BoundingBox — Aspose.3D FOSS for Python API Reference

Example

BoundingBox yra axis-aligned bounding box (AABB), apibrėžta pagal du Vector3 kampus: minimum (mažiausi x, y, z) ir maximum (didžiausi x, y, z). Ji naudojama erdviniams užklausoms, tokioms kaip point-in-box testai, frustum culling pagalbinės priemonės ir scenos lygmens dydžio įvertinimas.

A BoundingBox gali būti null (tuščia/neinicijuota) būsena, kai sukuriama be argumentų. Iškviečiant merge() ant null dėžutės inicializuoja ją iš pirmojo pateikto taško arba dėžutės.

Example: aspose.threed.utilities

from aspose.threed.utilities import BoundingBox, Vector3

Example

ExampleExample
BoundingBox()Null (tuščia) ribinė dėžutė
BoundingBox(minimum, maximum)Kuria iš dviejų Vector3 kampų
BoundingBox(min_x, min_y, min_z, max_x, max_y, max_z)Kuria iš šešių skaliarinių verčių

Example

ExampleExampleExample
minimumVector3Kampas su mažiausiomis x, y, z reikšmėmis. Grąžina (+inf, +inf, +inf) null dėžutei
maximumVector3Kampas su didžiausiomis x, y, z reikšmėmis. Grąžina (-inf, -inf, -inf) null box’ui
centerVector3Vidurio taškas tarp minimum ir maximum; (0,0,0) null box’ui
sizeVector3Ištempimas per ašį (maximum - minimum); (0,0,0) nulinės dėžės

Statiniai gamykliniai metodai

ExampleGrąžinimo tipasExample
BoundingBox.get_null()BoundingBoxGrąžina nulinę (tuščią) ribų dėžę
BoundingBox.get_infinite()BoundingBoxGrąžina begalinę ribų dėžę, apimančią visą erdvę

Instanciniai metodai

ExampleGrąžinimo tipasExample
merge(point)NoneIšplečia dėžę, kad įtrauktų Vector3, Vector4, arba kitą BoundingBox
merge(x, y, z)NoneIšplečia dėžę, kad įtrauktų tašką (x, y, z)
contains(point)boolExample True jei Vector3 taškas yra viduje arba ant ribos
contains(box)boolExample True jei box yra visiškai šioje dėžėje
overlaps_with(box)boolExample True jei dvi dėžės kertasi
scale()floatGrąžina didžiausią absoliutų koordinatės reikšmę — naudinga kaip apytikslis scenos mastelio įvertinimas

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)

Žr. taip pat

 Lietuvių