Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Union (Intersect) Полигонов .NET

Union (Intersect) Полигонов .NET

Ответ
Поиск в этой теме
Непрочитано 05.04.2013, 08:14 #1
Union (Intersect) Полигонов .NET
firefox0013
 
Регистрация: 05.04.2013
Сообщений: 8

Возможно ли средствами C# и AutoCAD провести операции Union (Intersect) над полигонами? Знаю что есть команды UNION и INTERSECT но они работают только с телами. А необходимо работать именно с полигонами.
Просмотров: 4209
 
Непрочитано 05.04.2013, 08:51
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Полигон - это что? Такого примитива в чистом AutoCAD я не знаю...
Есть регион, есть полилиния, есть MPOLYGON (порождение AutoCAD MAP / Civil). Но полигон?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.04.2013, 10:02
#3
firefox0013


 
Регистрация: 05.04.2013
Сообщений: 8


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Полигон - это что? Такого примитива в чистом AutoCAD я не знаю...
Есть регион, есть полилиния, есть MPOLYGON (порождение AutoCAD MAP / Civil). Но полигон?
Имел в виду MPOLYGON
firefox0013 вне форума  
 
Непрочитано 05.04.2013, 10:47
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Наверное, для этого надо использовать метод AppendMPolygonLoop.
Миниатюры
Нажмите на изображение для увеличения
Название: MPolygon.jpg
Просмотров: 100
Размер:	63.2 Кб
ID:	100447  
Do$ вне форума  
 
Автор темы   Непрочитано 05.04.2013, 12:50
#5
firefox0013


 
Регистрация: 05.04.2013
Сообщений: 8


Цитата:
Сообщение от Do$ Посмотреть сообщение
Наверное, для этого надо использовать метод AppendMPolygonLoop.
Да получается что-то похожее. только непонятен 3 параметр. Откуда его взять? А как сделать Intersect?
firefox0013 вне форума  
 
Непрочитано 05.04.2013, 15:43
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Вообще, MPolygon интересный объект... В нем пересечения составляющих контуров в принципе невозможны. Поэтому, если нужно получить фигуру пересечения двух таких полигонов, придется, скорее всего, анализировать их контуры, искать точки пересечения, отстраивать новый контур и по нему создавать новый полигон.
Do$ вне форума  
 
Автор темы   Непрочитано 07.04.2013, 05:46
#7
firefox0013


 
Регистрация: 05.04.2013
Сообщений: 8


Код:
[Выделить все]
MPolygon mpUnion = new MPolygon(); 
      for (int i = 0; i < mpList.Count; i++)
      {
           for (int j = 0; j < (mpList[i] as MPolygon).NumMPolygonLoops; j++)
          {
                 MPolygonLoop _lyp = (mpList[i] as MPolygon).GetMPolygonLoopAt(j);
                 Autodesk.AutoCAD.Geometry.Tolerance tt = new Autodesk.AutoCAD.Geometry.Tolerance();
                 mpUnion.AppendMPolygonLoop(_lyp, true, tt.EqualPoint);  
          }
      }
После вот такого кода получил

[IMG][/IMG]

Значит выполнить Union наверно можно. Непонятно почему в месте пересечения он пустой получился. Может быть что то нето с параметрами?
Что такое tolerance и откуда оно берется кто нибудь знает?
firefox0013 вне форума  
 
Непрочитано 07.04.2013, 11:22
#8
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Я так думаю, что это допуск для сравнения координат. Содержит два свойства типа double - EqualPoint и EqualVector. Т.к. простое сравнение методом Equal для double иногда дает неверный результат (тут есть подробное обяснение), наверное поэтому и используется сравнение с помощью Tolerance.
Do$ вне форума  
 
Автор темы   Непрочитано 07.04.2013, 17:48
#9
firefox0013


 
Регистрация: 05.04.2013
Сообщений: 8


Цитата:
Сообщение от Do$ Посмотреть сообщение
Я так думаю, что это допуск для сравнения координат. Содержит два свойства типа double - EqualPoint и EqualVector. Т.к. простое сравнение методом Equal для double иногда дает неверный результат (тут есть подробное обяснение), наверное поэтому и используется сравнение с помощью Tolerance.
Да похоже что так. наверно надо что то типа

Код:
[Выделить все]
 mpUnion.AppendMPolygonLoop(_lyp, false, 1);
Странно что базовые операции взывают проблемы. Сейчас для UNION и INTERSEC приходится использовать ArcGis Geometry service
firefox0013 вне форума  
 
Непрочитано 09.04.2013, 17:08
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


RTFM
http://wikihelp.autodesk.com/AutoCAD...047-Comparin47
OSGeo.MapGuide.MgGeometry
trir вне форума  
 
Автор темы   Непрочитано 10.04.2013, 07:14
#11
firefox0013


 
Регистрация: 05.04.2013
Сообщений: 8


Цитата:
Сообщение от trir Посмотреть сообщение
Идея очень хорошая только есть ограничение - надо чтоб работало под AutoCad а OSGeo.MapGuide.MgGeometry в нем нету есть в Map_3D и Civil.
firefox0013 вне форума  
 
Непрочитано 10.04.2013, 07:27
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Что мешает поставить OSGeo.MapGuide или dotSpatial?
trir вне форума  
 
Непрочитано 10.04.2013, 08:41
#13
TAPRAA

до-диез
 
Регистрация: 15.02.2013
Томск
Сообщений: 20
<phrase 1= Отправить сообщение для TAPRAA с помощью Skype™


Цитата:
Сообщение от trir Посмотреть сообщение
Что мешает поставить OSGeo.MapGuide или dotSpatial?
А можно немного поподробнее про пересечение/объединение через dotSpatial?
TAPRAA вне форума  
 
Непрочитано 10.04.2013, 08:48
1 | #14
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Читайте документацию, я так глубоко не копал...
http://www.mapwindow.org/downloads/d...1.0/Index.html
http://www.mapwindow.org/downloads/d...al-1.0-Docs.7z
Namespace: DotSpatial.Data
FeatureExt.Union Method (IFeature, IFeature) - Creates a new Feature that has a geometry that is the union between this feature and the specified feature.
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Union (Intersect) Полигонов .NET

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реализация задачи visual studio2012 (visual basic .net) autocad 2012, oracle11g Anta .NET 32 31.12.2012 07:35
Портирование .Net + lisp приложений для BricsCAD Sleekka LISP 12 25.12.2012 11:41
Extended AutoCAD .Net API hwd .NET 5 22.08.2012 19:38
.Net событие double-click как поймать dvim .NET 7 04.04.2010 15:13