Элементы вариации
Здравствуйте.
Попадаются некорректные DWG файлы, которые содержат элементы динамических блоков (элементы вариации) в пространстве чертежа. Эти элементы невидимы и при копировании любого примитива в другой чертёж переносятся туда. Происходит "заражение" новых файлов. При этом пользователь ничего не замечает.
Если открыть такой файл в Автокаде, выдаётся сообщение: файл содержит элементы вариации. Открыть в редакторе блоков?
В Нанокаде никаких сообщений не появляется. Выявить такой файл возможно только при вставке из буфера блоком (CTRL+SHIFT+V). Тогда у блока появляются скрытые на чертеже элементы. В примере "Видимость" и "Поворот".
Лечение для Нанокада придумал такое:
- Скопировать чертежи в буфер обмена;
- В новый файл вставить из буфера блоком (CTRL+SHIFT+V);
- Расчленить (взорвать) получившийся блок.
У меня два вопроса:
- Как в Нанокаде получать уведомления о содержащихся на чертеже элементах вариации? Наподобие автокадовского сообщения. Это позволило бы предотвратить размножение этих элементов по новым чертежам;
- Возможно ли сделать скрипт для автоматической очистки чертежа от элементов вариации?
Лучший ответ
-
Попробуйте код, который просто удаляет словарь, отвечающий за элементы вариации.
Не знаю, насколько такая операция безопасна. Дождался бы комментария @kpblc
Но пока можете потестить на свой страх и риск
(defun c:ttt ( / vdict dict)
(vl-load-com)
(setq vdict (vla-GetExtensionDictionary
(vla-get-modelspace
(vla-get-ActiveDocument
(vlax-get-acad-object)))))
(setq dict (vlax-vla-object->ename vdict))
(if (dictsearch dict "ACAD_ENHANCEDBLOCK")
(progn
(dictremove dict "ACAD_ENHANCEDBLOCK")
(alert "Информация об элементах вариации удалена!")
))
(prin1)
)ЗЫ. Кстати, удаление такой информации не всегда является действительно желаемой опцией.
Если описание динамического блока (корректно только в АС) экспортировалось чем-то типа WBLOCK или сохранением описания блока во внешнем файле, то после такой экзекуции этот файл будет недоступен в качестве вставки блока. Нужно быть точно уверенным, что вы действительно желаете изменить чертеж, а не внести правку в библиотечный элемент-блок.
2
Ответы
-
Посмотреть в Диспечере чертежа, например
1 -
У вас какая версия Нанокада? У меня 20.1 и таких элементов в Диспетчере чертежа нет.
Но всё равно это не то, что нужно. Нужно, чтобы пользователь получал предупреждение при открытии файла.В каждом файле открывать диспетчер чертежа и искать там эти элементы накладно и заставить всех пользователей так делать не получится.
0 -
0
-
Спасибо! Работает. Поломок чертежей пока не замечено, будем тестировать. Если найдутся - напишу.
Это решение второго вопроса.1 -
Первый вопрос - информирование пользователя о наличии проблемы - более сложная задача. Ее решение возможно:
- со стороны разработчиков Нанософта путем фиксации пожелания и реализации соответствующего функционала. Путь тяжеловесный, но правильный. Возможно, потребуются дополнительные уточнения по способу реализации, т.к. пресловутые элементы вариации не поддаются редактированию (пока) нанокадом;
- Использованием механизма реакторов в лисповском скрипте, отслеживающих событие открытия файла и проводящим соответствующую проверку и информирование пользователя о кракозябе. Путь несложный (большая часть его была пройдена на старом форуме), но не очень надежный (есть предвзятое отношение к этому механизму);
- Использование аналогичного п.2 механизма на других платформах (C#, Мультикад и т.п.). Необходимо обратиться к спецам по этим платформам. Тут я - пас.
0 -
А можно подробнее о варианте "Использованием механизма реакторов в лисповском скрипте…" ?
Немного поправил ваш скрипт для проверки наличия элементов вариации:
(defun c:проверить_элементы_вариации ( / vdict dict)
(vl-load-com)
(setq vdict (vla-GetExtensionDictionary
(vla-get-modelspace
(vla-get-ActiveDocument
(vlax-get-acad-object)))))
(setq dict (vlax-vla-object->ename vdict))
(if (dictsearch dict "ACAD_ENHANCEDBLOCK")
(progn
(alert "Файл содержит элементы вариации!")
))
(prin1)
)
Получается простой способ проверки, но он требует выполнения команды.
Теперь вопрос: как выполнять автоматически команду "проверить_элементы_вариации" во время старта Нанокада? (не подгрузка лиспа через APPLOAD, а именно выполнение команды) Тогда первый вопрос тоже будет решён.
1 -
А можно подробнее о варианте "Использованием механизма реакторов в лисповском скрипте…" ?
…
Теперь вопрос: как выполнять автоматически команду "проверить_элементы_вариации" во время старта Нанокада?
Наверное, имеется ввиду не "во время старта Нанокада", а в "момент открытия файла".
Именно второе (и еще очень много другого, связанного с контролем изменений) и отслеживается через механизм реакторов. По-другому - никак. Если коротко, то это фрагменты кода, запускаемые по определенному событию, а не путем вызова команды. Механизм этот очень нежный, нужен определённый навык. Не советовал бы сразу в него окунаться, если не желаете всерьез погрузиться в программирование.
В качестве альтернативы предложил бы остановиться на ручном вызове программы. Еще ее можно модифицировать, чтоб она не выдавала сообщение (убрать alert). Тогда можно добавить эту команду в пакетную обработку файлов и "натравить" все это хозяйство на папку с файлами, подвергаемыми санации.
1
Разделы
- Все разделы
- 57 Общие вопросы
- 52 Работа nanoCAD в ОС Linux
- 408 Платформа nanoCAD
- 16 nanoCAD GeoniCS
- 87 nanoCAD BIM Строительство
- 42 nanoCAD Механика PRO
- 56 nanoCAD BIM Электро
- 11 nanoCAD BIM Вентиляция
- 13 nanoCAD BIM ВК
- 3 nanoCAD BIM Отопление
- 7 nanoCAD BIM СКС
- 51 nanoCAD BIM ОПС
- 2 nanoCAD Стройплощадка
- 3 nanoCAD Металлоконструкции
- 2 nanoCAD Конструкции PS
- 5 TDMS Фарватер
- 1 Облака точек
- NSR Specification
- Учебным заведениям и учащимся
- 7 nano360