Tony Hotchkiss
Используя команду экспорта данных AutoCAD, которая находится в меню Tools можно извлечь данные атрибутов в файл электронной таблицы Excel или в таблицу, размещенную в самом чертеже. Используя эту возможность, многие найдут хорошей идею редактировать атрибут непосредственно в электронной таблице, но чтобы измененные атрибуты отображались в чертеже необходимо производить обратный экспорт.
В данной статье описан пример подобной подпрограммы. Она состоит из двух файлов (ATTRIBUTE-TABLE-UPDATE.LSP и ATTRIBUTE-TABLE-UPDATE.DCL), и позволяет экспортировать определенные блоки (в нашем случае - датчики пожарной сигнализации) вмести с их атрибутами и x-y координатами в файл в формате CSV (текстовый файл с данными разделенными запятыми), который удобен для открытия в Excel. Программа так же позволяет делать изменения в атрибутах и удалять вставленные в чертеже объекты, если они отсутствуют в CSV-файле.
Рис. 1. Предложение выбора опции Export/Import.
Загрузите подпрограмму отсюда. Распакуйте и сохраните файл в папку Support которая находится в каталоге, куда установлен AutoCAD. Используя команду Load Application из меню Tools выберем файл ATTRIBUTE-TABLE-UPDATE.LSP и загрузи его.
Чтобы запустить подпрограмму, введите ATU в командной строке, после чего вы увидите контекстное меню с предположением выбрать опцию. Предлагается два варианта - Export (по умолчанию) и Import (рис. 1).
Если вы выберите Export, отобразиться диалоговое окно Results File у вас будет запрошен номер комнаты, в которой находятся интересующие нас датчики сигнализации (рис. 2). Укажем имя файла.
Рис. 2. Диалоговое окно Results File
Файл с результатами экспорта будет иметь расширение CSV, и его можно будет открыть в Notepad или Excel. На рисунке 3. показан файл, открытый в электронной таблицей Excel. Вы можете сделать изменения в столбце ADDRESS1, и удалить при необходимости одну или несколько строк, если соответствующие изменения должны быть сделаны и в чертеже.
Рис. 3. электронная таблица EXCEL.
После того как вы сделаете все изменения и сохраните файл опят в CSV-формате, вы можете опять запустить нашу подпрограмму в AutoCAD, набрав в командной строке ATU, только теперь выберите опцию Import в начальном запросе программы. Отобразиться диалоговое окно Import file, в котором вы должны будите выбрать CSV-файл, содержащий изменения которые вы хотите сделать в чертеже.
Рис. 4. Диалоговое окно Import File.
После того, как файл для импорта будет выбран, изменения в чертеже будут сделаны и отобразиться диалоговое окно Address Changes (Рис. 5). Нажмите на OK чтобы удалить диалоговое окно и проверьте чертеж, все ли изменения сделаны правильно. Обратите внимание на то, что вы можете отобразить диалоговое окно Address Changes в любое время в текущей сессии работы над чертежом набрав в командной строке (Show Changes).
Рис. 5. Диалоговое окно Address Changes.
Описание кода подпрограммы
После запуска моих стандартных функций для обработки ошибок и управления системными переменными, программа активизирует функцию ATT-DATA-OUT, которая определяет опции Export и Import, и вызывает функции GETBLKS, PRINT-OUT, и DO-IMPORT, в зависимости от того, что вы выбрали - экспорт или импорт CSV-файла.
GETBLKS создает список всех вставленных командой INSERT объектов, которые необходимо обработать. В нашем примере мы жестко указали имя блока "FA_DEVICE_INIT" (датчик пожарной сигнализации). Вы можете изменить его на имя блока, с которым вы собираетесь работать в двух операторах IF в коде, который показан ниже:
(if (and (= (vla-get-HasAttributes blkobj) :vlax-true)
(> (strlen bobjname) 13)
(= (substr bobjname 1 14) "FA_DEVICE_INIT")
) ;_ end of and
(progn
(setq inspt (vla-get-InsertionPoint blkobj))
(setq ipt (vlax-safearray->list (vlax-variant-value inspt)))
(setq attribs (vla-getAttributes blkobj))
(setq sarr (vlax-variant-value attribs))
(setq num (vlax-safearray-get-u-bound sarr 1))
(if (and (> num 0)
(<(car ipt) 3000.0)
)
В нашем примере во второй и третьей строке установлены параметры для включения вставленных блоков. По логике программы это происходит, если имя блока больше чем 13 символов и первые 14 символов - FA_DEVICE_INIT. Вы можете изменить это для чтобы программа обрабатывала ваши блоки. В предпоследней строке показанного кода указывается, что необходимо рассматривать только те вставки блока, где точка вставки меньше чем 3,000" в направлении оси X. Вы так же можете изменить это в соответствии с вашими критериями.
Следующая функция, PRINT-OUT, ссылается на несколько специфических атрибутов - ADDRESS1 и DEVICE_LOCATION - вы можете изменить их на ваши атрибуты блока в сегменте кода функции PRINT-OUT, который показан ниже:
(write-line "ADDRESS1,Name,Device_Location,floor,X,Y" f1)
(repeat (length blklst)
(setq lst (nth (setq i (1+ i)) blklst))
(setq str (strcat (cadr (assoc "ADDRESS1" (nth 1 lst)))
","
(car lst)
","
(cadr (assoc "DEVICE_LOCATION" (nth 1 lst)))
","
(itoa floor)
","
(rtos (car (last lst)))
","
(rtos (cadr (last lst)))
) ;_ end of strcat
) ;_ end of setq
(write-line str f1)
) ;_ end of repeat
Функция DO-IMPORT открывает предназначенный для импорта CSV-файл и вызывает функцию DO-ADDRESS для построчного чтения этого файла, возвращает она список точек вставки блоков и список изменений для отображения в диалоговом окне Address Changes. Если вы хотите настроить эту часть кода для своих нужд, вы должны придерживаться структуры CSV-файла как показано на рис. 3, с учетом следующих критериев:
Первое поле - это значение атрибута, которое можно изменять (ADDRESS1 в этой программе).
Второе поле - это имя вставляемого блока.
Третье поле - значение второго атрибута, эквивалентное DEVICE_LOCATION.
Четвертое поле - номер комнаты.
Последние два поля - координаты X и Y точки вставки блока.
Имена атрибутов, упомянутые выше, также присутствуют в последних двух описанных функциях и должны быть изменены соответственно при необходимости.
Ссылки по теме