Обновление данных атрибутов из CSV-файлов

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 точки вставки блока.

Имена атрибутов, упомянутые выше, также присутствуют в последних двух описанных функциях и должны быть изменены соответственно при необходимости.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=27563