反转未填充的几何体

时间:2012-04-16 13:05:47

标签: c# geometry intersect invert

对于某种掩码对话框,我希望能够在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

有没有人能够实现只有矩形(第一张图片中的黑线)得到保留并且其余部分被返回(用灰色填充)的结果?

谢谢你们!

1 个答案:

答案 0 :(得分: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
                );

希望这有助于其他人!