Эта страница доступна также на следующих языках: English

### Редактор топологии печатной платы

##### Возможность «раздвижки»

Возможность «раздвижки» («plow» feature) --- когда при проведении линии с помощью инструмента LINE она раздвигает существующие дорожки в стороны, стараясь сохранить, где это возможно, соответствие нормам проектирования.

`Сложность = 4-5`

##### Алгоритм быстрого округления точек привязки

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

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

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

"Improved output-sensitive snap rounding," John Hershberger, Proceedings of the 22nd annual symposium on Computational geomerty, 2006, pp 357-366. http:doi.acm.org/10.1145/1137856.1137909 Алгоритмы, написанные такими авторами, как de Berg, Goodrich, Halperin, Hobby возможно также были бы лучше, чем реализованные в настоящее время. Кроме того, существуют редкие, но реальные ситуации ухудшения, когда результаты округления точек привязки в одном (или обоих) контурах имеют самопересечения, которых не было ранее. Эти самопересечения фатальны для нашего кода обрезки полигонов. Мы не знаем, решают ли эту проблему алгоритмы округления точек привязки, приведённые в этой литературе, или нет, но если нет, нам нужно разработать иной алгоритм, который её решит, с помощью ли умного выбора создаваемых точек округления, или на этапе пост-обработки, на котором самопересечения будут удаляться с минимальным искажением геометрии оригинальных контуров. `Сложность = 4-5` == Инструмент черчения с автотрассировкой == По существу с помощью этого инструмента вы могли бы щёлкнуть в начальной точке, переместить перекрестие курсора в какую-то другую (обычно промежуточную) точку, возможно на другом слое, и инструмент автотрассировки показал бы предполагаемый маршрут до этой точки (соблюдая проектные нормы и требования стиля). Если вам не нравится предложенная дорожка, вы могли бы нажать какую-нибудь клавишу, чтобы посмотреть более дорогой вариант, или какую-то другую клавишу, чтобы откатиться к менее дорогому варианту. Предполагаемый маршрут мог бы динамически изменяться при перемещении перекрестия курсора для достижения указанной им точки. Если бы было невозможно найти путь, дорожка бы пропадала. Щелчок мышью приводил бы к добавлению предложенной дорожки и к переходу инструмента в новую начальную точку (таким же образом, как это делается сейчас для инструмента LINE). `Сложность = 5` == Калькулятор посадочных мест IPC == Создать калькулятор посадочных мест, который принимал бы правила IPC и производил посадочное место для pcb. Предпочтительно написать его таким образом, чтобы ядро программы не зависело от графического интерфейса, с тем чтобы программу можно было использовать в скриптах для создания больших семейств посадочных мест или привязать её к выбранному графическому интерфейсу (lesstif, gtk, может даже cgi). Может быть потребуется купить IPC-7351 (приблизительно в $100 США) и проверить, что кому-нибудь разрешается произвести такой калькулятор. `Сложность = 2` == Экспорт IPC-356 == IPC-D-356 --- спецификация выходного формата списка соединений, используемого для производственной проверки печатных плат. Она определяет информацию и о соединениях, и о положении контактных площадок, облегчая, таким образом, использование автоматического тестирования после производства печатной платы. В данном проекте вам надо реализовать программу экспорта, которая бы писала IPC-D-356-совместимый файл из pcb. Спецификация IPC-D-356 доступна по адресу: http://www.solidigm.com/downloads/ipc356.pdf. `Сложность = 3` == Перечень последних загруженных файлов == В настоящее время в меню Файл программы pcb не отображается перечень последних загруженных файлов. Было бы здорово, если бы pcb отслеживала несколько последних загруженных пользователем файлов. Это стандартная возможность в других программах. `Сложность = 1`