Блок, который сам режет линию под собой

Добавлено: 27 Дек 2009
В первой части статьи мы научимся создавать такие блоки, которые, будучи вставленными в линию, автоматически вырежут из нее кусочек своим наружным контуром и займут его место. Во второй части блок оставит линию неразрывной, но скроет под собой ее участок. Учебные блоки, представленные в статье, из области электрики, но идея, заложенная в них, работает для любой области проектирования. В качестве примера можно привести динамический блок линии разрыва, созданный одним из участников форума http://forum.dwg.ru/, который скрывает "отрезанную" часть детали.

ЧАСТЬ 1

В электрических чертежах большое место занимают различные схемы - принципиальные; структурные, блочные и др. Всевозможные схемы вычерчивают не только электрики, но и представители других профессий. Для всех схем характерна одна особенность. В разрыв линий вставляются различные элементы в виде символов. Многие помнят, что при покупке телевизора с ним вместе в упаковке приходила и принципиальная схема. Она нужна была мастеру, который чинил сломавшийся телевизор и представляла собой чертеж, плотно нашпигованный электронными символами.
С точки зрения вычерчивания схем применительнo к AutoCAD надо приготовить блоки - символы всех элементов и вставлять их в линии, как правило горизонтальные и вертикальные, командой Insert (Вставить). Далее следует разорвать линию под блоком, воспользовавшись командой Trim (Обрезать) или Break (Разорвать). Для вставки каждого блока при этой процедуре необходимо много щелчков: 1 - вставка блока в линию. 2 и 3 - подтверждение масштаба. 4 - задание угла. 5 - вызов команды Trim (Обрезать). 6 - указание режущей кромки (здесь возможен дополнительный щелчок, если кромок две). 7 - окончание выбора кромок. 8 - указание линии, которую надо отрезать. 9 - конец команды. В современных версиях AutoCAD количество щелчков мыши, нужное для вставки собственно блока, становится меньше, но все-же команду Trim (Обрезать) надо вызывать отдельно, после того, как блок уже поставлен на линию. Ниже показано, как объединить две команды, Insert (Вставить) и Trim (обрезать) в одну и довести общее количество щелчков при вставке блока и вырезании линии под ним до трех.
 У тех, кто делает схемы, наверное есть коллекция нужных блоков, или, по-другому, библиотека блоков. Для наших целей эти блоки потребуют некоторой модернизации. Суть идеи объединения команд Insert (Вставить) и Trim (обрезать) заключается в том, чтобы режущая кромка для команды Trim (обрезать) появилась автоматически на вставленном блоке, без ее специального выделения мышью. Блок вставлен - и вот она, режущая кромка, - уже готова к употреблению. Остается только указать линию внутри нее для обрезания. Надо сказать, в общем случае совсем необязательно, что режущая кромка совпадает с габаритами блока. Поэтому эта кромка должна быть отрисована отдельно, а затем удалена из блока после действия команды Trim (обрезать). Это тоже должно произойти автоматически.

image002

Рис. 1

Начнем с того, что создадим, или возьмем готовыми, блоки двух электронных символов, на которых отработаем команду их вставки. Пусть это будут блоки транзистора и резистора. Лучше всего, если они будут выполнены для масштаба 1:1, хотя для отработки нашей идеи это не имеет существенного значения. (В данной статье вопросы масштаба не рассматриваются). Транзистор пусть имеет диаметр 8мм, а резистор - это прямоугольник 10х4мм, рис. 1.

На нашем рисунке жирной точкой показана точка вставки каждого блока. Рисунки транзистора и резистора должны быть отрисованы в разных файлах, и размещены так, чтобы точка вставки имела координаты 0,0. (Можно сделать и по-другому: разместить рисунок в любом, случайном месте пространства модели, а затем командой Base (База) указать точку, которая и станет впоследствии точкой вставки этого файла)

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

Итак, приготовим файл с именем El-transistor (El - от Electronic), а в нем блок с именем Transistor. Само собой, жирная точка на нашем рисунке в состав блока не входит. И вот теперь мы вплотную подошли к тому, чтобы каким-то образом внедрить в блок будущую режущую кромку, которая могла бы быть использована для команды Trim (Обрезать). Проведем такие действия: Поверх окружности, образующей контур блока транзистора, нарисуем точно такую же окружность. Возьмите затем команду Select (Выбрать) и пометьте мышкой эту окружность. Затем создайте новый блок с именем Trans, куда входит блок Transistor и окружность по его контуру. Секрет этого действия прост: При вставке файла с блоком Tranс и после его последующего расчленения командой Explode (Расчленить) окружность будет реагировать на опцию - Previous (Текущий). Это маленькое открытие пришло в голову автора после долгих мучительных поисков, и позволило решить задачу автоматического разрыва линии под блоком без сложного программирования.

