21 / 21 / 3
Регистрация: 23.12.2015
Сообщений: 51
|
||||||
1 | ||||||
Получить GraphicsPath из Region05.02.2017, 17:31. Показов 1940. Ответов 12
Метки нет (Все метки)
Друзья, спасите! Заблудился в трех соснах: GaphicsPath, Region и Intersect. Вот пример задачи: Кликните здесь для просмотра всего текста
и картинка: Надо получить GraphicsPath желтого Region. Либо сразу GraphicsPath общей области красной и синей фигуры.
0
|
05.02.2017, 17:31 | |
Ответы с готовыми решениями:
12
Как получить GraphicsPath? Конвертация System.Drawing.Region в GraphicsPath[] GraphicsPath Передача GraphicsPath |
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
|
|
06.02.2017, 21:18 | 2 |
1
|
21 / 21 / 3
Регистрация: 23.12.2015
Сообщений: 51
|
|
06.02.2017, 22:22 [ТС] | 3 |
Winney, премного благодарен!
Я на это не натыкался. Жаль, что там не рассматривается VB.NET... Буду рыть...
0
|
06.02.2017, 23:01 | 4 | |||||
Как понимаю вопрос в реализации перехода Region=>GraphicsPath, ну или хотя бы получение списка координат описывающих границу Region. Насколько могу судить, в рамках GDI+ вопрос не решен.
В типе Region привлекает наличие таких операций как Intersect, Union и т.д., однако ни граница, ни узлы при этом не определяются. Обычно такие операции реализуются в библиотеках связанных с GIS, но здесь они отягощены специфическими типами и структурами. Остается только самостоятельная реализация этих операций в рамках GraphicsPath. Если же нужна только граница полученного объекта Region (на картинке) то можно воспользоваться следующим кодом (демонстрационным кодом). Кликните здесь для просмотра всего текста
2
|
06.02.2017, 23:06 | 5 | |||||
Как понимаю вопрос в реализации перехода Region=>GraphicsPath, ну или хотя бы получение списка координат описывающих границу Region. Насколько могу судить, в рамках GDI+ вопрос не решен.
В типе Region привлекает наличие таких операций как Intersect, Union и т.д., однако ни граница, ни узлы при этом не определяются. Обычно такие операции реализуются в библиотеках связанных с GIS, но здесь они отягощены специфическими типами и структурами. Остается только самостоятельная реализация этих операций в рамках GraphicsPath. Если же нужна только граница полученного объекта Region (на картинке), то можно воспользоваться следующим кодом (демонстрационным кодом). Кликните здесь для просмотра всего текста
Добавлено через 1 минуту Извиняюсь за дублирование. Какой то сбой.
0
|
21 / 21 / 3
Регистрация: 23.12.2015
Сообщений: 51
|
|
06.02.2017, 23:26 [ТС] | 6 |
ovva, спасибо!!!
Детально пока не разобрался, нет пока времени. Много интересного, но на первый взгляд пока не увидел то, что мне надо. Попозже поковыряюсь... З.Ы. Я частично решил свою проблему для прямоугольных фигур через GetRegionScans, но это добавляет другую проблему - слияние субконтуров в GraphicsPath.
0
|
06.02.2017, 23:58 | 7 | |||||
Сообщение было отмечено edward_freedom как решение
Решение
Можно и точки расставить
2
|
08.02.2017, 21:00 | 8 |
Нашел реализацию булевых функций для GraphicsPath (http://www.cs.man.ac.uk/~toby/alan/software/). Некоторые проблемы возникают при отладке: появляются сообщения от MDA, хотя откомпилированный exe запускается без проблем (VS2010, NET 4.0). Как побороть? Можно в Compile Option установить NET Framework 2.0 или оставаясь в NET 4, убрать Debug/Exceptions…/MDA/PInvokeStackInbalance.
Привожу пример использования.
1
|
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
|
|
13.02.2017, 19:09 | 9 |
Предчувствую, вас ждет успех) Если несложно, по окончании решения вашей задачи разместите способ решения в FAQ раздела, ибо на мой взгляд задача достаточно интересная.
0
|
21 / 21 / 3
Регистрация: 23.12.2015
Сообщений: 51
|
|
14.02.2017, 02:54 [ТС] | 10 |
Winney, обязательно поделюсь.
На данный момент решено для прямоугольных областей и небольших скосов. Надо причесать...
0
|
21 / 21 / 3
Регистрация: 23.12.2015
Сообщений: 51
|
||||||
19.02.2017, 03:53 [ТС] | 11 | |||||
Ну вот. Function GetGraphicsPath(region As Region) As GraphicsPath()
Работает для прямоугольных областей. Не все наклонные линии обрабатывает (надо пилить ) и не понимает кривые. Кликните здесь для просмотра всего текста
Извиняюсь, я это попытался изобразить максимально развернуто, чтоб алгоритм был виден, но на подробные коментарии сил и времени не хватило. Этот алгоритм, причем в усеченом виде, вполне удовлетворил мои потребности, но заело... Будут силы и время - продолжу.
0
|
19.02.2017, 20:56 | 12 | |||||
Напомню общий смысл задачи. Определение процедуры выполнения логических преобразований для площадных объектов описываемых набором плоских координат (например, в форме GraphicsPath или любой другой форме) и получение результата операции представленного как набор плоских координат.
В рамках этой задачи представленный ТС подход, я бы сказал, малопродуктивен. Ну, если только рассматривать задачу в усеченном виде, где площадные объекты представлены исключительно прямоугольниками. В полной мере эту задачу решает код предложенный выше (https://www.cyberforum.ru/post10092548.html). Далее я предлагаю еще один вариант кода также полностью решающий задачу. Кликните здесь для просмотра всего текста
2
|
21 / 21 / 3
Регистрация: 23.12.2015
Сообщений: 51
|
|
26.02.2017, 21:18 [ТС] | 13 |
ovva, еще раз хочу раскланяться за clipper_library 6.4!
Окончательно меня эта библиотека купила классом ClipperOffset. То, что доктор прописал... Хотелось, правда, все средствами VB.NET решить (чужие решения хороши, но доблести не добавляют ), однако пока отложу это под сукно за недостатком времени.
0
|
26.02.2017, 21:18 | |
26.02.2017, 21:18 | |
Помогаю со студенческими работами здесь
13
Перемещение фигуры GraphicsPath GraphicsPath и кастомный ImageBox Как использовать GraphicsPath.Outline method? Перемещение GraphicsPath плавно в нужные координаты Где прочитать про использование GraphicsPath с примерами Как убрать лесенки используя метод GraphicsPath C# Windows Forms Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |