BoundingBox

BoundingBox je pravougaoni okvir (AABB) usklađen s osama definisan sa dva Vector3 temena: minimum (najmanji x, y, z) i maximum (najveći x, y, z). Koristi se za prostorne upite kao što su testovi point‑in‑box, frustum culling pomoćnici i procena veličine na nivou scene.

A BoundingBox može biti u null (prazno/neinicijalizovano) stanje kada je kreirano bez argumenata. Pozivanje merge() na null box inicijalizuje ga iz prve tačke ili kutije koja je prosleđena.

: aspose.threed.utilities

from aspose.threed.utilities import BoundingBox, Vector3

BoundingBox()Null (prazna) ograničavajuća kutija
BoundingBox(minimum, maximum)Konstruiše iz dva Vector3 ugla
BoundingBox(min_x, min_y, min_z, max_x, max_y, max_z)Konstruiše iz šest skalarnih vrednosti

minimumVector3Ugao sa najmanjim x, y, z vrednostima. Vraća (+inf, +inf, +inf) za null box
maximumVector3Ugao sa najvećim x, y, z vrednostima. Vraća (-inf, -inf, -inf) za null box
centerVector3Srednja tačka između minimum i maximum; (0,0,0) za null box
sizeVector3Raspon po osi (maximum - minimum); (0,0,0) za null box

Statičke metode fabrike

Tip povratne vrednosti
BoundingBox.get_null()BoundingBoxVraća null (praznu) bounding box
BoundingBox.get_infinite()BoundingBoxVraća beskonačni okvir koji obuhvata sav prostor

Metode instance

Tip povratne vrednosti
merge(point)NoneProširuje okvir da uključi Vector3, Vector4, ili drugi BoundingBox
merge(x, y, z)NoneProširuje okvir da uključi tačku (x, y, z)
contains(point)bool
True ako je Vector3 tačka se nalazi unutar ili na granici
contains(box)bool
True ako box je u potpunosti unutar ove kutije
overlaps_with(box)bool
True ako se dve kutije presecaju
scale()floatVraća najveću apsolutnu vrednost koordinate — korisno kao gruba procena skale scene

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()
# Use _control_points to mutate the backing list (control_points returns a copy)
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)

Vidi takođe

 Српски