Итак, оба учебных файла, в одном хранится блок Trans, в другом Res, представляющий собой внутренний блок Resistor и нарисованный поверх его четырехугольник, также помеченые командой Select (Выбрать), готовы. Отложим их в сторону, зайдем в новый учебный файл, где и будем отрабатывать вставку блоков с разрывом линии. Здесь мы должны отработать макрокоманду, то есть мини-программу, решающую поставленную задачу, или сокращенно макрос. Для этого в современных AutoCAD есть два пути:

  1. Традиционный - создать новый Toolbar (панель инструментов) из 2х учебных кнопок Transistor и Resistor. В диалоговом окне Customize (Адаптация), в поле Macro associated with this button (Макрос для данной кнопки) - для AutoCAD 2005 и старше) или, если AutoCAD 2006 или выше, в соответствующем поле диалогового окна Customize User Interface записать макрокоманду, которую мы приведем ниже.
    image004
    Рис. 2
  2. Эту же макрокоманду можно записать в Tool Palettes, если ваш AutoCAD 2006 и выше


Мы бы посоветовали действовать так:

  1. Сначала при помощи диалогового окна Customize User Interface (в дальнейшем CUI) создать новый Toolbar (панель инструментов), состоящий из 2х кнопок, El-transistor и El-resistor. Сделать пиктограммы (рисунки) для кнопок, и сохранить их в том месте, где вы обычно храните пиктограммы кнопок, сделанные своими руками. (Увы, объем данной статьи не позволяет подробно объяснить, как это делается. Авторы надеются, что наши читатели это знают). На рис. 2 показано окно CUI, в левой нижней и верхней секциях видны кнопки El-Transistor и El-resistor (выделены на рисункe заглавными буквами), а справа вверху вид на Toolbar (панель инструментов) под названием Electronic.
  2. Отработку макроса лучше проверять через Tool Palettes, так как окно CUI раздражающе долго открывается и закрывается, но создание рисунков на кнопке удобнее сделать здесь. Таким образом, строка Macro (Макро) поля Properties (Свойства) пока может остаться незаполненной.


В данном случае макрос отработан автором, а читателю предстоит его записать. Вызовите Tool Palletes (инструментальную палитру) и откройте в ней новую Palette (Палитру), назовите ее Electronic. Нарисуйте произвольную линию и положите ее в поле палитры. Для этого воспользуйтесь командами Copyclip,(Копировать) а затем Paste (Вставить), которые удобней всего взять из меню на правой кнопке мыши. Образуется команда Line (Отрезок) со своей иконкой, и она нужна нам только как промежуточная, чтобы на ее основе создать свою. Нажмите правой кнопкой мыши на эту иконку и в появившемся меню выберите Properties (Свойства). Появится диалоговое окно Tool Properties (Свойства инструментов). Чтобы заменить в этом окне иконку команды Line (Отрезок) на сделанную ранее для транзистора, а затем и резистора, следует нажать на нее правой кнопкой мышы и затем выбрать нужный файл, созданный ранее с помощью диалогового окна CUI. Замените данные, относящиеся к команде Line (Отрезок), на новые, соответствующие блоку Transistor. Заполните поля Name (Имя) и Description (Описание). Последнее не обязательно. В строке Use Flyout (Используйте Вылетающие) выставьте No (Нет). В строке Command String (Строка для команды?) запишите такой макрос:

^C^C_-Insert;El-Transistor;\;;\_Explode;_Last;;_Trim;_Previous;;\_Erase;_Previous;;;

 

image006
Рис. 3


На рисунке 3 показано диалоговое окно с новой пиктограммой и макросом.

image008
Рис. 4

