如何在将对象添加到面板之前知道对象是否会与另一个对象发生碰撞?

时间:2014-01-12 20:01:59

标签: wpf collision-detection collision

请参阅下面的代码。

我有一个我没有添加到WPF面板的对象 - 在这种情况下是一个简单的Canvas。当我调试行“var A1 = Poly.RenderedGeometry”时,我唯一看到的是{}。根本没有数据 - 没有pathGeometry,没有。

您能否解释一下我的代码中出了什么问题?如何知道我要添加到画布的Polygon是否不会与其他多边形碰撞?

// First and Second are 2 points, CreateNewTriangle adds a random point
// and creates a new triangle polygon
        var Poly = CreateNewTriangle(First, Second);

        if (G1.Children.Count == 0)
        {
            G1.Children.Add(Poly);
        }
        else
        {
         // In debug this row is empty - no actual geometry is present 
            var A1 = Poly.RenderedGeometry;

            foreach (Polygon item in G1.Children)
            {
                if (!item.Equals(Poly))
                {
                    var a2 = item.RenderedGeometry;
                    var col = A1.FillContainsWithDetail(a2);
                    if (!(col == IntersectionDetail.Empty))
                    {
                        IsAllGood = false;
                        break;
                    }
                }

            }
        }

1 个答案:

答案 0 :(得分:2)

您可能没有在元素中获取任何数据,因为该元素在屏幕上不存在,因此没有机会渲染,或者渲染过程尚未发生。你应该做的是强制MeasureArrange来电,之后你应该为RenderedGeometry

填充一些内容
var Poly = CreateNewTriangle(First, Second);
Poly.Measure(new Size(double.MaxValue, double.MaxValue));
Poly.Arrange(new Rect(new Point(0, 0), new Size(double.MaxValue, double.MaxValue)));