绘制虚线边框

时间:2009-09-10 22:42:57

标签: mapping geometry gdi+ rendering

想象一下,您正在绘制县界的地图。您将获得一组多边形,每个边界一个,并绘制每个多边形。

在两个县共享边界的地方,你最终会画两次边界。在没有部分透明效果的情况下,并且使用坚固的笔,这没有问题。

但是,在地图上,这种边界通常用点划线表示。在这种情况下,可能会出现如下所示的情况:

alt text

注意破折号图案(通常是点划线点)如何在两个区域共享边框的地方搞砸。在这种情况下,它恰好变成了一个长点模式,但总的来说它可以做任何事情,从巧合地看起来正常到创建实线。

地图渲染软件/应该如何防止此类工件发生?

5 个答案:

答案 0 :(得分:2)

您的画笔图案将某些像素的颜色设置为黑色并仅留下一些像素。您可以设置画笔图案以将这些像素设置为白色(或任何背景颜色),而不是单独留下像素吗?

另一种可能性是始终绘制两次县界 - 一次是纯白色图案,另一种是你选择的画笔图案。

答案 1 :(得分:2)

该工件是由于边框被绘制两次。您可以尝试不通过保留已经在内存中绘制的段列表来绘制两次边框部分,而不是试图压制这些工件,如果遇到已经绘制的拉伸,则不会再次绘制它。

答案 2 :(得分:2)

我认为他们将边界线分成几段,然后删除重叠。

这主要是一个几何问题,而不是绘图问题。

答案 3 :(得分:2)

您可以使用 Zip-a-tone 样式,而不是使用虚线,如下所示:

alt text

Zip-a-tone是这种图形艺术的东西,基本上是一块粘性的塑料片,上面有规则的(可印刷的)点状图案。要使用它,你可以在你的图纸上放一大块,然后在你想要拉链的图纸上的区域周围切割,然后剥掉你不想要的部分。

对于这张图片,我刚用一个交替的棋盘图案,线条宽两个像素。因为所有线都是从这个棋盘图案的一个大(虚拟)块中抽出的,所以你永远不必担心关节处的奇怪伪影或任何重叠效应。

有角度的线条有点棘手,但基本上你可以想象线条的边缘切割像素,因此你可以在适当的等级阴影下绘制它们而不是全黑色(在45度线的情况下) ,像素用RGB(170,170,170)绘制,但任何角度都可以用适当的阴影渲染。)

我不确定GDI +是否可以使用纹理画笔轻松完成此操作,但也许。否则你必须自定义代码。这种方法优于纯灰色线条的优点是,这将允许一些背景显示。

答案 4 :(得分:0)

这是一个我从未真正想过的有趣问题。我认为唯一真正的解决方案是将整个复杂图形渲染为一系列不会在任何地方重叠的线条或路径。 GDI +没有以任何自动方式处理这种情况,我并不感到惊讶。