Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GPC, Объединение, пересечение и разность 
V
    Опции темы
Afrodiziac
Дата 11.1.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Такая вот задача. Даны N многоугольников. Нужно найти пересечение, объединение и разность этих многоугольников.
Причем разность такая: из первого многоугольника вычитам все остальные.
Полигоны могут быть с дырками. Ситуации с самопересечением не учитывать.

Помучался несколько недель и почти все реализовал, но все же не все.
Стал искать библиотеки.

Нашел здесь:

http://www.complex-a5.ru/polyboolean/comp.html

Там я вытащил библиотеку gpc.dll под C#
Но проблема в том, что эта библиотека не добавляется в проект(!) Пишет что неправильный COM компонент :(:(
На сайте есть исходники библиотеки. Перекомпилировал, все равно не хочет вставляться.
Кто знает в чем проблема?
Может быть есть другое решение?
PM MAIL   Вверх
mr.DUDA
Дата 11.1.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Конечно это будет на COM-компонента и не будет добавляться по reference, т.к. это обычная Win32 DLL. Что нужно так это определить какие функции из неё необходимы, объявить их как статические extern-методы любого класса, и вызывать как будто это обычные методы. За примерами можно сходить на www.pinvoke.net.


--------------------
user posted image
PM MAIL WWW   Вверх
Afrodiziac
Дата 11.1.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Я понимаю, все уже сделанно

Код

    [DllImport("gpc.dll")]
    private static extern void gpc_read_polygon([In] IntPtr fp, [In] int read_hole_flags, [In, Out] ref gpc_polygon polygon);

    [DllImport("gpc.dll")]
    private static extern void gpc_write_polygon([In] IntPtr fp, [In] int write_hole_flags, [In] ref gpc_polygon polygon);
//и так далее


Просто как раз на вызове одной и зтаких функций, генерируется ошибка о том что не может найтись библиотека


В этом месте

Код

    public static void SavePolygon(string filename, bool writeHoleFlags, Polygon polygon)
    {
      gpc_polygon gpc_polygon = GpcWrapper.PolygonTo_gpc_polygon(polygon);

      IntPtr fp = fopen(filename, "wb");
      gpc_write_polygon(fp, writeHoleFlags ? ((int)1) : ((int)0), ref gpc_polygon); <----- Ошибка!
      fclose(fp);

      GpcWrapper.Free_gpc_polygon(gpc_polygon);
    }


Странно, но библиотеку csgl.dll я подключал через Referense и все работало. Хотя может быть и не из-за этого...

П.С. Нашел библиотеку классов PolyBoolean под .NET 2.0
Скачать не могу smile а лежит это добро тут

[URL=http://www.complex-a5.ru/polyboolean/downloads.html[/URL]
День не мой)

Это сообщение отредактировал(а) Afrodiziac - 11.1.2008, 22:13
PM MAIL   Вверх
Afrodiziac
Дата 11.1.2008, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



GPC заработал smile 
Все равно спасибо за www.pinvoke.net. 
smile

Это сообщение отредактировал(а) Afrodiziac - 11.1.2008, 22:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.