我已经靠左,顶,宽和高了。我想将其转换为Path并获取数据。
有没有办法做到这一点。我只想检查两个路径是否相互重叠并使用此方法。
任何建议将不胜感激。 TIA!
Geometry geo1 = parentShape.Data.Clone();
geo1.Transform = parentShape.RenderTransform;
Geometry geo2 = childShape.Data.Clone();
geo2.Transform = childShape.RenderTransform;
geo1.FillContainsWithDetail(geo2);
编辑: 请看我的代码。让我知道我哪里错了:(
private bool CheckIfOverlapping(Rect rect1, Rect rect2, double rotation)
{
Geometry geo1 = RotatedRect(rect1, 0);
Geometry geo2 = RotatedRect(rect2, rotation);
var response1 = geo1.FillContainsWithDetail(geo2);
var response2 = geo2.FillContainsWithDetail(geo1);
var response3 = geo2.FillContains(geo1);
var response4 = geo1.FillContains(geo2);
return response4 || response3 || response1 == IntersectionDetail.Intersects || response2 == IntersectionDetail.Intersects;
}
private static Geometry RotatedRect(Rect rect, double rotation)
{
var centerX = (rect.Left + rect.Right) / 2;
var centerY = (rect.Top + rect.Bottom) / 2;
return new RectangleGeometry
{
Rect = rect,
Transform = new RotateTransform(rotation, centerX, centerY),
};
}
public Main()
{
var rect1 = new Rect(3546.5, 2734, 0, 0);
var rect2 = new Rect(3510, 2731, 60, 52);
Debug.WriteLine(CheckIfChildIsInsideParent(rect1, rect2, 180));
}
答案 0 :(得分:0)
您可以使用以下方法从旋转的Rect创建几何:
private static Geometry RotatedRect(Rect rect, double rotation)
{
var centerX = (rect.Left + rect.Right) / 2;
var centerY = (rect.Top + rect.Bottom) / 2;
return new RectangleGeometry
{
Rect = rect,
Transform = new RotateTransform(rotation, centerX, centerY)
};
}
像这样尝试:
var rect1 = new Rect(100, 100, 100, 100);
var rect2 = new Rect(200, 100, 100, 100);
var geo1 = RotatedRect(rect1, 45);
var geo2 = RotatedRect(rect2, 45);
Debug.WriteLine(geo1.FillContainsWithDetail(geo2));