Введение

Эта программа возникла и стала развиваться, когда я понял, что рисовать платы на миллиметровке карандашом можно, но только до тех пор, пока они не двухсторонние. А двухсторонность потребовалась для линейки включенных в матрицу светодиодных индикаторов уровня записи магнитофона. Кроме того, примерно в это же время у меня завелся принтер hp-400, который легко мог изобразить топографию платы в масштабе 1:1. Надо было этим воспользоваться.

Я знал, что есть разного рода autocad'ы, но, во первых, их нужно где-то найти (интернетом тогда пахло слабо), во вторых - освоить. А так как мои требования к редактору были заметно ниже сложности освоения профессиональных продуктов (с учетом отсутствия литературы на русском), было решено написать редактор самостоятельно.

За время существования программы (первые версии писались году в 1995-м), существенных изменений в ней не делалось. Единственно, с появлением фоторезистивных и лазерно-утюжных методов, когда стали важны не только дырки под ножки деталей, но и дорожки, было существенно доработано качество печати. Кроме того, в связи с постепенной миграцией с MS-DOS на FreeBSD, была создана версия для X Window System.

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

Базовые редактируемые элементы

Плата

Плата, в понимании редактора - неограниченное (практически) двумерное пространство. Все координаты на нем измеряются в мм. В версиях для MS-DOS использовался только квадрант положительных координат, в версии для *NIX, в качестве эксперимента (вроде удачного), это ограничение снято. Можно работать в любой точке системы координат, но, разумеется, близость к началу повышает точность.

Редактор знает о существовании двух сторон платы. Можно попросить его игнорировать одну из сторон (желательно вторую), но нельзя ввести дополнительные стороны. Обычно первая сторона во всех случаях обозначается зеленым цветом, вторая - голубым.

Пины

Пины (точки, иногда дырки) - это точки на координатных плоскостях. Они храняться в файлах *.pin и описываются тремя параметрами: x-координата, y-координата, тип. В зависимости от типа пин может принадлежать как одной стороне, так и обеим сразу.

На текущий момент существуют следующие типы пинов [в скобках - радиус в мм]:1) двухсторонний круглый пин [0.85],2) пин первой стороны [0.20],3) двухсторонний квадратный пин [0.80 (половина стороны)],4) пин второй стороны [0.20],5) крупный двухсторонний круглый пин [1.10],6) крупный двухсторонний квадратный пин [1.10 (половина стороны)],7) пин заливки первой стороны,8) пин заливки второй стороны.

Обычные двухсторонние (сквозные) пины ориентированы на легкие детали (или имеющие много ножек) - микросхемы, резисторы до 0.25 вт и т.д.. Крупные пины - для проводов, микросхем кр142ен, мощных транзисторов, отверстий для крепления и т.д.. Пины первой и второй стороны - это точки привязки (соединений, изгибов) дорожек. Также ими удобно обозначать контуры деталей сложной формы. Пины заливки - это центры или якоря, указывающие на контуры заливки (сплошного заполнения платы).

Помимо информации, хранимой в файлах, описывающих плату, пины могут иметь два признака: во первых, любой, но только один, пин может быть "выбранным" (обозначается красным крестиком); во вторых, любой набор пинов может образовать "группу" (обозначаются желтым крестиком). Назначение "выбранного" и "группы" будет описано ниже.

При генерации файла для печати сквозные пины также получают защитную окантовку (т.е. область, из которой будут удалены части дорожек). Ее радиусы:1.00 мм и 1.30 мм для обычного и крупного пинов соответственно.

Координаты пинов обычно привязаны к сетке с шагом 1.25 мм или 2.50 мм. В версии для *NIX есть возможность отвязать координаты отдельного пина от сетки, но это пока на уровне эксперимента (да и на практике такая возможность не требовалась).

Максимальное число пинов на плате: 1200.

Дорожки

Дорожки (линии, прямые) - отрезки, концы которых связаны с пинами. Описания дорожек сохраняются в файлах *.lin. Помимо двух пинов, дорожка описывается типом.

Сейчас программа знает о трех типах дорожек:1) реальные дорожки первой стороны,2) реальные дорожки второй стороны,3) изолированные дорожки.

Первые два типа дорожек - это фактические дорожки, которые будут присутствовать в печатаемом шаблоне. Причем в режиме редактирования они изображаются как зеленая непрерывная линия шириной один пиксель (дорожка первой стороны) и голубая прерывистая линия шириной три пикселя (дорожка второй стороны). Это позволят легко различать отдельные дорожки, даже если они накладываются. При печати обе линии становяться непрерывними, с шириной около 1 мм.

Третий тип дорожек - это просто напоминание о возможных изолированных соединениях (или о перемычках). Они не печатаются в результирующем рисунке, а при редактировании изображаются серым цветом.