После выхода из диалогового окна на палитре окажется команда вставки транзистора. Создайте копию этой команды здесь-же и замените в ней иконку транзистора на иконку резистора, замените имя команды на Resistor и сделайте соответствующее изменение в макросе. Вид палитры представлен на рисунке 4.
Что означают символы, составляющие макрос? Об этом автор писал в одной из предыдущих статей, смотри http://dwg.ru/art/2. Здесь дана последовательность команд, которую мы вводили бы в командную строку, если бы делали все действия вручную. Команда -Insert (-Вставить) (с минусом) позволяет ей работать в режиме командной строки, без диалогового окна. Значок подчеркивания (_) перед именами команд или опций позволяет вести запись на английском языке в локализованной (русской) версии AutoCAD. Знак (;) эквивалентен вводу Enter, а знак (\) эквивалентен ручному вводу данных в командной строке. Например, указание точки вставки блока. Для того, чтобы наша макрокоманда нашла файлы El-transistor, и El-resistor, находящиеся в вашей библиотеке, папку, в которой они находятся, надо ввести в особый список. Откройте диалоговое окно Options (Настройка) и в нем вкладку Files (Файлы). Раскройте строку Support File Search Path . Далее Add… (Добавить...) и Browse… (Просматривать...). Теперь AutoCAD найдет нужный файл при обращении к нему нашей программы.
Ну а теперь самое интересное. Будучи учебном файле, где вычерчивается схема, нарисуйте горизонтальную линию. Настройте OSNAP (Объектные привязки) так, чтобы в нем по крайней мере была привязка Nearest (Ближайшая). Щелкните по пиктограмме Transistor. Соответствующий блок готов к вставке. Первым щелчком вставляете блок на линию. Вторым задаете угол вращения. Третий щелчок надлежит сделать по линии внутри блока, которую надо вырезать. Убедившись в работоспособности новых команд теперь эти макросы можно скопировать в окно CUI на кнопки, ранее там созданные.Теперь можно снимать блоки как с традиционной панели инструментов, так и с Tools Palettes (инструментальной палитры).
В следующей части статьи мы рассмотрим такой блок, который позволяет не разрезать линию под собой, а скрывать ее своим телом.

ЧАСТЬ 2

Все познается в сравнении...
Блоки, описанные в первой части статьи, хороши для не слишком нагруженных схем, когда они сразу или почти сразу вставляются в нужное место и не требуют больших дополнительных усилий, если блоки надо подвинуть. Но при вычерчивании сложной, насыщенной схемы, когда новому элементу или новой связи с трудом находится место, и ранее нарисованные линии приходится переносить, появляется дополнительная работа по сращиванию ранее разорванных линий. Иногда приходится много раз переносить блоки из одного места в другое, пока они не займут наиболее удачное положение. И каждый раз надо сращивать разорванные линии. На рисунке 5 представлен фрагмент схемы, или Riser, как его называют в США.

image010
Рис. 5


Здесь показаны фидеры, питающие нагрузки высотного здания. Часто переносимыми элементами на этом фрагменте являются ярлыки (tags) на линиях - продолговатые прямоугольники со скругленными краями и с маркировкой внутри, а также протяжные ящики (pull boxes), обозначенные так: PB-7-ХХ-Х. (Цифра 7 означает, что данные протяжные ящики расположены на 7-м этаже). Схема ведь вычерчивается постепенно и эти элементы все время надо сдвигать по мере появления новых связей. Протяжные ящики устанавливаются через определенное количество этажей. Они сначала были на других этажах, но после нескольких подвижек нашли свое место здесь. Следовательно, там, где они были раньше, разорванные вертикальные линии следовало срастить, а здесь разорвать. С ярлыками и того сложней. Они как-бы не являются важными функциональными элементами схемы, но должны быть через каждые несколько этажей, чтобы по схеме можно было легко отследить нужный фидер. Как только место, где находились ярлыки, оказывается нужным для горизонтальной связи, ярлыки подлежали переносу. Может, на работоспособность схемы они и не оказывают влияния, но для чертежника, вычерчивающего схему, ничего нет важнее этих элементов.
Во время вычерчивания этой схемы и пришла идея создать такой блок, который скрывал бы линию под собой, не разрывая ее. В AutoCAD есть объект под названием Wipeout (Маска). Если такой объект положить в основу будущего блока, и разместить его внизу, так, чтобы остальные элементы блока были отрисованы по этой маске, а затем все, включая Wipeout , собрать в блок, то последний будет скрывать линию, в которую блок вставлен. Такова идея, и она была реализована, причем в тестировании принимали участие участники Российского форума по AutoCAD http://dwg.ru/
Вот краткий порядок создания блока:

  1. Создать два специальных слоя. Условное имя одного, допустим, Smart-blocks. Задайте ему какой-нибудь редкий цвет, пусть №21. Второй слой может иметь имя Wipeout (маска) и цвет №255 (по виду белый).
  2. Нарисовать все детали будущего блока, используя слой 0, либо определенный тематический. Наружный контур блока не должен содержать криволинейных элементов. При необходимости замените их короткими (с максимально возможной длиной) отрезками. Превратите (или отрисуйте сразу) наружный контур в замкнутую полилинию.
  3. Возьмите команду Wipeout (Маскировка). Убедитесь, что, если выбрать опцию Frame (Контуры), должно быть положение On (Вкл). На запрос AutoCAD в командной строке Erase poliline? (Удалить полилинию?) ответьте No (Нет). Все ранее нарисованные элементы блока окажутся ниже только-что созданного Wipeout (Маска) и закроются им, то есть станут невидимыми.
  4. Теперь следует взять команду Cdorder, принадлeжащую меню Express и выделить все детали будущего блока, включая Wipeout (маска). Диалоговое окно команды представлено на рисунке 6.
    6
    Рис. 6

    В левой части диалогового окна находится список всех цветов, попавших в выделение. Убедитесь, что цвет №255, которым выполнен контур Wipeout (маска), находится внизу списка. При необходимости сдвиньте его вниз, воспользовавшись кнопкой Move Down (подвинуть вниз). Закончите команду. Теперь все детали будущего блока стали видимыми.
  5. Сделайте текущим слой Smart_blocks и создайте блок.

