Подскажите алгоритм поиска объектов замкнутого контура
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите алгоритм поиска объектов замкнутого контура

Подскажите алгоритм поиска объектов замкнутого контура

Ответ
Поиск в этой теме
Непрочитано 22.02.2009, 14:17 #1
Подскажите алгоритм поиска объектов замкнутого контура
pashik
 
Регистрация: 26.07.2008
Сообщений: 17

Вообщем пишу прогу для автоматичекой расстановки оборудования. План проекта начерчен в AUTOCADe линиями. От пользователя нужно только клацать мышкой внутри нужных помещений. А моя программа должна выделить контур помещения (как это делает автокад при заливке/штрихровке) и расставить оборудование. Координаты всех линий достать не проблемма. Нужен только алгоритм поиска замкнутой области для векторного изображения (ходить по пикселям как для растра не предлагать) . Заранее благодарен!
Просмотров: 8571
 
Непрочитано 22.02.2009, 16:11
#2
Кулик Алексей aka kpblc
Moderator

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


Один из самых простых способов - применять _.boundary. Посложнее - поискать на caduser.ru, там вроде было что-то близкое...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.02.2009, 16:23
#3
pashik


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Один из самых простых способов - применять _.boundary. Посложнее - поискать на caduser.ru, там вроде было что-то близкое...
А можно немного поподробней про _.boundary. Как его использовать? Где про него можна почитать?

P.S. Пишу я на Delphi.
pashik вне форума  
 
Непрочитано 22.02.2009, 16:56
#4
Кулик Алексей aka kpblc
Moderator

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


_.boundary - команда, выполняющая анализ области, внутри которой указана точка. Если возможно, то строит контур, описывающий эту область.
С Delphi не знаком вообще.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.02.2009, 17:04
#5
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>pashik
контур нужно найти средствами автокада или Ваша программа работает отдельно - сама по себе?
zamtmn вне форума  
 
Автор темы   Непрочитано 22.02.2009, 17:41
#6
pashik


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
_.boundary - команда, выполняющая анализ области, внутри которой указана точка. Если возможно, то строит контур, описывающий эту область.
С Delphi не знаком вообще.
Где хранятся вершины построеного автокадом контура? Этот контур - это объект?
pashik вне форума  
 
Непрочитано 22.02.2009, 17:56
#7
Кулик Алексей aka kpblc
Moderator

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


По идее контур - последний созданный объект. В зависимости от настроек команды может быть полилинией или областью (регионом). Из полилинии получить вершины контуров очень просто, из регионов - сложнее (если честно, я этим почти не занимался).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.02.2009, 23:14
#8
pashik


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


>>zamtmn
Нужно найти средствами моей проги. Из автокада я получаю координаты всех линий и координату щелчка юзера. На основе их, моя прога должна определить контур (тоесть комнату в которой кликнул юзер) и расставить там оборудование (тоесть вставить в нужном месте блоки в автокаде).

>>Кулик Алексей aka kpblc
Спасиба за "наводку". Буду пробовать.
pashik вне форума  
 
Непрочитано 23.02.2009, 23:53
#9
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Если программа работает совместно с автокадом, тогда лучше делать как предлагает kpblc.
Своими средствами универсальный алгоритм - тяжело реализовать.
Если все комнаты выпуклые многоугольники можно попробовать так:
1)Ищем ближайшую к точке клика линию, выбираем вершину с учетом направления обхода многоугольника относительно точки клика
2)Находим смежные линии на выбранной вершине, выбираем самую подходящую с учетом направления обхода вершин многоугольника относительно точки клика
3) делаем 2 пока не придем в неиспользованную вершину первой линии.

ИМХО. Лучше просить пользователя вручную указывать контур комнаты. для простых прямоугольных комнат - это всего 2 клика вместо 1
zamtmn вне форума  
 
Непрочитано 24.02.2009, 00:13
#10
Кулик Алексей aka kpblc
Moderator

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


На arcada.com.ua на форуме был алгоритм получения точки, гарантированно входящей в указанный контур (по-моему, без учета дуговых сегментов). Автор - VVA. Точную ссылку не помню, а искать тупо некогда
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.02.2009, 00:18
#11
pashik


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
ИМХО. Лучше просить пользователя вручную указывать контур комнаты. для простых прямоугольных комнат - это всего 2 клика вместо 1
Я вот сам по тихоньку к этому прихожу,-что пользователю быстрее два раза кликать, чем мне реализовать такой алгоритм.
Но всеравно, ВСЕМ СПАСИБА!
pashik вне форума  
 
Непрочитано 24.02.2009, 02:01
#12
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Я вот сам по тихоньку к этому прихожу,-что пользователю быстрее два раза кликать, чем мне реализовать такой алгоритм.
быстрее не быстрее, но в работе могут оказатся планы на которых не сработает ни твой алгоритм, ни boundary - начерченные без привязок, с примитивами не в плоскости и т.д., доводка таких чертежей точно съест выигрыш в кликах
zamtmn вне форума  
 
Непрочитано 24.02.2009, 11:29
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
На arcada.com.ua на форуме был алгоритм получения точки, гарантированно входящей в указанный контур (по-моему, без учета дуговых сегментов). Автор - VVA. Точную ссылку не помню, а искать тупо некогда
Я не автор. Немного для себя доработал.
Ссылки:
теория http://algolist.manual.ru/maths/geom/belong/poly2d.php
реализация:
http://www.arcada.com.ua/forum/viewt...d290a879d8bd31
http://www.caduser.ru/forum/index.ph...#message205580
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.02.2009, 14:19
#14
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


проверка принадлкжности точки контуру штука хорошая, но не по теме топика
zamtmn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите алгоритм поиска объектов замкнутого контура



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение объектов в области контура, AutoCAD Pain AutoCAD 33 20.11.2024 19:01
FILTER / фильтр BM60 Справочник команд 0 08.07.2008 15:35