BoundingBox

BoundingBox je okomito poravnata granična kutija (AABB) definirana s dva Vector3 ugla: minimum (najmanji x, y, z) i maximum (najveći x, y, z). Koristi se za prostorne upite poput testova točka-u-kutiji, pomoćnika za culling vidnog polja i procjene veličine na razini scene.

A BoundingBox može biti u null (prazno/neinicijalizirano) stanje kada je stvoren bez argumenata. Pozivanje merge() na null kutiji inicijalizira ga iz prve točke ili kutije koja je navedena.

: aspose.threed.utilities

from aspose.threed.utilities import BoundingBox, Vector3

BoundingBox()Null (prazna) granična kutija
BoundingBox(minimum, maximum)Kreira iz dva Vector3 ugla
BoundingBox(min_x, min_y, min_z, max_x, max_y, max_z)Kreira iz šest skalarnih vrijednosti

minimumVector3Ugao s najmanjim x, y, z vrijednostima. Vraća (+inf, +inf, +inf) za null kutiju
maximumVector3Ugao s najvećim x, y, z vrijednostima. Vraća (-inf, -inf, -inf) za null box
centerVector3Srednja točka između minimum i maximum; (0,0,0) za null box
sizeVector3Opseg po osi (maximum - minimum); (0,0,0) za null kutiju

Statičke metode tvornice

Tip povratka
BoundingBox.get_null()BoundingBoxVraća null (praznu) ograničavajuću kutiju
BoundingBox.get_infinite()BoundingBoxVraća beskonačnu ograničavajuću kutiju koja obuhvaća sav prostor

Metode instance

Tip povratka
merge(point)NoneProširuje kutiju da uključi Vector3, Vector4, ili drugi BoundingBox
merge(x, y, z)NoneProširuje kutiju da uključi točku (x, y, z)
contains(point)bool
True ako Vector3 točka je unutar ili na granici
contains(box)bool
True ako box je u potpunosti unutar ove kutije
overlaps_with(box)bool
True ako se dvije kutije preklapaju
scale()floatVraća najveću apsolutnu vrijednost koordinate — korisno kao grubu procjenu 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đer

 Hrvatski