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

ADN Club => AutoCAD .NET API => Тема начата: Herber от 18-09-2020, 09:28:27

Название: Как узнать площадь пересечения двух полилиний
Отправлено: Herber от 18-09-2020, 09:28:27
У меня есть координаты, из которых я создал полининию.
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.         }
Название: Re: Как узнать площадь пересечения двух полилиний
Отправлено: trir от 18-09-2020, 10:18:45
а пересечение хоть есть?
Название: Re: Как узнать площадь пересечения двух полилиний
Отправлено: Александр Ривилис от 18-09-2020, 11:00:43
Herber,
Давай полный код и в каком месте eInvalidInput
Принципиально код правильный, но возможны нюансы. Например, Region очень не любит большие координаты и очень желательно перенести всё ближе к началу координат (например, на (366500.0, 127500.0)).
Название: Re: Как узнать площадь пересечения двух полилиний
Отправлено: Александр Ривилис от 18-09-2020, 11:35:49
Herber,
Кстати, а ты указал, что полилинии замкнутые?
Название: Re: Как узнать площадь пересечения двух полилиний
Отправлено: Herber от 18-09-2020, 13:32:44
Herber,
Кстати, а ты указал, что полилинии замкнутые?
Хм. А как указать что замкнутые?
Название: Re: Как узнать площадь пересечения двух полилиний
Отправлено: Александр Ривилис от 18-09-2020, 13:36:03
Herber,
Кстати, а ты указал, что полилинии замкнутые?
Хм. А как указать что замкнутые?
Задать свойство замкнутости после добавления всех вершин:
Код - C# [Выбрать]
  1. polyline.Closed = true;