Создание эффекта «внутреннего удара» из полигона

2

Я рисую целую кучу Полигоны на холст, большинство из которых разделяют край, по крайней мере, с одним другим полигоном. Я хотел бы указать, что Polygon является "специальным", изложив его, однако из-за перекрывающихся ребер Stroke на полигоне имеет тенденцию частично нарисоваться другим полигоном, заставляя Stroke выглядеть тоньше, чем это должно быть в местах. Кроме того, в зависимости от порядка рисования полигон может иметь свой штрих, почти полностью покрытый окружающими. Расстояние между полигонами не очень привлекательное, так как видимые промежутки между полигонами гораздо менее предпочтительны для этой проблемы "тонкого удара".

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

Мой вопрос сводится к; как я могу получить такой внутренний многоугольник из внешнего, или не смог бы, как иначе я мог бы достичь этого эффекта?

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

  • 0
    Можете ли вы контролировать порядок рисования, чтобы специальные многоугольники рисовались последними?
  • 0
    Здесь задействовано много полигонов, так что это будет дорого. Также нет гарантии, что они не граничат друг с другом.
Показать ещё 1 комментарий
Теги:
wpf
shapes

1 ответ

1
Лучший ответ

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

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

Другой способ, которым вы могли бы пойти, - использовать z-порядок и смещать "более толстый" многоугольник с небольшим отрицательным расстоянием z.

Еще одним способом было бы использовать порядок тиража; нарисуйте более длинные полигоны, что предотвратит их перегрузку окружающими полигонами.

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

Там много вариантов для вас; надеюсь, что вы найдете тот, который хорошо работает!

  • 0
    Ваша идея масштабирования интересна, я поэкспериментирую с ней, чтобы посмотреть, будет ли она работоспособной. Манипуляции по Z-порядку и порядку прорисовки потерпят неудачу, если два «специальных» полигона граничат друг с другом, что, как я подозреваю, не является редкостью. Утолщение линий также интересно, но я беспокоюсь о производительности.
  • 0
    Рисование линий различной толщины должно выполняться значительно быстрее, чем рисование полигонов, поскольку вы рисуете один раз, а не два для каждого общего ребра.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню