BoundingBox — Aspose.3D FOSS for Python API Reference

Example

BoundingBox یک جعبه محدود محور (AABB) است که توسط دو Vector3 گوشه‌ها: minimum (کمترین x, y, z) و maximum (بیشترین x, y, z). برای پرس‌و‌جوهای فضایی مانند تست نقطه‑در‑جعبه، کمک‌کننده‌های حذف بخش‌های خارج از نمای دوربین (frustum culling) و برآورد اندازه در سطح صحنه استفاده می‌شود.

یک BoundingBox می‌تواند در یک null (خالی/غیر‌مقداردهی) حالت زمانی که بدون آرگومان ساخته می‌شود. فراخوانی merge() بر روی یک جعبه null آن را از اولین نقطه یا جعبه ارائه‌شده مقداردهی اولیه می‌کند.

Example: aspose.threed.utilities

from aspose.threed.utilities import BoundingBox, Vector3

Example

ExampleExample
BoundingBox()جعبه محدود Null (خالی)
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) برای یک جعبه تهی
maximumVector3گوشه‌ای که بزرگ‌ترین مقادیر x، y، z را دارد. بازمی‌گرداند (-inf, -inf, -inf) برای یک جعبه تهی
centerVector3نقطه میانی بین minimum و maximum; (0,0,0) برای یک جعبه تهی
sizeVector3گستره در هر محور (maximum - minimum); (0,0,0) برای یک جعبهٔ تهی

متدهای کارخانه‌ای ایستا

Exampleنوع بازگشتExample
BoundingBox.get_null()BoundingBoxیک جعبه مرزی تهی (خالی) را برمی‌گرداند
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)

موارد مرتبط

 فارسی