public override Bounds CalculateBounds() { if (!brushContainerAsset) { return(ChiselHierarchyItem.EmptyBounds); } var modelMatrix = ChiselNodeHierarchyManager.FindModelTransformMatrixOfTransform(hierarchyItem.Transform); var bounds = ChiselHierarchyItem.EmptyBounds; s_FoundBrushes.Clear(); GetAllTreeBrushes(s_FoundBrushes, false); foreach (var brush in s_FoundBrushes) { if (!brush.Valid) { continue; } var transformation = modelMatrix * brush.NodeToTreeSpaceMatrix; var childBounds = brushContainerAsset.CalculateBounds(transformation); var magnitude = childBounds.size.sqrMagnitude; if (float.IsInfinity(magnitude) || float.IsNaN(magnitude)) { var center = transformation.GetColumn(3); childBounds = new Bounds(center, Vector3.zero); } if (childBounds.size.sqrMagnitude != 0) { if (bounds.size.sqrMagnitude == 0) { bounds = childBounds; } else { bounds.Encapsulate(childBounds); } } } return(bounds); }
public override Bounds CalculateBounds() { if (!brushContainerAsset) { return(CSGHierarchyItem.EmptyBounds); } var modelMatrix = CSGNodeHierarchyManager.FindModelTransformMatrixOfTransform(hierarchyItem.Transform); var bounds = CSGHierarchyItem.EmptyBounds; var foundBrushes = new HashSet <CSGTreeBrush>(); GetAllTreeBrushes(foundBrushes, false); foreach (var brush in foundBrushes) { var transformation = modelMatrix * brush.NodeToTreeSpaceMatrix; var assetBounds = brushContainerAsset.CalculateBounds(transformation); var magnitude = assetBounds.size.sqrMagnitude; if (float.IsInfinity(magnitude) || float.IsNaN(magnitude)) { var center = transformation.GetColumn(3); assetBounds = new Bounds(center, Vector3.zero); } if (assetBounds.size.sqrMagnitude != 0) { if (bounds.size.sqrMagnitude == 0) { bounds = assetBounds; } else { bounds.Encapsulate(assetBounds); } } } return(bounds); }