# CalculateBounds

> Calculates the bounding box from the given array of positions and the transformation matrix.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.3/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

## CalculateBounds(Vector3\[], Matrix4x4)

Calculates the bounding box from the given array of positions and the transformation matrix.

```csharp
public static Bounds CalculateBounds(Vector3[] positions, Matrix4x4 transform)
```

### Parameters

**** (\[Vector3\[]]\(/engine/6000.3/script-reference/unityengine/vector3)): An array that stores the location of 3d positions.**** (\[Matrix4x4]\(/engine/6000.3/script-reference/unityengine/matrix4x4)): A matrix that changes the position, rotation and size of the bounds calculation.

### Returns

| Type                                                            | Description                               |
| --------------------------------------------------------------- | ----------------------------------------- |
| [Bounds](/engine/6000.3/script-reference/unityengine/bounds.md) | Calculates the axis-aligned bounding box. |

### Remarks

[GeometryUtility.CalculateBounds](/engine/6000.3/script-reference/unityengine/geometryutility/calculatebounds.md) generates a [Bounds](/engine/6000.3/script-reference/unityengine/bounds.md) bounding box. The positions parameter stores a 3d point array. Each point is inside the generated axis-aligned bounding box. The transform parameter provides a transformation [Matrix4x4](/engine/6000.3/script-reference/unityengine/matrix4x4.md) that uses a Vector3 position, Quaternion rotation, and Vector3 scale.

The example below shows how to use [GeometryUtility.CalculateBounds](/engine/6000.3/script-reference/unityengine/geometryutility/calculatebounds.md). A [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) passes positions into [GeometryUtility.CalculateBounds](/engine/6000.3/script-reference/unityengine/geometryutility/calculatebounds.md). The example code creates a bounding box with eight Light Probes. By default, the Light Probes are one unit from each corner of a unit cube.

To run the example:

1. Create a Project and add an empty [GameObject](/engine/6000.3/script-reference/unityengine/gameobject.md) called `GameObject`.

2. Add a 3D cube as a child of `GameObject` and call it `Cube`.

3. Add a [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) component to `Cube`.

4. Add the script below to `Cube`.

5. Run the `Project` and switch back to the `Scene` view.

In the `Scene` view, you can see the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md). When the game runs, the rotation changes in `Awake`. The eight yellow spheres that indicate the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) change position and the Cube appears rotated. `Scene` mode shows the `Cube` rotated in the x, y and z axes, and shows in the `Local tool handle`. Rotating the `Cube` changes the positions of the eight [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) Light Probes. The `Scene` mode rotates and zooms to show the Light Probes. Also, the `Cube` rotates and the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) updates. If you rescale the `Cube`, the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) changes size.

### Examples

```csharp
using UnityEngine;
using System.Collections;

// GeometryUtility.CalculateBounds - example

public class Example : MonoBehaviour
{
    void Awake()
    {
        transform.position = new Vector3(0.0f, 0.0f, 0.0f);
        transform.Rotate(10.0f, 30.0f, -50.0f, Space.Self);

        Debug.Log(transform.localToWorldMatrix);
    }

    void OnDrawGizmosSelected()
    {
        LightProbeGroup lightProbeGroup = GetComponent<LightProbeGroup>();

        Vector3 center = transform.position;
        Bounds bounds = GeometryUtility.CalculateBounds(lightProbeGroup.probePositions, transform.localToWorldMatrix);
        Gizmos.color = new Color(1, 1, 1, 0.25f);
        Gizmos.DrawCube(center, bounds.size);
        Gizmos.DrawWireCube(center, bounds.size);
    }
}
```

## CalculateBounds(Vector3\[], Matrix4x4)

Calculates the bounding box from the given array of positions and the transformation matrix.

```csharp
public static Bounds CalculateBounds(Vector3[] positions, in Matrix4x4 transform)
```

### Parameters

**** (\[Vector3\[]]\(/engine/6000.3/script-reference/unityengine/vector3)): An array that stores the location of 3d positions.**** (\[Matrix4x4]\(/engine/6000.3/script-reference/unityengine/matrix4x4)): A matrix that changes the position, rotation and size of the bounds calculation.

### Returns

| Type                                                            | Description                               |
| --------------------------------------------------------------- | ----------------------------------------- |
| [Bounds](/engine/6000.3/script-reference/unityengine/bounds.md) | Calculates the axis-aligned bounding box. |

### Remarks

[GeometryUtility.CalculateBounds](/engine/6000.3/script-reference/unityengine/geometryutility/calculatebounds.md) generates a [Bounds](/engine/6000.3/script-reference/unityengine/bounds.md) bounding box. The positions parameter stores a 3d point array. Each point is inside the generated axis-aligned bounding box. The transform parameter provides a transformation [Matrix4x4](/engine/6000.3/script-reference/unityengine/matrix4x4.md) that uses a Vector3 position, Quaternion rotation, and Vector3 scale.

The example below shows how to use [GeometryUtility.CalculateBounds](/engine/6000.3/script-reference/unityengine/geometryutility/calculatebounds.md). A [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) passes positions into [GeometryUtility.CalculateBounds](/engine/6000.3/script-reference/unityengine/geometryutility/calculatebounds.md). The example code creates a bounding box with eight Light Probes. By default, the Light Probes are one unit from each corner of a unit cube.

To run the example:

1. Create a Project and add an empty [GameObject](/engine/6000.3/script-reference/unityengine/gameobject.md) called `GameObject`.

2. Add a 3D cube as a child of `GameObject` and call it `Cube`.

3. Add a [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) component to `Cube`.

4. Add the script below to `Cube`.

5. Run the `Project` and switch back to the `Scene` view.

In the `Scene` view, you can see the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md). When the game runs, the rotation changes in `Awake`. The eight yellow spheres that indicate the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) change position and the Cube appears rotated. `Scene` mode shows the `Cube` rotated in the x, y and z axes, and shows in the `Local tool handle`. Rotating the `Cube` changes the positions of the eight [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) Light Probes. The `Scene` mode rotates and zooms to show the Light Probes. Also, the `Cube` rotates and the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) updates. If you rescale the `Cube`, the [LightProbeGroup](/engine/6000.3/script-reference/unityengine/lightprobegroup.md) changes size.

### Examples

```csharp
using UnityEngine;
using System.Collections;

// GeometryUtility.CalculateBounds - example

public class Example : MonoBehaviour
{
    void Awake()
    {
        transform.position = new Vector3(0.0f, 0.0f, 0.0f);
        transform.Rotate(10.0f, 30.0f, -50.0f, Space.Self);

        Debug.Log(transform.localToWorldMatrix);
    }

    void OnDrawGizmosSelected()
    {
        LightProbeGroup lightProbeGroup = GetComponent<LightProbeGroup>();

        Vector3 center = transform.position;
        Bounds bounds = GeometryUtility.CalculateBounds(lightProbeGroup.probePositions, transform.localToWorldMatrix);
        Gizmos.color = new Color(1, 1, 1, 0.25f);
        Gizmos.DrawCube(center, bounds.size);
        Gizmos.DrawWireCube(center, bounds.size);
    }
}
```
