public static void RenderBounds(DrawEventArgs e, WorldView world, IEnumerable <BvhIterator> allResults)
 {
     foreach (var bvhIterator in allResults)
     {
         InteractionLayer.RenderBounds(e, world, bvhIterator.TransformToWorld, bvhIterator.Bvh, bvhIterator.Depth);
     }
 }
        public void Draw(GuiWidget sender, IObject3D item, bool isSelected, DrawEventArgs e, Matrix4X4 itemMaxtrix, WorldView world)
        {
            if (isSelected)
            {
                var center = item.GetAxisAlignedBoundingBox().Center;

                var traceData = item.GetBVHData();

                var xy = traceData.Contains(center);

                var items = traceData.FilterX(p =>
                {
                    var worldToAxis = Matrix4X4.Invert(p.WorldMatrix);

                    var localPoint = Vector3Ex.Transform(center, worldToAxis);
                    return(p.BvhItem.GetAxisAlignedBoundingBox().Contains(localPoint));
                }).ToArray();

                if (items.Any())
                {
                    int i = 0;
                    foreach (var p in items)
                    {
                        InteractionLayer.RenderBounds(e, world, p.Matrix, p.BvhItem, i++);
                    }
                }
            }
        }
        public void Draw(GuiWidget sender, DrawEventArgs e, Matrix4X4 itemMaxtrix, WorldView world)
        {
            // RenderSceneTraceData
            var bvhIterator = new BvhIterator(scene?.TraceData(), decentFilter: (x) =>
            {
                var center      = x.Bvh.GetCenter();
                var worldCenter = Vector3Ex.Transform(center, x.TransformToWorld);
                if (worldCenter.Z > 0)
                {
                    return(true);
                }

                return(false);
            });

            InteractionLayer.RenderBounds(e, world, bvhIterator);
        }