我正在嘗試爲旋轉的矩形創建一個邊界框,我允許用戶通過指定角度進行旋轉。要做到這一點,我給你矩形的RotateTransform的的RenderTransform和編輯的角度來做到這一點,它完美的作品:爲什麼RotateTransform.Transform()返回這個Point?
public void Rotate(double _angle)
{
rotateTransform.Angle = _angle;
}
的問題,當我嘗試構建邊界框這個旋轉矩形出現。在此之前,我什麼都試過了我能找到這裏了,這給了我準確的結果是唯一的功能:
GeneralTransform transform = Rectangle.TransformToVisual(Container);
Rect boundingBox = transform.TransformBounds(new Rect(Rectangle.RenderSize));
不過,我並不總是有機會獲得容器傳遞給TransformToVisual()和任何我在這裏看到的其他排列返回不正確的值。所以我決定通過計算矩形的4個角點(我可以訪問左邊,頂部,寬度和高度)來構建我自己的內部邊界框,然後使用之前的RotateTransform對這4個點進行變換:
Point upperLeft = new Point(Rectangle.Left, Rectangle.Top);
Point upperRight = new Point(Rectangle.Left + Rectangle.Width, Rectangle.Top);
Point lowerLeft = new Point(Rectangle.Left, Rectangle.Top + Rectangle.Height);
Point lowerRight = new Point(Rectangle.Left + Rectangle.Width, Rectangle.Top + Rectangle.Height);
upperLeft = rotateTransform.Transform(upperLeft);
upperRight = rotateTransform.Transform(upperRight);
lowerLeft = rotateTransform.Transform(lowerLeft);
lowerRight = rotateTransform.Transform(lowerRight);
這適用於矩形未旋轉(rotateTransform.Angle == 0)的情況,但每當它旋轉時都會返回奇數值。我的問題是爲什麼?我對WPF還是比較陌生的,我似乎無法弄清楚這一點。我也嘗試過傳遞四角({0,0},{Width,0},{0,Height},{Width,Height})的局部空間版本,即使矩形沒有旋轉。
UPDATE 我解決了我的問題,請參閱下面的答案。
第一個PLZ告訴所需的目標,然後告訴你的方法。可能有更好的方法。 – AnjumSKhan
我期望的目標是爲我的旋轉形狀創建一個邊界框,該邊框完全符合形狀。我提到了我在我的問題(TransformToVisual().TransformBounds()和RotateTransform.Transform(Point))中嘗試過的內容,我想知道後者爲什麼會返回不正確的數據),還有其他特定的需求嗎?如果這能提供幫助,我可以提供一些例子嗎? – RichardJones
你是什麼意思的邊界框?你的意思是顯示一個新的矩形外部旋轉形狀? – AnjumSKhan