...и некоторые известные, но не очень очевидные моменты.
Иногда очень хочется, чтобы порядок следования примитивов внутри блока был строго определенным. Самый живой пример - применение маскировки.
При этом иногда вроде бы все сделано "как надо", в библиотечном файле все работает как надо, а вот в любом другом файле, куда был импортирован такой блок - творится черт-те что.
На самом деле все очень просто. Нередко при создании блока маскировка создается "в последних рядах", и потом с помощью команды _.draworder помещается "за всеми объектами". Так вот, при работе в текущем файле этот метод прокатывает на ура, но при импорте блока в новый файл этот порядок "слетает".
Конечно, можно зайти в редактор блоков и все подправить руками, но рано или поздно это будет не сделано.
Выход только один: в результирующем блоке примитивы должны следовать один за другим. В этом же порядке они и будут обрабатываться в новых файлах, куда этот блок будет вставляться.
Допустим, мы создаем блок (для упрощения ситуации рассматриваю вариант с обычным, нединамическим блоком) с маскировкой, которая частично перекрывает пару примитивов (круг и дугу). Поверх маскировки показывается атрибут, отрезок и полилиния.
История создания блока такова, что маскировка создана в последнюю очередь. Что надо сделать?
Выбираем объекты, которые должны лежать "над" маскировкой и копируем (обратите внимание - именно копируем!) куда-нибудь в сторону. Я обычно включаю режим ORTHO (F8) и указываю направление, например, вверх, расстояние - по ситуации. Исходные объекты - удаляем. Копии перемещаем обратно. Сохраняем блок, сохраняем файл.
Все, блок приведен в "божеский" вид :)
P.S. Все описанное многократно проверено на блоках и только на них. Внешние ссылки, хотя и являются с точки зрения AutoCAD "почти блоками", ведут себя по-другому: там порядок отображения примитивов не слетает и обрабатывается вполне корректно (по крайней мере у меня было именно так).
http://autolisp.ru/2013/09/18/draworder-inside-blocks/
ОтветитьУдалить