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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Требуется помощь, дабы написать на лиспе программу проверяющую топологию

Требуется помощь, дабы написать на лиспе программу проверяющую топологию

Ответ
Поиск в этой теме
Непрочитано 15.10.2008, 17:59
Требуется помощь, дабы написать на лиспе программу проверяющую топологию
WeMaN
 
Регистрация: 19.08.2008
Сообщений: 52

В автокаде создаю топографические планы. Собственно, возникла острая необходимость написать программу проверки топологии. Смысл объясню сначала на практике, а затем изложу, как я вижу реализацию данного действия.

Итак, практически, имеем, условные знаки (которые являются блоками) и текстовые объекты, эти объекты, при автоматической расстановке, частенько пересекаются друг с другом: бывает блоки условных знаков наползают на текст, блоки наползают друг на друга, текст наползает на текст. Если объектов на планшете порядка несколька тысяч, то отслеживать все пересечения довольно проблематично, поэтому у меня возникла мысль намного облегчить работу.

Далее, собственно, как я вижу предстоящую прогрумму:
- все блоки и текст автоматически обводятся по контуру линиями, получаются прямоугольники по контурам объектов, эти прямоугольники для удобства перекидываются в автоматически создающийся слой (ну к примеру "topologia", причём при повторном запуске программы слой будет называться "topologia2", "topologia3" и т.д.)
- те прямоугольники, которые либо пересекаются, либо находятся на близком расстоянии друг от дуга (ну там какое нить число допуска расстояния придумать самое оптимальное, например расстояние между прямоугольниками меньше "1" так же считается пересечением), ну в общем пересекающиеся прямоугольники остаются на слое, остальные все удаляются нафиг.
- Тем самым, выделив все остающиеся прямоугольники и разукрасив их броским цветом, например красным мы сразу заметим где объекты наползают друг на друга, а где нет. естественно, после устраение всех топологических ошибок слой с прямоугольниками удаляется.

Теперь перечень очевидных (для меня) проблем при реализации:

- Есть ли функция которая текст и блоки по контуру обведёт замнкнутой 4 угольной линией, т.е. прямоугольником?
- С текстом в принципе решение есть, весь текст можно заменить фигурами , и тем самым осуществлять создание прямоугольников по блокам и фигурам(а не текстом), но как это реализовать то?
- И вообще, возможно ли создать слой, и оставить в нём именно те объекты, которые пересекаются?
- Ну и главное, собственно как будет выглядеть функция проверки пересечение прямоугольников, думается мне как проверка одинаковых координат между полилиниями, но тоже непонятно как, может есть какие то уже существующие решение...

В общем, очень надеюсь на помощь специалистов, ради написания данной програмки сел изучать автолисп, но пока знание довольно сыроваты ) Заранее спасибо

ЗЫ
Ежели кто знает ещё какие нибудь программы проверяющие топологию в автокаде, буду очень признателен если поделитесь
Просмотров: 8011
 
Непрочитано 25.01.2011, 00:31
#21
Li6-D


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Но как такой принцип построения габаритов описать правильными словами - я пока не придумал.
Ну если не устраивает прямоугольная обводка блоков, поэкспериментируй со следующим:
1 При создании блока, обведи вручную габаритной полилинией его элементы, где как считаешь проходит граница блока.
2 Сделай границу невидимой, например так:
Код:
[Выделить все]
(entmod (append (entget (entlast)) '((60 . 1))))
3 Элементы блока вместе с границей включи в блок.
Для всего остального пригодится программа Димы_ + несложная функция нахождения списка точек границы.

Последний раз редактировалось Li6-D, 25.01.2011 в 21:20. Причина: уменьшение кода
Li6-D вне форума  
 
Непрочитано 25.01.2011, 01:29
#22
АлексЮстасу

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


Цитата:
Сообщение от Li6-D Посмотреть сообщение
Ну если не устраивает прямоугольная обводка блоков, поэкспериментируй со следующим:
1 При создании блока, обведи вручную габаритной полилинией его элементы, где как считаешь проходит граница блока.
2 Сделай границу невидимой, например так:
Код:
[Выделить все]
(entmod
  (reverse
    (cons '(60 . 1)
      (reverse (entget (entlast)))
    )
  )
)
3 Элементы блока вместе с границей включи в блок.
Для всего остального пригодится программа Димы_ + несложная функция нахождения списка точек границы.
Как-то я этот ответ не понял. Можно вручную и наложения блоков-текстов поискать.
Пример KAI показывает же, что программно реальные границы блоков вполне определяются.
А прямоугольные габариты дают несуществующие наложения.
АлексЮстасу вне форума  
 
Непрочитано 25.01.2011, 21:28
#23
Li6-D


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Как-то я этот ответ не понял. Можно вручную и наложения блоков-текстов поискать.
Пример KAI показывает же, что программно реальные границы блоков вполне определяются.
А прямоугольные габариты дают несуществующие наложения.
Дело вот в чем: создав хитрый блок с невидимыми границами можно упростить программу для поиска наложений подобных блоков. Форму границ блоков можно нарисовать любую, даже незамкнутую. Вручную искать наложения никто не предлагал.

Последний раз редактировалось Li6-D, 25.01.2011 в 21:51.
Li6-D вне форума  
 
Непрочитано 26.01.2011, 01:26
#24
АлексЮстасу

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


Цитата:
Сообщение от Li6-D Посмотреть сообщение
Дело вот в чем: создав хитрый блок с невидимыми границами можно упростить программу для поиска наложений подобных блоков. Форму границ блоков можно нарисовать любую, даже незамкнутую. Вручную искать наложения никто не предлагал.
Зачем это делать, если опыт KAI показывает, что задача нормально решается?
А добавление в блоки невидимых габаритов не только заметно трудозатратно, но и приведет к ряду проблем - при создании габаритов динамических блоков, при взрывании, при разрезании, при передаче в другие форматы и т.д., и т.п. Даже просто при привязке к блоку.

Да - и габариты подписей хорошо бы определять тоже реальные, т.е. прямоугольниками, параллельными самим подписям. (см. приложение).
Миниатюры
Нажмите на изображение для увеличения
Название: Габариты_подписей.jpg
Просмотров: 70
Размер:	18.6 Кб
ID:	52400  

Последний раз редактировалось АлексЮстасу, 26.01.2011 в 15:59. Причина: добавлена картинка
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Требуется помощь, дабы написать на лиспе программу проверяющую топологию