2009-10-16 35 views
0

我发现,即使是重叠的形状的号码添加到油画像:消失界

GeometryGroup gg = new GeometryGroup(); 
EllipseGeometry e1 = new EllipseGeometry(new Point(10, 10), 20, 20); 
EllipseGeometry e2 = new EllipseGeometry(new Point(10, 10), 20, 20); 
//EllipseGeometry e3 = new EllipseGeometry(new Point(10, 10), 20, 20); 
gg.Children.Add(e1); 
gg.Children.Add(e2); 
//gg.Children.Add(e3); 

Path p = new Path(); 
p.Data = gg; 
p.Fill = Brushes.Red; 

MyCanvas.Children.Add(p); 

“清除”所有以前的形状。如果您运行这些代码,您将看不到任何内容,但如果取消注释某些行,则会出现一个圆圈。有人能够解释这种奇怪的行为吗?

回答

2

您需要相应地设置几何组的FillRule。它的值必须是NonZero。目前你画正是在彼此的顶部每个形状,从而导致该地区是白色与偶数的形状,因为EvenOdd是默认的填充规则:

alt text http://i.msdn.microsoft.com/ms595394.ref_mil_fillrule_stars(en-us,VS.90).png

(图片来自http://msdn.microsoft.com/en-us/library/system.windows.media.geometrygroup.fillrule.aspx

GeometryGroup gg = new GeometryGroup(); 
gg.FillRule = FillRule.Nonzero; 
EllipseGeometry e1 = new EllipseGeometry(new Point(10, 10), 20, 20); 
EllipseGeometry e2 = new EllipseGeometry(new Point(10, 10), 20, 20); 
gg.Children.Add(e1); 
gg.Children.Add(e2); 

Path p = new Path(); 
p.Data = gg; 
p.Fill = Brushes.Red; 
+0

它的工作原理。谢谢! – Overdose 2009-10-16 21:17:46

1

发生这种情况是因为您的省略号正好重叠。 GeometryGroup的默认FillRule是EvenOdd,这意味着如果从点到外部的一条线跨越奇数个边界,则在该形状内部考虑一个点。这有点像形状的异或规则。在你的情况下,你的形状内的点总是会跨越偶数个边界(既可以是e1也可以是e2),因此,在几何体内没有考虑点,也没有点被填充。非正式地,e2在e1中创建了一个“洞”,它消耗了整个e1。请参阅GeometryGroup page on MSDN上的插图。

如果您将FillRule更改为NonZero,您将看到更多的“联合”式效果,这可能是您尝试实现的效果。