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);
        }