Очистка параметрических зависимостей в dwg
Была у меня тут задача - пройтись по всем примитивам чертежа и снести там параметрику.
Работало медленно, поскольку я решал задачу "в лоб", проходя по всем примитивам чертежа. Но работало.
Сегодня А.Ривилиса в теме на форуме Autodeskпоказал значительно более простое и изящное решение:
1 2 3 | (if (dictsearch (namedobjdict) "acad_assocnetwork") (entdel (cdr (assoc -1 (dictsearch (namedobjdict) "acad_assocnetwork")))) ) |
Это работает в текущем документе. Если надо обработать неактивный документ (как он открыт - вопрос десятый), то используем нечто типа
1 | (vla-delete (vla-item (vla-get-dictionaries doc) "acad_assocnetwork")) |
Причем, как выяснилось (по крайней мере в текущем документе) на состояние слоев эта конструкция не реагирует, корректно удаляя все элементы.
Красота!
К сожалению, радость была весьма качественно омрачена: удаление словаря гарантированно убивает динамические массивы. По крайней мере в ACAD2016
Большое спасибо. Пришлось помучиться, т.к. с лиспами я только на "Вы", но тем не менее, все получилось