Проверьте, работает ли блок, перекрывает ли объекты, если блок подвинуть, или вставить на них. Должен перекрывать. Могут возникнуть разные варианты. Например, через такой блок позже проведена линия, и она не прервется автоматически, так как лежит выше него. Или блок вставлен в линию, скрыл под собой ее участок, но впоследствии эту линию удлинили, и она стала видна. В этом случае надо вызвать команду Draworder (Порядок) и опустить линию вниз, или поднять блок наверх. После этого, даже если линия опять всплывет наверх, достаточно сделать регенерацию командой Regen (Реген) и правильное положение восстановится. Можно сделать и так, чтобы на участке, куда вставлен блок, вместо скрытой сплошной линии появилась пунктирная.. Для этого надо создать такой блок, чтобы пунктирная линия была его частью. На рис. 7 показаны блоки: 7а прямоугольник, пустой внутри, 7b прямоугольник с пунктирной линией внутри. Если вставить первый блок в линию, то получим то, что показано nа рис. 7c. Вставка второго блока показана на рис. 7d. Например, таким способом можно получить пунктирный сварочный шов, скрытые головки болтов или гайки, и т. д.

7
Рис. 7


Неплохо сочетаются с Wipeout (маска) и динамические блоки. Таковыми сделаны протяжные ящики, показанные на нашей схеме Рис 5. Они должны иметь внутри перегородки, отделяющие один сервис от другого, например, рабочее питание от резервного. Динамичность этого блока заключается в том, что перегородки можно передвигать, выбирая любое нужное место. В том числе и спрятять лишние, совместив их с боковой стенкой ящика. Кроме того, ящик может растягиваться как по ширине, так и по высоте, и включенный в блок Wipeout (маска) также изменит свою конфигурацию. Таким образом, блок протяжного ящика становится универсальным и пригодным для любого места схемы, куда его решили поставить.
Работа по созданию схем с таким Smart Block значительно упрощается, делается в разы быстрее. Кроме того, появляется еще одно неоспоримое преимущество: поскольку линии, в которые вставлен блок, остаются неразрывными, их легко отследить на экране монитора. Схема, фрагмент которой дан на рис. 5, относится к 40-этажному зданию. Если пометить любую вертикальную линию, она будет выделена на всем протяжении снизу доверху. Используя команду Pan (пан) путем удерживания колеса мыши, можно панорамировать чертеж, не снимая выделения с линии. В некоторых случаях необходимо подсчитывать длины линий. Правда, к схемам это не относится, но, очевидно, план кабельных раскладок можно выполнить с использованием блоков на базе Wipeout (маска). В этом случае линия станет неразрывной и ее длина легко узнается при помощи окна Properties (свойства). Существуют и утилиты, подсчитывающие общую длину всех линейных элементов. Сочетание всех этих методов делает работу в AutoCAD легче и быстрее.
В заключение можно добавить следущее. Выше говорилось, что наружный контур для Wipeout должен быть выполнен из прямых полилиний. Но в меню Express, начиная с AutoCAD-2004 есть команда Clipit. Вот что пишет Help по этой команде: "Allows curved clipping; isolates specified portions of blocks, xref drawings, images, and Wipeouts…" (Позволяет криволинейную подрезку выделенных участков блоков, внешних ссылок, имиджей и масок). Казалось бы, с этой командой можно создать Wipeout (маска), границы которого образованы окружностями, дугами или эллипсами. Но этого не происходит. Программист из Республики Беларусь Владимир Азарко нашел ошибку в файле Clipit.lsp. Если разыскать в нем строку
(command "_.wipeout" "_n" na2 "_y")
и заменить ее на такую:
(command "_.wipeout" "_p" (entlast) "_y")
а затем файл сохранить, то команда Clipit будет создавать маски, образованные такими элементами, как окружности, дуги или эллипсы.
Без программирования не обойтись и работая с нашими Smart Blocks, включающими Wipeout. Выше говорилось, что все Smart blocks лучше всего держать на специализированном слое, который мы предложили назвать Smart-Blocks. Чтобы можно было одним нажатием кнопки выдвинуть все блоки, содержащие Wipeout (маска) "на первый ряд", то есть на Front, следует создать кнопку и записать в ней такой макрос:

