Как узнать площадь пересечения двух полилиний

Автор Тема: Как узнать площадь пересечения двух полилиний  (Прочитано 2820 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн HerberАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
У меня есть координаты, из которых я создал полининию.
366544,53 127454,14
366558,76 127454,67
366580,48 127454,16
366580,26 127448,87
366576,94 127433,43
366551,19 127421,21
366536,79 127401,27
366528,13 127405,83
366533,47 127429,06
Вот так я создаю полилинии

Код - C# [Выбрать]
  1. var polyline = new Polyline();
  2. polylinre.AddVertexAt(0, new Point2d(366544.53,127454.14), 0, 0, 0);
  3. ...
Аналогично и для другой полилинии

В сети нашёл код, который как мне кажется удовлетворяет моим нуждам, но он сразу выкидывает ошибку eInvalidInput


Код - C# [Выбрать]
  1. private double GetIntersectionArea(Polyline pline1, Polyline pline2)
  2.         {
  3.             using (Region region1 = CreateRegionFromPolyline(pline1))
  4.             using (Region region2 = CreateRegionFromPolyline(pline2))
  5.             {
  6.                 region1.BooleanOperation(BooleanOperationType.BoolIntersect, region2);
  7.                 return region1.Area;
  8.             }
  9.         }
  10.  
  11.         private Region CreateRegionFromPolyline(Polyline pline)
  12.         {
  13.             DBObjectCollection source = new DBObjectCollection();
  14.             source.Add(pline);
  15.             DBObjectCollection regions = Autodesk.AutoCAD.DatabaseServices.Region.CreateFromCurves(source);
  16.             return (Region)regions[0];
  17.         }

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
а пересечение хоть есть?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Herber,
Давай полный код и в каком месте eInvalidInput
Принципиально код правильный, но возможны нюансы. Например, Region очень не любит большие координаты и очень желательно перенести всё ближе к началу координат (например, на (366500.0, 127500.0)).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Herber,
Кстати, а ты указал, что полилинии замкнутые?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн HerberАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Herber,
Кстати, а ты указал, что полилинии замкнутые?
Хм. А как указать что замкнутые?

Отмечено как Решение Herber 20-09-2020, 21:10:30

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Herber,
Кстати, а ты указал, что полилинии замкнутые?
Хм. А как указать что замкнутые?
Задать свойство замкнутости после добавления всех вершин:
Код - C# [Выбрать]
  1. polyline.Closed = true;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение