2012-04-16 88 views
1

對於某些類型的掩碼對話框,我希望能夠在C#中反轉幾何。例如,我想反轉一個矩形。我已經爲填充的矩形工作,但同樣不適用於非填充的矩形。反轉未填充的幾何對象

例如,如果我有一個畫布上該矩形:

rectangle http://img713.imageshack.us/img713/3661/rectangleu.png

我顛倒當前矩形與下面的代碼:

  RectangleGeometry line = new RectangleGeometry(_myRectangle); 

      RectangleGeometry geo = new RectangleGeometry(_myCanvasRectangle);        

      PathGeometry intersect = Geometry.Combine(line, geo, GeometryCombineMode.Xor, null); 

      drawingContext.DrawGeometry(
       new SolidColorBrush(Color.FromArgb(99, _myObjectColor.R, _myObjectColor.G, _myObjectColor.B)), 
       new Pen(new SolidColorBrush(_myObjectColor), _myActualLineWidth), 
       intersect 
       ); 

我得到以下結果(其中灰色區域是填充區域)

filled rectangle http://img215.imageshack.us/img215/9563/invertedrectangle.png

有沒有人如何才能實現只有矩形(第一個圖像中的黑線)被省掉而剩下的被返回(填充灰色)的結果?

謝謝你們!

回答

0

所以我自己找到了解決方案: 看來C#下的幾何圖形總是填充「形狀」。但是通過使用GetWidenedPathGeometry方法,您可以獲得輪廓(即使具有期望的筆劃厚度!)! 我的例子看起來像這樣:

  RectangleGeometry outerRect = new RectangleGeometry(_myRectangle); 
      RectangleGeometry geo = new RectangleGeometry(_myCanvasRectangle); 
      PathGeometry outerRectLine = outerRect.GetWidenedPathGeometry(new Pen(new SolidColorBrush(Colors.White), _myActualLineWidth)); 

      PathGeometry intersect = Geometry.Combine(geo, outerRectLine, GeometryCombineMode.Exclude, null); 

      drawingContext.DrawGeometry(
       new SolidColorBrush(System.Windows.Media.Color.FromArgb(99, _myObjectColor.R, _myObjectColor.G, _myObjectColor.B)), 
       new System.Windows.Media.Pen(new SolidColorBrush(Colors.White), ActualLineWidth), 
       intersect 
       ); 

希望這可以幫助別人!