Аналог attout – attin
Последнее время все чаще и чаще стал задумываться о написании некоего аналога знаменитых команд из ExpressTools - ATTOUT и ATTIN.
Штатная функция немного не устраивала: во-первых, имена динамических блоков не учитываются. Сориентироваться, что означает, например, "блок с именем "*U658", нереально). Во-вторых, стало просто интересно. Собственно определяются две команды: att-export (соответственно экспорт в файл csv) и att-import (импорт из csv).
Я постарался учесть вариант "ЕТ не установлен", блокированных и замороженных слоев. Кажется, в качестве первого приближения "покатит".
Версия | Ссылка для скачивания | Описание |
0.1 | att-export-import v.0.1 | Версия с попыткой вывода результатов только в csv |
0.2 | att-export-import v.0.2 | Учтена необходимость вывода файла в txt. Исправлена небольшая опечатка |
0.3 | att-export-import v.0.3 | Попытка исправления вывода атрибутов в csv. Плотного тестирования не проходила |
0.4 | att-export-import v.0.4 | Попытка исправления обработки хенддлов и перевод их в строковое значение в Excel. |
0.5 | att-export-import v.0.5 | Добавление запроса на сортировку тэгов атрибутов |
0.6 | att-export-import v.0.6 | Исправлена ошибка обработки txt-файлов |
0.7 | att-export-import v.0.7 | координаты вставки блока |
Дисклайм: Теоретически код должен обрабатывать и многострочные атрибуты, но не проверял. Перенос строк в таком случае в результирующем файле будет показываться как "\P" - это нормально. Если в атрибутах будут поля, то как они будут выводиться и какие значения будут назначаться - не представляю. Если есть желание тестировать - милости прошу
Порядок следования столбцов в таблице критичен (по крайней мере пока; если необходимо будет предусматривать шанс, что "столбцы переместили", сообщите. По мере возможности добавлю.
Здравствуйте, Алексей.
Воспользовался вашей функцией. Выявленные проблемы:
1. Name, Handle и все теги атрибутов при открытии в excel помещаются в ячейку А1
2. Заполнение столбцов:
- первый столбец (который д.б. Name) выглядит примерно так: "KAA_Спецификация изделия 1.1 BAF91 7 13,3 1,9 \W0.8000"
- второй (который д.б. Handle): %%C16 A-III L=1200 ГОСТ 5781-82 \W0.8000
- третий (в моём случае значение атрибута 1_Количество1): Данный чертеж 1 6 60,0 10,0 \W0.8000
- все остальные столбцы заполняются также хаотично
Спасибо, Алексей!
Мое мнение, что значительно проще добавить ко всем блокам дополнительный скрытый постоянный атрибут с нормальным именем блока, как вариант, если атрибут уже есть, то обновить его значение.
В результате, файл обработанный таким образом можно будет использовать с помощью стандартных команд экспрессов, в том числе на компьютере без установленной твоей программы.
Ну, не заставлять же всех пользователей переделывать все блоки
kacugu, понял, расширение сменю - не вопрос. Можете и сам везде в коде поменять "csv" на "txt" - просто сейчас нет полноценной возможности М.б., вечером доберусь.
>> Ну, не заставлять же всех пользователей переделывать все блоки
Я имел в виду, что можно сделать программу, которая будет добавлять к каждому блоку атрибут с полным названием.
Евгений, не покатит: ненулевые шансы попытаться создать атрибут с дублирующимся тэгом. ACAD-то подобные вещи не отслеживает...
Спасибо. Если экспортировать в формат txt, то всё нормально в экселе открывается.
я имел в виду примерно такое:
2
3
4
5
6
7
8
9
10
11
12
(vla-AddAttribute
(vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-get-EffectiveName bl)
)
1.0
acAttributeModeInvisible
"EffectiveName"
(vlax-3d-point 0 0 0)
"EffectiveName"
(vla-get-EffectiveName bl)
)
Никто и никогда не помешает пользователю создать атрибут с тэгом EffectiveName. И загнать туда все что угодно. В результате возникнет путаница.
Хотя, как альтернатива - вполне. При условии, что потом будет выполнен _.atsync, а атрибуты пользователем не перемещались и не переназначались им какие-либо свойства.
Добрый день, Алексей.
Попробовал вторую версию. При экспорте в csv повторяются проблемы, описанные мною ранее.
Просто интересно - так и должно быть или это какая-то ошибка?
Насколько я понял, это проблема CSV фактически. Он корректно будет импортироваться в Excel только в случае, если разделитель между колонками не символ табуляции, а символ ";" (точка с запятой). Учитывая, что этот символ может вполне легко использоваться в значениях атрибутов, я не рискнул переделывать разделитель.
Сегодня я на Autodesk University, вернусь в нормальный режим ориентировочно в субботу-воскресенье, попробую провернуть несколько экспериментов. Если получится что-то вменяемое, обязательно выложу обновление.
Так, нашел пути обхода.
СделаюПогорячился. Сохранение в csv приводит к ситуации, которую я пока не могу представить, как корректно решить Поэтому могу предложить только "забыть про csv"
Добавил новую версию. Заодно и дискайм (ну как бы предупреждение) написал.
Добрый день Алексей.
Спасибо за версию 0.3. Теперь экспорт атрибутов происходит нормально и в формате csv.
Из замеченных недостатков/проблем:
1. Экспорт атрибутов происходит вместе с форматированием: \W0.8000;%%C25 A-III L=2600 ГОСТ 5781-82. Если не удалить форматирование и потом импортировать такие значения обратно, то сбиваются значения атрибутов.
2. Тут скорее проблема экселя: handle вида 11E8 excel преобразует в 1.10E+09. Как следствие при импорте этот блок уже не находится
1. Это явно многострочные атрибуты, с которыми я редко работаю Попробую что-нибудь нарисовать и исправить
2. Понял, учту.
Не уверен, что смогу в ближайшие пару дней заняться. Но как только - так сразу ))
1. Вопрос с форматированием решил с помощью функции UnFormat от Lee Mac http://www.lee-mac.com/unformatstring.html - пока вроде работает
2. Вопрос с handle решил добавлением символа ' к значению. При экспорте работает, а вот как потом удалить этот символ при импорте пока не решил.
Сейчас жуткая запарка, ничего не успеваю Про апостроф я как-то не сообразил сразу. Сделаю, обязательно сделаю - но позже.
Так вроде никто не торопит) Я из природной любознательности больше интересуюсь)
Наконец-то дошли руки, выпустил новую сборку. Попробуйте, если вдруг кому интересно...
Здравствуйте, Алексей.
Попробовал версию 0.4.
Пока что проблем в работе лиспа не замечено
Здравствуйте.
Не выполняет импорт значений атрибутов из txt, из csv импортирует нормально. Проверял в AC 18,21,23.
Пожелание-предложение. attout из экспресса выдаёт атрибуты в текстовый файл в том порядке, в котором они заданы в блоке (в том порядке, как их видит пользователь в окне редактора атрибутов блока), а att-export-import выдаёт их, сортируя имена тэгов по алфавиту. Возможно ли реализовать вариант выдачи, как у attout?
Если будет время - посмотрю, что там с импортом из txt. А остальное - ну реально, насколько надо сортировка не по тэгу атрибута, а по порядку их создания (который, кстати, может быть совсем разным в разных блоках)?
"ну реально, насколько надо сортировка не по тэгу атрибута, а по порядку их создания (который, кстати, может быть совсем разным в разных блоках)"
Ситуация следующая. Всего в блоке более 50 атрибутов. Порядок запроса атрибутов в блоке скомпонован по их функциональному назначению. Пример порядка запроса атрибутов: РАДИУСКР -> СТОРОНКР -> ТИПОП -> ТИПКОН1 -> ТИПКОН2 -> ТИПФИКС1 -> ТИПФИКС2. Когда я опрашиваю разом с помощью attout штук 200 блоков в чертеже, то в Экселе потом вижу столбцы значений атрибутов именно в порядке их создания, соответственно, я могу эти данные за один захват выделить и скопировать в другой файл для обработки. В случае сортировки по наименованию тэга исходный порядок в экселе рушится, между этими столбцами влезают всякие ТИПАНКЕРА, ТИПКР, ЗАЗЕМЛЕН и т.д., которые относятся к другой функциональной группе. Приходится лазить по таблице и выдёргивать нужные столбцы по одному, что крайне неудобно и долго.
Можно попытаться сделать тэгам префиксы-костыли типа 1_РАДИУСКР, 2_СТОРОНКР и т.д. Но это костыль неработающий, потому что сортируется так: 1_; 10_; 11_ ... 19_; 2_; 20_; 21_ и т.д.
Короче, мне как пользователю порядок задания гораздо важнее и принципиальнее, а только потом наименование тэгов, поэтому attout в этом плане то, что надо. При это я не делаю одновременный опрос блоков с кардинально разными атрибутами.
Добавил запрос на сортировку атрибутов (версия 0.5). Для корректной обработки txt-файлов разделитель должен быть табуляцией; в csv - ";". Мне не удалось повторить "некорректную" обработку txt-файлов, так что ничего там не менял.
Если информация не совсем секретная - хотелось бы увидеть dwg, txt с минимальным количеством образцов блоков (пары-тройки должно хватить, надеюсь).
Спасибо! Сортировка работает как надо. Ссылку на dwg, txt и csv сделаю.