Ефективно використовувати час атрибутів з csv-файлів

Використовуючи команду експорту даних 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). Зазначимо ім'я файлу.

Ефективно використовувати час атрибутів з csv-файлів

Мал. 2. Діалогове вікно Results File

Файл, обумовлені показниками експорту матиме розширення CSV, і його можна буде відкрити в Notepad або Excel. На малюнку 3. показаний файл, відкритий в електронній таблиці Excel. Ви можете зробити зміни в стовпці ADDRESS1, і видалити при необхідності одну або кілька рядків, якщо відповідні зміни повинні бути зроблені і в кресленні.

Мал. 3. електронна таблиця EXCEL.

Після того як ви зробите все зміни і збережіть файл опеньків в CSV-форматі, ви можете знову запустити нашу підпрограму в AutoCAD. набравши в командному рядку ATU, тільки тепер виберіть опцію Import в початковому запиті програми. Відобразитися діалогове вікно Import file, в якому ви повинні будите вибрати CSV-файл, який містить зміни які ви хочете зробити в кресленні.

Ефективно використовувати час атрибутів з csv-файлів

Мал. 4. Діалогове вікно Import File.

Після того, як файл для імпорту буде обраний, зміни в кресленні будуть зроблені і відобразитися діалогове вікно Address Changes (Рис. 5). Натисніть на OK щоб видалити діалогове вікно і перевірте креслення, чи всі зміни зроблені правильно. Зверніть увагу на те, що ви можете відобразити діалогове вікно Address Changes в будь-який час в поточній сесії роботи над кресленням набравши в командному рядку (Show Changes).

Ефективно використовувати час атрибутів з csv-файлів

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

Імена атрибутів, згадані вище, також присутні в останніх двох описаних функціях і повинні бути змінені відповідно при необхідності.

Посилання по темі