Также первые два типа линий при печати и редактировании могут быть изображены толстой пунктирной линией красного цвета. Это - ошибочные дорожки. Например, дорожка, которая относиться к первой стороне, но ее концы связаны с пинами второй стороны. Либо дорожка первой или второй стороны, но соединенная с пинами разных сторон.

Максимальное число дорожек на плате: 999.

Детали

Детали (файлы *.det) - это просто наборы пинов. Пин может как не относиться ни к какой детали, так и относиться к нескольким деталям сразу. Детали физически не существуют (т.е. они не выводятся на печать), но повышают удобство ориентации в географии платы. Они выводятся при редактировании тонкими серыми пунктирными полосками либо темно-серыми прямоугольниками.

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

Каждая деталь может иметь текстовый комментарий. Он выводиться только в списке деталей и имеет длину до 42 знаков. В файлах *.det используется кодировка cp866. MS-DOS-версия позволяет использовать русские буквы, *NIX-версия - только просматривать русские комментарии (вывод шрифтами koi8) (ввод пока только латиницей, позже постараюсь это исправить).

Максимальное число деталей на плате:200, каждая из них образуется максимум 40 пинами.

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

Окна

Версия для MS-DOS использовала неподвижные окна вывода, размеры и координаты которых вычислялись при запуске программы в зависимости от используемого графического режима. Версия для X Windows использует пять полноценных окон. Они подчиняются всем правилам, принятым в используемом Вами оконном менеджере. Замечу, однако, что программа тестировалась с менеджером fvwm2, и в других менеджерах могут возникнуть какие-либо неожиданности. Если я буду о них знать - постараюсь исправить.

Существенным недостатком текущей версии является то, что при открытии окон она создает их фиксированного размера в фиксированных координатах (в расчете на режим экрана 1024x768). Это будет исправлено в следующих версиях.

Первое окно: главное окно редактирования платы. Его закрытие сразу приводит к завершению программы без сохранения результатов (не забывайте записываться).

Второе окно: кнопки управления программой. Его можно закрыть, это не приведет к остановке программы. Вернуть назад - клавиша F5.

Третье окно: статистика. Количество пинов, линий, деталей, координаты курсора, ближайшего от курсора пина, а так же notify - сообщения от программы, которые можно игнорировать ("файл сохранен", "нельзя удалить пин, входящий в деталь" и т.д.). Окно можно закрыть, открыть снова - F6.

Четвертое окно: список деталей. Можно закрыть, открыть снова - F7.

Кроме того, окно с кнопками и статистикой закрываются при отпускании клавиши Ctrl и появляются вновь при ее нажатии. Т.е. можно не держать их открытыми постоянно, а лишь в нужный момент вызывать Ctrl-ом.

Существует также пятое окно: просмотра сгенерированного PCL-файла. Когда оно открыто, другие окна теряют интерактивность.

Теперь подробнее о каждом окне.

Главное окно редактирования

Здесь изображается плата: сначала сетка координат, затем детали, линии, последними выводятся пины. Таким образом пин не может скрыться под дорожкой, дорожка не может быть стерта границами деталей, сетка не может помешать вообще никому. В зависимости от режима вывода могут не быть показаны заливки, сетка, а также элементы, относящиеся только к одной из сторон.

Кратко, основные операции в этом окне: щелчок левой клавишей вдалеке от существующих пинов - создание нового пина. Вблизи от существующего - переключение на него признака "выбранный" (красный крестик). Нажатие левой клавиши вблизи существующего, удержание и перенос - перемещение пина.

Нажатие правой клавиши вдалеке от существующих пинов, удержание и движение - выделение области. Все пины, попавшие в эту область будут отнесены к "группе" (желтый крестик), предыдущая "группа" будет забыта. Правая клавиша вблизи пина, если он не "выбранный" - создание линии между "выбранным" и ближайшим от курсора мыши пином (при этом "выбранным" становиться ближайший пин - это упрощает рисование длиных дорожек). Если такая линия уже существует - она меняет тип (первая сторона, вторая сторона, изолированная).

Нажатие и удержание Shift - режим перемещения "группы".

Клавиши от "1" до "8" - смена типа ближайшего пина. "d" - создание новой детали из "группы" пинов. "l" - удаление линии между ближайшим и "выбранным" пином. "p" - вблизи пина - его удаление, а также удаление всех линий, которые были с ним связаны. Нельзя удалить пин, который входит в какую либо деталь.

Окно кнопок (управления)

Окно статистики

"Размер платы", выводимый в этом окне - это координаты наиболее далеко отстоящих друг от друга пинов платы. Т.е. это та область, которая полностью включает в себя все пины (а следовательно, все другие элементы платы). По ней определяется область печати.

Другие данные, мне кажется, говорят сами за себя.

Окно деталей

