Вопрос

Представьте, что вы рисуете карту границ округа. Вам предоставляется набор полигонов, по одному для каждой границы, и вы рисуете каждый полигон.

В тех местах, где два округа разделяют границу, вы просто заканчиваете рисование границы дважды. При отсутствии эффектов частичной прозрачности и с твердым пером это не проблема.

Но на картах такие границы обычно показаны пунктирными линиями. В этом случае могут возникнуть ситуации, подобные изображенной ниже:

alt text

Обратите внимание на то, как шаблон штрихов, который обычно представляет собой пунктир-точка-точка, облажается, когда две области имеют общую границу. В этом случае он стал шаблоном с длинными точками, но в целом он мог делать что угодно от совпадения нормального вида до создания сплошной линии.

Как / должно программное обеспечение для рендеринга карты предотвращать появление артефактов такого типа?

Это было полезно?

Решение

Артефакт связан с тем, что кусок границы нарисован дважды. Вместо того, чтобы пытаться подавить такие артефакты, вы можете попытаться не рисовать граничные участки дважды, сохраняя список уже нарисованных в памяти сегментов, и если вы столкнетесь с уже нарисованным отрезком, вы больше его не будете рисовать.

Другие советы

Шаблон кисти окрашивает несколько пикселей в черный цвет и оставляет некоторые пиксели в покое. Вместо того, чтобы оставить пиксель в одиночку, можете ли вы настроить свой рисунок кистью таким образом, чтобы эти пиксели были белого цвета (или любого другого цвета фона)?

Еще одна возможность - всегда рисовать границы графства дважды - один раз сплошным белым рисунком, а затем снова выбранным рисунком кисти.

Я предполагаю, что они разбивают свои границы на сегменты, а затем удаляют перекрытия.

Это в основном геометрическая проблема, а не проблема рисования.

Вместо пунктирной линии вы можете использовать стиль Zip-a-tone , например:

alt text

Zip-a-tone - это графические графические материалы, представляющие собой в основном липкий лист пластика с регулярным (пригодным для печати) рисунком из точек. Чтобы использовать его, вы должны положить большой лист поверх рисунка и обрезать его по областям на чертеже, которые вы хотели бы застегнуть на молнии, а затем отделить части, которые вам не нужны.

Для этого изображения я просто использовал чередующийся рисунок шахматной доски с линиями шириной два пикселя. Поскольку все линии нарисованы из одного большого (виртуального) блока этого шаблона шахматной доски, вам никогда не придется беспокоиться о странных артефактах в соединениях или каких-либо эффектах наложения.

Угловые линии немного сложны, но в основном вы представляете, как края линии прорезают пиксели, и, таким образом, вы рисуете их с соответствующим оттенком оттенка вместо полного черного (в случае линии 45 градусов здесь пиксели отрисовываются с помощью RGB (170, 170, 170), но любой угол может отображаться с соответствующими оттенками).

Я не уверен, что GDI + мог бы сделать это легко, используя текстурированные кисти, но возможно. В противном случае вам придется его кодировать. Преимущество этого метода перед сплошными серыми линиями состоит в том, что это позволит некоторым фонам просвечивать.

Это интересный вопрос, о котором я никогда не задумывался. Я думаю, что единственное реальное решение - визуализировать всю сложную фигуру в виде серии линий или путей, которые нигде не перекрываются. Я не удивлен, что GDI + не обрабатывает эту ситуацию автоматически.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top