对于某种掩码对话框,我希望能够在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 :(得分: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
);
希望这有助于其他人!