Аналог 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. |
Дисклайм: Теоретически код должен обрабатывать и многострочные атрибуты, но не проверял. Перенос строк в таком случае в результирующем файле будет показываться как "\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.
Пока что проблем в работе лиспа не замечено