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

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

Получение имен блоков в цикле

Ответ
Поиск в этой теме
Непрочитано 10.08.2011, 10:57 #1
Получение имен блоков в цикле
Irina_T
 
Регистрация: 10.08.2011
Сообщений: 2

Помогите, пожалуйста, разобраться!
Я работаю в Autocad 2007, английская версия.
Есть блоки камней на чертеже, есть листы с описанием блоков, расположенные в определенном порядке (четыре в ряд, ряды один под другим). Имена листов напрямую связаны с именами блоков.
Нужно брать по очереди блоки листов, извлекать из них имена камней, считать количество данного вида камней и записывать в файл данные: имя камня – количество.
В программе по запросу я ввожу количество листов и указываю левый верхний угол первого листа.
Проблема в получении объекта – блока листа. (строчки, помеченные точками останова).
Если я параллельно подключаю в том же месте цикла взятие вручную точки – угла листа, то все работает правильно, причем объекты листов как взятые вручную (OBJ1), так и полученные по вычисленным координатам (OBJ) совпадают.
Как только я отключаю ручное взятие точек, начинается ерунда, и по тем же вычисленным координатам получается несколько странных OBJ, после чего программа отключается.

Опыта в программировании у меня мало и понять, в чем дело, я никак не могу.

Вложения
Тип файла: lsp lst.lsp (2.6 Кб, 56 просмотров)
Тип файла: dwg
DWG 2007
igal_alon_DETAILS.dwg (478.4 Кб, 331 просмотров)

Просмотров: 2648
 
Непрочитано 10.08.2011, 11:17
#2
Do$

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


Я бы попробовал так:
  1. сперва (ssget "_X" '((0 . "INSERT") (2 . "P-*"))) - ищем блоки-"листы" на чертеже (я так понял, что все они по одному разу вставляются в чертеж в определленном месте кучкой)
  2. этот набор преобразуем в список: http://forum.dwg.ru/showpost.php?p=188342&postcount=21
  3. этот список сортируем двойным применением функции vl-sort по координатам точки вставки
  4. извлекаем из списка имена блоков, которе уже будут в нужном порядке
  5. далее делаем что нужно...
А в приложенной программе выбор блоков идет с помощью секущей рамки. При этом, блок должен быть виден на дисплее, иначе выбор не сработает, даже если его зацепит секущей рамкой. Наверное, в этом как раз и проблема.

Последний раз редактировалось Do$, 10.08.2011 в 11:23.
Do$ вне форума  
 
Автор темы   Непрочитано 10.08.2011, 11:34
#3
Irina_T


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


Спасибо большое! Попробую Ваше предложение.
Самое обидное, что билась я над этой ошибкой несколько дней, а в что дело в видимой области, поняла как раз перед тем, как прочла Ваш ответ. (Читая книгу Дэна Эббота про секреты Autocad)
Irina_T вне форума  
 
Непрочитано 11.08.2011, 22:04
#4
Li6-D


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


Еще один любопытный способ преобразования набора в список имен (см. вторую строчку кода): http://forum.dwg.ru/showpost.php?p=778593&postcount=2
В этой же теме есть и про разные способы сортировки точек.
Li6-D вне форума  
 
Непрочитано 12.08.2011, 08:29
#5
Do$

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


Этот способ давно известен, но он довольно медленный. См. http://forum.dwg.ru/showthread.php?t=15426&page=2
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Получение имен блоков в цикле



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Очистка рисунка от "пустых" блоков Makswell Готовые программы 15 26.10.2022 15:24
Тормозит команда расчленения набора блоков batmax Программирование 4 31.08.2010 17:37
Подсчет и сортировка блоков на текущем слое. Помогите отредактировать. Kortes Программирование 17 26.03.2010 18:46
генерация имен блоков. _nick_ AutoCAD 3 30.09.2009 17:59
VBA: утечка памяти при вставке блоков Mikha Программирование 13 03.04.2009 09:18