Разница между _.explode и vla-explode
Попробую расписать варианты разбивания примитивов AutoCAD'a командными и ActiveX-методами. Не рассматривается вопрос разбивания набора примитивов: для такого вопроса сначала надо будет выбирать способ разбивания исходного элемента. Также можно посмотреть тему на dwg.ru - там предостаточно информации
Фактически на моей практике возможны использования двух вариантов: либо команда _.explode, либо vla-explode.
В принципе, их поведение очень и очень похоже: оба варианта способны "расколошматить" и полинию, и блок; для обоих вариантов критично состояние слоя для примитива. Но вот, например, твердые тела и штриховки (спасибо Евгению Елпанову) vla-explode обработать не сможет (проверял на AutoCAD 2014, 2015). При обработке блоков оба метода подчиняются правилам, задаваемым системной переменной EXPLMODE (за подробностями добро пожаловать в справку). Оба варианта не обработают блок с разными масштабами по разным осям (т.н. NUS - nonuniformly scaled - блоки), если внутри него есть твердые тела.
Понятно, что _.explode сработает только в текущем пространстве, а vla-explode можно "натравить" и на вложенные блоки и примитивы. Но это не единственное отличие этих методов...
Во-первых, _.explode после успешного выполнения уничтожает исходный объект, а vla-explode оставляет его на месте. Т.е. после применения vla-explode потребуется либо vla-erase, либо entdel, либо _.erase - ну или что там больше понравится
Во-вторых, в случае невозможности разбития объекта команда _.explode просто выдаст сообщение в командную строку о невозможности разбития объекта, а вот vla-explode сгенерирует ошибку.
Если все сказанное свести воедино, то получим табличку примерно такого вида:
Команда _.explode | vla-explode | |
Полилинии | Да | Да |
Блоки в соответствии с EXPLMODE | Да | Да |
Твердые тела | Да | Нет |
Штриховки (спасибо Евгению Елпанову) | Да | Нет |
Многострочный текст (спасибо Евгению Елпанову) | Да | Нет |
Ассоциативный массив (спасибо Евгению Елпанову) | Да | Блоки с исходными объектами |
Объект размера (спасибо Евгению Елпанову) | Да | Нет |
Таблица (спасибо Евгению Елпанову) | Да | Нет |
Мультилиния (спасибо Евгению Елпанову) | Да | Нет |
Спираль (спасибо Евгению Елпанову) | Да | Нет |
NUS-блоки с твердыми телами в составе блока | Нет | Нет |
Требует дополнительных действий по удалению исходного объекта | Нет | Да |
Требуется дополнительная обработка ошибок | Нет | Да |
Осталось добавить в список примитивов штриховки. Они также не разбиваются объектными методами...
Спасибо, добавляю
Провел небольшое расследование - тестировал на примере AutoCAD 2015:
примитив | command | vla-explode
многострочный текст | однострочный текст | -
ассоциативный массив | исходные объекты | блоки с исходными объектами
размер | линии, тексты… | -
таблица | линии, тексты… | -
мультилиния | линии | -
спираль | сплайн | -
Добавляю в общую таблицу
Добрый вечер. Хотелось бы уточнить один вопрос. Если я правильно поняла, при использовании команды _.explode нельзя программно разбить блок в блоке (т.е. если я выбираю блок, затем прохожу весь чертеж, там в другом блоке вложен выбранный блок, команда не разобьет его)? И, в таком случае, разобьет ли блок в блоке команда vla-explode?
На моей практике - разбивал. Но исходное вхождение надо было всё равно принудительно удалять через vla-erase
Спасибо! Буду пробовать!