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

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

Развитие темы лиспа о проверке топологии

Ответ
Поиск в этой теме
Непрочитано 27.01.2010, 12:08
Развитие темы лиспа о проверке топологии
WeMaN
 
Регистрация: 19.08.2008
Сообщений: 52

Собственно говоря имеется лисп который делает своеобразную проверку топологии:
Код:
[Выделить все]
(vl-load-com)
(defun sstolist (ss / i lst)
(setq i 0)
(repeat (sslength ss)
(setq lst (append lst (list (ssname ss i))) i (1+ i))
);end of repeat
lst
);end of sstolist

(defun c:topolog ( / ss ss1 lay flist i minpt maxpt lstbox)
(setq flist (list (cons -4 "<OR") (cons 0 "INSERT") (cons 0 "TEXT") (cons 0 "MTEXT") (cons -4 "OR>"))	
ss (ssget "_x" flist)
);end of setq
(if ss
(progn
(setq lay "Topolog" i 1)
(while  (tblsearch "layer" (strcat lay (itoa i)))
(setq i (1+ i))
);end of while
(setq lay (strcat lay (itoa i)) ss (sstolist ss) i 0)
(foreach obj ss
(vla-GetBoundingBox (vlax-ename->vla-object obj) 'minpt 'maxpt)
(setq 	minpt (vlax-safearray->list minpt) maxpt (vlax-safearray->list maxpt)
	lstbox (list minpt (list (car minpt) (cadr maxpt)) maxpt (list (car maxpt) (cadr minpt)))
	ss1 (ssget "_CP" lstbox flist)
);end of setq
(if ss1
(if (> (sslength ss1) 1)
(progn
(entmakex (append (list 
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 8 lay)
(cons 62 1)
);end of list
(mapcar '(lambda (x) (cons 10 x)) lstbox)
));end of entmakex & append
(setq i (1+ i))
);end of progn
));end of if * 2
);end of foreach
(if (= i 0)
(princ "\nПересечений не найдено")
(princ (strcat "\nНайдено " (itoa i) " пересечений, выделенных в слое " lay "." ))
)
);end of progn
(princ "\nОбъектов не найдено")
);end if
(princ)
);end of topolog

Данный алгоритм, как видно из скриншота выше, позволяет выделять полилинией объекты на топоплане, которые наползают друг на друга. прямоугольники кидаются в слой Topolog1 (2,3 и т.д.)
Собственно, меня интересует такой вопрос, можно ли научить алгоритм, или создать новый код, который бы распозновал именно блоки выделенные данной областью и перекидывал бы их на специальный слой. К примеру, из рисунка видно, что два кустарника наползают на текст, можно ли их переместить в другой слой (например распознать их как переносить блоки в слой "имяслоя" рядом с которым находятся полилинии из слоя Topolog).
В общем, надеюсь на помощь и советы. Может кто уже сталкивался с этим, и сможет подсказать решения.
ЗЫ
Ежели кто знает ещё какие нибудь программы проверяющие топологию в автокаде, буду очень признателен если поделитесь. Тема довольно актуальна
__________________
Практика доказывает - если смешать кило меда и кило дерьма, то получится два кило дерьма...
Просмотров: 5393
 
Непрочитано 20.01.2011, 20:15
#21
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Sleekka Посмотреть сообщение
ну ну
и чё?
АлексЮстасу вне форума  
 
Непрочитано 23.01.2011, 10:26
#22
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Надо их сразу в сторону сдвигать а не в другой слой переносить. Придумать алгоритм сдвига.
Victor вне форума  
 
Непрочитано 23.01.2011, 13:08
#23
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Victor Посмотреть сообщение
Надо их сразу в сторону сдвигать а не в другой слой переносить. Придумать алгоритм сдвига.
Как минимум, их сначала нужно найти.
Сдвигать автоматом чревато - могут накладываться на другие линейные элементы, на другие блоки и подписи. Иногда ведь и линии нужно подвигать-порезать, вообще в другое место переносить приходится, да и удалять иногда можно.
Лучше оставить на усмотрение пользователя.
А для очень быстрого и удобного просмотра и действий уже есть специальная программка из http://forum.dwg.ru/showpost.php?p=625665&postcount=14. С ее помощью даже сотни найденных пересечений можно полностью обработать за совершенно реальное время.
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Развитие темы лиспа о проверке топологии