Импорт/экспорт атрибутов и дин.свойств

В теме на dwg.ru LISP для изменения настраиваемых (Custom) параметров динамических блоков помянули мои решения по дин.блокам и по импорту-экспорту атрибутов. И понадобилось объединить их.
Ок, не вопрос. Забирайте, тестируйте :) Пожелания, критика и проч. - либо здесь, либо на dwg.ru. Где больше нравится

dp-att-export-import_1.0
Исправления:
- убрана лишняя регенерация
- исправление ошибки назначения дин.свойств при некоторых условиях
dp-att-export-import_1.1

Забыл одну функцию, сейчас вроде бы работает: dp-att-export-import_1.2

По первому приближению вроде бы работает как надо. Но есть несколько "но":
1. Углы передаются в радианах. Если собираетесь высчитывать в Excel, используйте функцию =ПИ() для преобразования углов
2. Нецелые числа передаются с разделителем "." (точка). Если сделаете вдруг в числе разделитель "," (запятая), я ни за что не отвечаю ;) Пофиксено.

Версия 1.3 - исправлена обработка *.txt файлов.dp-att-export-import_1.3



Комментарии

Есть 18 коммент. к “Импорт/экспорт атрибутов и дин.свойств”
  1. Женя пишет:

    Добрый день! Ой как Вы меня выручили с данным лиспом. Огромное спасибо!
    Один вопрос - как можно изменить lisp, что происходил экспорт не всех атрибутов, а конкретных?

  2. Кулик Алексей aka kpblc пишет:

    Если известны тэги атрибутов, то можно поменять код, фильтруя тэги. Можно вообще извратиться и:
    - получить список всех тэгов атрибутов
    - вывести dcl-диалог, в котором запросить отображаемые в отчете атрибуты
    - выполнить экспорт
    ...
    - импортировать данные.

    Насколько я помню, надо будет менять получение и обработку tag_lst.

  3. Женя пишет:

    "Если известны тэги атрибутов, то можно поменять код, фильтруя тэги." - Тэги известны. А в каких строчках надо провести изменения и на что поменять? Лисп - для меня пока не посильная ноша. Интересно, но страшно))))

  4. Кулик Алексей aka kpblc пишет:

    Ну, в принципе можно как угодно менять код - если что, его можно повторно скачать.
    Советую посмотреть описание функции _kpblc-block-attr-get-pointer-mask и ее вызовы - по идее, этого должно быть достаточно.
    P.S. Прошу прощения, что так долго отвечал - безумно много работы, я ничего не успеваю :(

  5. Виталий пишет:

    Добрый день. Невероятно полезный лисп, очень выручает. Спасибо большое за ваш труд.
    Учитывая мои поверхностные знания/мучения в lisp, подскажите, в какую сторону копать, чтоб доработать lisp по следующим требованиям: формирование файла XML из блоков выделенной области, имеющих среди множества своих атрибутов известные атрибуты tag1, tag2, tag3, причем блоки, не имеющие этих атрибутов не попадали в выборку и соответственно в XML?

    Правильно ли я понял, что для того, чтоб фильтровались и выводились в файл только нужные мне атрибуты, в функции kpblc-block-attr-get-pointer-mask необходимо эти атрибуты прописать в переменной mask? (вместо *, прописать 'tag1,tag2,tag3') однозначно делаю что-то не правильно, т.к. это не работает, но не понимаю почему. Спасибо.

  6. Кулик Алексей aka kpblc пишет:

    Ну по идее работать должно. Просто возвращаются там указатели на атрибуты. Следовательно, надо получить их TagString и TextString, и с ними уже дальше оперировать.

  7. Дарья пишет:

    Добрый день. Большое спасибо за lisp. Всё работало корректно до тех пор пока не начала импортировать данные в атрибут, к которому прикручена таблица выбора свойств блока (для выбора из выпадающего списка значений атрибутов). При вставке данных в такой атрибут ему присваивается значение по умолчанию. Стандартная автокадовская команда attin/ attout вставляет значения в такие атрибуты корректно, но во много раз удобнее работать с табличным форматом *csv, который имеется только в вашем lisp. (Автокад 2021, Windows 10)

  8. Кулик Алексей aka kpblc пишет:

    Доброго дня. Я как-то не понял сути проблемы, прошу прощения. Можно ли файлик глянуть? Его на любой файлообменник (хоть на гуглодиск, хоть на яндекс-диск), а сюда ссылку. Может, в блоке есть одинаковые атрибуты? Или что-то с видимостью?

  9. Дарья пишет:

    Вот файлик. https://yadi.sk/d/LQJcxKLv1mBSXQ Интересует атрибут ФАЗА1. Остальные атрибуты ведут себя корректно. Мне кажется проблема из-за таблицы выбора свойств блока, которая позволяет выбирать значения атрибута из списка. При её удалении всё вставляется корректно.

  10. Кулик Алексей aka kpblc пишет:

    Вы правы - поскольку атрибут связан с таблицей выбора, то надо будет менять не только значение атрибута, но и установленное в поле "ТАБЛИЦА БЛОКОВ1" значение. Честно - я не предусматривал такого развития событий.
    В принципе можно сделать отдельные команды, которые не будет импортировать / экспортировать динамические свойства.

  11. Владимр пишет:

    Добрый день. Как в экспорт данных добавить данные о местоположении каждого блока? Крайне важная информация

  12. Кулик Алексей aka kpblc пишет:

    А чем стандартная _.DATAEXTRACTION не устраивает?
    Спрашиваю потому, что "вхождение" блока чуть сложнее определения точки вставки. Если, конечно, учитывать разные системы координат. Да и то, я не уверен, что получится - особенно если ПСК будет полностью повторять мировую, но с измененной базовой точкой.

  13. Владимр пишет:

    при экспорте Вашим Лиспом есть некая "Handle" - некое ID блока как я понял. При "_.DATAEXTRACTION" этой "handle" не экспортируется!. Система координат будет одна и единственная - штатная в автокад. Есть очень сложный блок - при котором эти координаты будут давать крайне важную информацию

  14. Владимр пишет:

    можно Ваш телефон указать, или сбросьте его на почту - с Вами свяжусь. Готов сотрудничать на коммерческой основе для корректировки текущих Лиспов и написания новых. Моя почта 2830611cобака.мэйл.ру

  15. Владимр пишет:

    мне необходимо и координаты блока экспортировать / импортировать - совместно с Динамическими свойствами

  16. Александр пишет:

    Добрый вечер. Можно как то сделать, чтобы значения полей извлекались не как значения, а как формула для поля? т.е. при обратной загрузке в блок, чтобы поле оставалось полем?

  17. Кулик Алексей aka kpblc пишет:

    Наверное, можно. По крайней мере можно попробовать - через _.dataextraction, к примеру.
    Я как-то слабо себе представляю, зачем это вообще делать :)

  18. Александр пишет:

    Есть файл с блоком, который берет данные посредством полей с чертежа. Площади, длины, какие-то другие вычисления формулами. Выгружаю все данные в текстовой файл, загружаю обратно. Все данные в атрибутах заменятся на числа из файла и вычислений больше не будет. Как вариант исключить эти атрибуты из обработки, просто их не перезаписывая.
    Еще вариант, иногда бывает удаляешь из чертежа объект на который идет ссылка. Когда открываешь редактор поля, там есть ошибка, но формула вычисляется игнорируя эту ошибку. Пока не откроешь редактор не найдешь. Так в экселе можно было бы отследить это на раз.
    Третий вариант. Изменить скопом в блоках размерность вычисления, адреса гиперссылок и тп.

Поделитесь своим мнением


Я не робот.