/// <summary> /// Computes a bounding box for the shape given the specified transform. /// </summary> /// <param name="transform">Transform to apply to the shape to compute the bounding box.</param> /// <param name="boundingBox">Bounding box for the shape given the transform.</param> public override void GetBoundingBox(ref RigidTransform transform, out BoundingBox boundingBox) { RigidTransform combinedTransform; RigidTransform.Multiply(ref shapes.Elements[0].LocalTransform, ref transform, out combinedTransform); shapes.Elements[0].Shape.GetBoundingBox(ref combinedTransform, out boundingBox); for (int i = 0; i < shapes.Count; i++) { RigidTransform.Multiply(ref shapes.Elements[i].LocalTransform, ref transform, out combinedTransform); BoundingBox childBoundingBox; shapes.Elements[i].Shape.GetBoundingBox(ref combinedTransform, out childBoundingBox); BoundingBox.CreateMerged(ref boundingBox, ref childBoundingBox, out boundingBox); } }
/// <summary> /// Gets the bounding box of the shape given a transform. /// </summary> /// <param name="shapeTransform">Transform to use.</param> /// <param name="boundingBox">Bounding box of the transformed shape.</param> public override void GetBoundingBox(ref RigidTransform shapeTransform, out BoundingBox boundingBox) { RigidTransform subTransform; RigidTransform.Multiply(ref shapes.WrappedList.Elements[0].Transform, ref shapeTransform, out subTransform); shapes.WrappedList.Elements[0].CollisionShape.GetBoundingBox(ref subTransform, out boundingBox); for (int i = 1; i < shapes.WrappedList.Count; i++) { RigidTransform.Multiply(ref shapes.WrappedList.Elements[i].Transform, ref shapeTransform, out subTransform); BoundingBox toMerge; shapes.WrappedList.Elements[i].CollisionShape.GetBoundingBox(ref subTransform, out toMerge); BoundingBox.CreateMerged(ref boundingBox, ref toMerge, out boundingBox); } boundingBox.Min.X -= collisionMargin; boundingBox.Min.Y -= collisionMargin; boundingBox.Min.Z -= collisionMargin; boundingBox.Max.X += collisionMargin; boundingBox.Max.Y += collisionMargin; boundingBox.Max.Z += collisionMargin; }