Здесь выводиться список всех наименований деталей. Когда мышь движется по списку деталей, они подсвечиваются в окне редактирования. Левая клавиша, нажатая в списке деталей, выделяет пины детали в "группу" (предыдущее выделение теряется) и одновременно центрует изображение детали в окне. Правая клавиша выводит приглашение для ввода комментария к детали. Средняя удаляет деталь (при этом пины, входившие в деталь не удаляются).

Окно просмотра PCL-файла

Черно-белый рисунок, инверсный по отношению к тому, что будет на бумаге. Клавиши-стрелки - прокрутка, esc, enter - выход. Пробел - попытка развернуть окно в соответствии с размером изображения. Масштаб фиксирован - 300 точек экрана на дюйм печати принтера. Желтая полоса - граница передаваемых принтеру данных, красная - граница формата A4.

Пока это окно открыто, другие окна не реагируют на клавиши и мышь.

Таблицы используемых клавиш управления

Мышь:

ОкноЛеваяСредняяПравая
Главное Вблизи любого пина - его перемещение (если мышь не двигалась, пин становиться выбранным), вдали - установка нового пина Вблизи любого пина - удаление последнего Вблизи любого пина - создает дорожку от выбранного до данного или изменяет ее тип, вдали - выбор группы пинов
Управления
Exit
Ничего Завершение работы Ничего
Управления
Mirror
Зеркалирование всей платы Ничего Зеркалирование выбранной группы пинов
Управления
Rotate
Поворот всей платы на 90 градусов Ничего Поворот на 90 градусов выбранной группы пинов
Управления
Print
Диалог "Печать" Запрашивает имя файла для генерации PCL (фактически генерация не выполняется) Открывает окно просмотра последнего подготовленного к печати рисунка
Управления
Save
Сохранение
Управления
Масштаб
Увеличивает масштаб в 2 раза Устанавливает масштаб: 1 пиксель экрана = 1 пиксель (точка) принтера Уменьшает масштаб в 2 раза
Управления
По окну
Устанавливает масштаб таким образом, чтобы плата заняла все окно (по X) Устанавливает масштаб таким образом, чтобы плата полностью поместилась в окно (однако это может привести к искажению пропорций) Устанавливает масштаб таким образом, чтобы плата заняла все окно (по Y)
Управления
Детали
Переключает режим вывода деталей
Управления
Сетка 2.50
Сетка привязки 2.50 мм
Управления
Сетка 1.25
Сетка привязки 1.25 мм
Управления
Сторона 1
Переключает вывод первой стороны
Управления
Сторона 2
Переключает вывод второй стороны

Клавиатура:

КлавишаДействие
Ctrl При нажатии выводит окна деталей и кнопок, при отпускании - удаляет.
Shift При удержании этой клавиши и одновременном движении мыши будет перемещаться выделенная группа пинов.
F2 Сохрание.
p Вблизи любого пина - его удаление, вдали - создание нового пина.
1..8 Устанавливает тип ближайшего пина.
Space Вблизи любого пина - его выбор, в окне просмотра PCL - попытка развернуть окно до размеров изображения.
P Переключение вида отображения: обычный режим <-> рисунок для печати.
G Переключение привязки координат к сетке.
d Удаляет выбранную деталь (только если окно деталей имеет фокус ввода).
Delete Вблизи любого пина - удаляет дорожку между данным и выбранным пинами.
F5..F7 Переключает окна управления, статистики и деталей соответственно.

Помимо этого также есть ряд других, более очевидных, реакций программы. Скроллеры окон платы и деталей, например (но там тоже различаются нажатия разных клавиш), клавиши-стрелки...

Командная строка

На текущий момент командная строка анализируется только на наличие имени схемы. Если оно не указано - используется последнее использованное имя (сохраненное в ~/.platsrc).

Области заливки

Так как ширина дорожек фиксирована, чтобы создать на плате широкую закрытую область используются т.н. "области заливки". Это замкнутый контур построенный из дорожек, внутри которого установлен пин заливки.

Предположительно, это временная мера и в дальнейшем будет реализован алгоритм автоматического поиска возможных областей заливки. Но когда ?...

Сборка из исходных текстов

Никаких особенностей:

ppc386 plats.pp

Можно по вкусу добавлять ключи группы -g (отладка), если будете сообщать мне о проблемах. По сообщениям с мест: еще может потребоваться -Sg (подержка оператора goto - где-то он в pcl.pp используется), если нет соответствующего ключа в fpc.cfg.

plats использует только стандартный модуль system, остальные необходимые модули включены в состав архив plats.tgz.

Благодарности

А.П. Полищук, С.А. Семериков. Программирование в X Window средствами Free Pascal - по этой методичке я осваивал работу с X.

И всем остальным: разработчикам *nix, fpc, pascal,.....:)