^C^C_GETSEL;\;_DRAWORDER;_P;;_F;_RE;

 

Владимир Свет
New York, 2008
Опубликовано в журналах Autocad magazin, 2008, Германия, и
Конструкторское бюро н-р 11/12, 2008 http://kb.promtransizdat.ru/

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


Комментарии

Комментарии 1-7 из 7
vovan1977
, 27 мая 2010 в 06:10
#1
Часто прибегаю к еще одному простому методу, используя маску текста (ACAD 2006 и выше).
-во всех своих стилях размерах см. text/Fill color ВСЕГДА! установлено "Background" (весьма помогает в перегруженных чертежах)
-чтоб вырезать чего-то, создаю многострочный текст с точкой очень маленького размера и толщиной линии 0,00м. Далее (при редактировании) щелкаю ПКМ, выбираю "Background mask". Заготовка готова. Остается двигая 4-мя ручками сего текста закрывать то, чего надо.
-Да и просто многострочный текст (с текстом вместо точки) с "Background mask" также находит свое применение
Redya
, 30 августа 2010 в 10:14
#2
Простите, но мне не понятно. Когда мы создаём учебный файл, в котором осуществляем вставку блока, то при нажатии на палитре на блок, автокад ясное дело его не находим (и правильно, мы же не подгружали блок в файл). Я пытался сделать вставку блока прям в файле EL-transistor с помощью макроса ^C^C_-Insert;Trans;;;_Explode;_Last;;_Trim;_Previous;;_Erase;_Previous;;; но на это он мне выдаёт:

Команда: _-Insert
Имя блока или [?]: Trans

Единицы: Миллиметры Преобразование: 1.0000
Точка вставки или [Базовая точка/Масштаб/X/Y/Z/ПОворот]:
Введите масштаб по оси X, укажите второй угол или [Угол/XYZ] <1>:
Масштаб по оси Y <равен масштабу по X>:

Угол поворота <0>:

Команда: _Explode

Выберите объект: _Last

Команда:
РАСЧЛЕНИТЬ
Выберите объект: _Trim


*Неверный выбор*
Требуется точка или Последний/Все/Группа

Выберите объект:
Объект не может быть расчленен.

Т.е. последний выбор не работает как я понимаю. (Когда я командой _select выбираю окружность по которой нужно обрезать линию, то кад запоминает её. Но потом же я должен сделать блок _trans, и по-этому выбираю заново обычной рамкой блок вместе с окружностью, т.е. предыдущий выбор окружности сбрасывается, так?). Я не понимаю где я что не правильно делаю.
Михаил 1234
, 12 июля 2011 в 15:23
#3
Если нужно чтобы блок прямоугольной формы скрывал за собой объекты, то в редакторе блоков нужно вписать в контур этого блока многострочный текст из пробелов. В настройках текста в меню "скрытие заднего плана" поставить галку "скрывать задний план", коэф. перекрытия установить в 1,0, поставить галку "использовать цвет фона рисунка". Текст разместить на заднем плане блока, чтобы тот не закрывал собой линии самого блока. Всё.
Alex2006
, 26 октября 2011 в 13:31
#4
не совсем понял как работает команда Clipit. Объяснить ни кто не сможет. Заранее благодарен.
Mahambet
, 21 апреля 2012 в 16:57
#5
Где блок-схемы в автокаде 2004?
Помогите
Raricon
, 24 мая 2012 в 03:10
#6
А еще можно команду "маскировка" (Wipeout) сделать цветом 255,255,255
ElectricSib
, 16 мая 2017 в 11:23
#7
Существует ли ЛИСП, который без использования wipeout обрезает линии/полилинии, попавшие под заданные блоки?
Комментарии могут оставлять только зарегистрированные участники
Авторизоваться
Размещение рекламы