Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 01-10-2020, 00:04:08

Название: Определение площади пересечения двух замкнутых полилиний
Отправлено: Алексей Терно от 01-10-2020, 00:04:08
Всем привет! Какие вы знаете способы определения площади пересечения двух замкнутых полилиний? Я сейчас использую Region.BooleanOperation(), но при большом количестве подобных проверок общее время выполнения кода неприлично возрастает. Вот думаю, как можно избавиться от этих Region.
PS. приложение работает в Civil3D, так что я могу использовать возможности и Map3D и Civil3D и Architecture, но только я не знаю, какие :(
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Александр Ривилис от 01-10-2020, 00:20:03
Алексей Терно,
Ну тогда писать свой алгоритм. Кстати, а дуговые сегменты могут быть? Это прилично усложнит алгоритм.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Алексей Терно от 01-10-2020, 00:26:46
Кстати, а дуговые сегменты могут быть?
Да - дуговые сегменты будут всегда ((
Писать свой алгоритм - вы имеете в виду находить точки пересечения и "вручную" получать контур пересечения?
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Александр Ривилис от 01-10-2020, 08:00:46
Кстати, а дуговые сегменты могут быть?
Да - дуговые сегменты будут всегда ((
Писать свой алгоритм - вы имеете в виду находить точки пересечения и "вручную" получать контур пересечения?
Именно.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: avc от 01-10-2020, 10:37:58
По собственному опыту - искать пересечения сегментов не быстрее. Даже скорее замедление получится - количество тестов "пересекает/не пересекает" увеличится. Так что если реально много полилиний, то становится выгодно померить их габариты и искать пересечения через RTree.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: trir от 01-10-2020, 10:43:05
https://www.researchgate.net/publication/242385136_A_New_Algorithm_for_Boolean_Operations_on_General_Polygons
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: avc от 01-10-2020, 10:45:20
Цитировать
All rights reserved.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Алексей Терно от 01-10-2020, 12:37:31
В инструментах редактирования AD есть команда "Обрезать" (LineworkCrop), которая делает то, что надо:
(https://i.ibb.co/xMKvMzR/2020-10-01-12-34-08.png)
Может до неё можно как-то добраться?
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Александр Ривилис от 01-10-2020, 12:43:03
Алексей Терно,
Посмотри на всякий случай: https://sourceforge.net/projects/polyclipping/
В любом случае дуговые сегменты для использования в этом алгоритме придётся аппроксимировать. Впрочем это совсем не сложно.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Алексей Терно от 03-10-2020, 23:33:18
Александр Ривилис, а где вы смотрели набор параметров для команды map_dwgtrimobj из этой темы https://adn-cis.org/forum/index.php?topic=7676.msg26032#msg26032 (https://adn-cis.org/forum/index.php?topic=7676.msg26032#msg26032)? Может получиться аналогичным способом вызвать LineworkCrop?
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Александр Ривилис от 03-10-2020, 23:39:15
Александр Ривилис, а где вы смотрели набор параметров для команды map_dwgtrimobj из этой темы https://adn-cis.org/forum/index.php?topic=7676.msg26032#msg26032 (https://adn-cis.org/forum/index.php?topic=7676.msg26032#msg26032)? Может получиться аналогичным способом вызвать LineworkCrop?
Где находил тогда уже не вспомню, но Google подсказывает даже несколько ссылок: https://documentation.help/LDD-ARX-CPP-SDK/map_dwgtrimobj.htm
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Александр Ривилис от 04-10-2020, 16:48:21
Может получиться аналогичным способом вызвать LineworkCrop?
Честно говоря я не понял что это тебе может дать.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Алексей Терно от 11-11-2020, 16:16:38
Честно говоря я не понял что это тебе может дать.
Я надеюсь, что эта команда будет работать быстрее, чем области.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Александр Ривилис от 11-11-2020, 16:33:12
В любом случае для неё нет API.
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Judas от 19-11-2020, 16:16:44
Ой
Название: Re: Определение площади пересечения двух замкнутых полилиний
Отправлено: Александр Ривилис от 19-11-2020, 16:27:27
Judas,
Этот алгоритм описан в первом же сообщении в теме, и от которого хотели бы избавится. Не понятно зачем нужно было только приводить свои собственные классы и методы, которые совсем не поясняют алгоритм, а только всё запутывают...