2009-01-13 23 views
4

鑑於我有一個包含許多形狀的畫布,現在可以說矩形。如何在GDI +中進行實際形狀測量(英寸)的旋轉形狀測試?

每個形狀都有一個位置(英寸),大小(英寸)和旋轉角度(度)。

當鼠標點擊事件發生在畫布內部的像素位置(x,y)內時。

考慮到旋轉角度和測量單位轉換,我想檢查點擊的鼠標位置是在特定形狀的內部還是內部。

你能幫忙嗎?

回答

3

我找到了答案(我要人測量轉換爲像素,以確保它會正確計算):

public static bool HitTest(Rectangle bounds, float angle, Point location) 
     { 
      if (angle == 0) return bounds.Contains(location); 

      using (Matrix matrix = new Matrix()) 
      { 
       matrix.RotateAt(angle, Center(bounds)); 
       using (GraphicsPath path = new GraphicsPath()) 
       { 
        path.AddRectangle(bounds); 
        path.Transform(matrix); 
        return path.IsVisible(location.X, location.Y); 
       } 
      } 
     } 
4

你的問題在細節上非常短缺,我只能提供一個通用答案。數學運算是最快的方法。輪換可以使這很困難。

您可以使用命中測試位圖緩慢而輕鬆地解決它。使用您現在使用的相同代碼將圖形渲染到屏幕上,將圖形渲染爲位圖。但現在使用編碼形狀編號的顏色。通過GetPixel(),命中測試現在變得簡單快捷。小心關閉圖像增強設置,如抗鋸齒。首先將其渲染到屏幕上,並使用ZoomIt仔細查看像素。

+0

我正要給一個類似的答案,這是任意形狀的物體的最佳解決方案(或者精靈!)。 – PhiLho 2009-01-13 12:35:05