【发布时间】:2011-02-16 01:40:37
【问题描述】:
我想绘制以下红色多边形:
问题是如果我使用这样的东西:
Polygon poly = new Polygon();
poly.StrokeThickness = 2;
poly.Stroke = Brushes.Black;
PointCollection points = new PointCollection();
for (int i = 0; i < this.NumberOfMetrics; i++)
{
points.Add(new Point(MAX_VALUE - this.Metrics[n, i] * Math.Cos(DegreeToRadian(i * (360 / (this.NumberOfMetrics)))), MAX_Y_GUI - this.Metrics[n, i] * Math.Sin(DegreeToRadian(i * (360 / (this.NumberOfMetrics))))));
}
poly.Points = points;
然后多边形总是被“填充”,在上面的例子中,红色和绿色的多边形被绘制出来。
我已经尝试将 4 个“内部”点添加到 PointCollection,但没有绘制任何内容。那么我该如何实现呢?
我尝试了大卫提出的解决方案:
for (int n = 0; n < this.NumberOfRevisions; n++)
{
Path path = new Path();
CombinedGeometry geometry = new CombinedGeometry();
geometry.GeometryCombineMode = GeometryCombineMode.Union;
Polygon poly = new Polygon();
PointCollection points = new PointCollection();
for (int i = 0; i < this.NumberOfMetrics; i++)
{
points.Add(new Point(MAX_VALUE - this.Metrics[n, i] * Math.Cos(DegreeToRadian(i * (360 / (this.NumberOfMetrics)))), MAX_Y_GUI - this.Metrics[n, i] * Math.Sin(DegreeToRadian(i * (360 / (this.NumberOfMetrics))))));
}
poly.Points = points;
geometry.Geometry1 = poly.RenderedGeometry;
geometry.Geometry2 = poly.RenderedGeometry;
path.Data = geometry;
polygons.Add(poly);
paths.Add(path);
}
这只是一个测试,但我认为我应该得到与以前相同的结果,但它没有绘制任何东西。我的代码有问题吗?
【问题讨论】:
-
你试过先画红色多边形,再画绿色多边形吗?另外,你在哪里改变颜色,一个是红色的,另一个是绿色的?
-
我认为了解这些数据的含义可能会有所帮助。
-
@dthorpe 是的,我这样做了,然后它起作用了,因为第二个多边形位于第一个多边形的顶部。但是我其中一种颜色是透明的,它不再起作用了。