18.09.2013

Блоки, _.draworder и ...

...и некоторые известные, но не очень очевидные моменты.

Иногда очень хочется, чтобы порядок следования примитивов внутри блока был строго определенным. Самый живой пример - применение маскировки.

При этом иногда вроде бы все сделано "как надо", в библиотечном файле все работает как надо, а вот в любом другом файле, куда был импортирован такой блок - творится черт-те что.

На самом деле все очень просто. Нередко при создании блока маскировка создается "в последних рядах", и потом с помощью команды _.draworder помещается "за всеми объектами". Так вот, при работе в текущем файле этот метод прокатывает на ура, но при импорте блока в новый файл этот порядок "слетает".

Конечно, можно зайти в редактор блоков и все подправить руками, но рано или поздно это будет не сделано.

Выход только один: в результирующем блоке примитивы должны следовать один за другим. В этом же порядке они и будут обрабатываться в новых файлах, куда этот блок будет вставляться.

Допустим, мы создаем блок (для упрощения ситуации рассматриваю вариант с обычным, нединамическим блоком) с маскировкой, которая частично перекрывает пару примитивов (круг и дугу). Поверх маскировки показывается атрибут, отрезок и полилиния.

История создания блока такова, что маскировка создана в последнюю очередь. Что надо сделать?

Выбираем объекты, которые должны лежать "над" маскировкой и копируем (обратите внимание - именно копируем!) куда-нибудь в сторону. Я обычно включаю режим ORTHO (F8) и указываю направление, например, вверх, расстояние - по ситуации. Исходные объекты - удаляем. Копии перемещаем обратно. Сохраняем блок, сохраняем файл.

Все, блок приведен в "божеский" вид :)

P.S. Все описанное многократно проверено на блоках и только на них. Внешние ссылки, хотя и являются с точки зрения AutoCAD "почти блоками", ведут себя по-другому: там порядок отображения примитивов не слетает и обрабатывается вполне корректно (по крайней мере у меня было именно так).

1 комментарий: