1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <link rel=
"stylesheet" media=
"screen" type=
"text/css" href=
"./style.css" />
6 <link rel=
"stylesheet" media=
"screen" type=
"text/css" href=
"./design.css" />
7 <link rel=
"stylesheet" media=
"print" type=
"text/css" href=
"./print.css" />
9 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
14 <em>Эта страница доступна также на следующих языках:
</em>
15 <a href=
"pcb-projects.html" class=
"wikilink1" title=
"pcb-projects.html">English
</a>
18 <h3 id=
"редактортопологиипечатнойплаты">Редактор топологии печатной платы
</h3>
23 <h5 id=
"возможностьраздвижки">Возможность «раздвижки»
</h5>
27 Возможность «раздвижки» («plow» feature) --- когда при проведении линии с
28 помощью инструмента
<strong>LINE
</strong> она раздвигает существующие дорожки в стороны,
29 стараясь сохранить, где это возможно, соответствие нормам проектирования.
33 <code>Сложность =
4-
5</code>
38 <h5 id=
"алгоритмбыстрогоокругленияточекпривязки">Алгоритм быстрого округления точек привязки
</h5>
42 Реализовать алгоритм быстрого округления точек привязки и разрешить тот
43 случай, когда вставка точки приводит к самопересечению.
47 В
<strong>pcb
</strong> для всех объектов используется целочисленная координатная
48 система. В коде обрезки полигонов рассчитываются все точки пересечений
49 между двумя несамопересекающимися контурами (помимо прочего, что там
50 делается), но координаты этих точек пересечения тоже должны быть целыми
55 Алгоритм быстрого округления точек привязки замещает два сегмента,
56 пересекающихся не в точках их концов, четырьмя сегментами с координатами,
57 являющимися целыми числами и близкими к исходной точке пересечения
58 (координаты которой не целые числа). Так как такая операция округления в
59 точке пересечения может изменить наклон каждого из четырёх сегментов в
60 сравнении с исходными двумя, она вызывает возможность возникновения новых
61 пересечений между сегментами, замещающими прежние, и другими сегментами
62 контура, не существовавших для первоначальных сегментов. Алгоритм округления
63 точек привязки должен произвести такой набор сегментов, все пересечения
64 которых находятся в конечных точках сегментов с целыми координатами. В
65 существующем коде
<strong>pcb
</strong> это уже делается, но там используется алгоритм, в
66 теории более медленный по сравнению с другими известными, такими как:
70 "Improved output-sensitive snap rounding,
" John Hershberger, Proceedings of
71 the
22nd annual symposium on Computational geomerty,
2006, pp
357-
366.
72 http:
<em>doi.acm.org/
10.1145/
1137856.1137909
74 Алгоритмы, написанные такими авторами, как
</em>de Berg
<em>,
</em>Goodrich
<em>,
75 </em>Halperin
<em>,
</em>Hobby
<em> возможно также были бы лучше, чем реализованные в
78 Кроме того, существуют редкие, но реальные ситуации ухудшения, когда
79 результаты округления точек привязки в одном (или обоих) контурах имеют
80 самопересечения, которых не было ранее. Эти самопересечения фатальны для
81 нашего кода обрезки полигонов. Мы не знаем, решают ли эту проблему алгоритмы
82 округления точек привязки, приведённые в этой литературе, или нет, но если
83 нет, нам нужно разработать иной алгоритм, который её решит, с помощью ли
84 умного выбора создаваемых точек округления, или на этапе пост-обработки, на
85 котором самопересечения будут удаляться с минимальным искажением геометрии
86 оригинальных контуров.
88 <code>Сложность =
4-
5</code>
90 == Инструмент черчения с автотрассировкой ==
92 По существу с помощью этого инструмента вы могли бы щёлкнуть в начальной
93 точке, переместить перекрестие курсора в какую-то другую (обычно
94 промежуточную) точку, возможно на другом слое, и инструмент автотрассировки
95 показал бы предполагаемый маршрут до этой точки (соблюдая проектные нормы и
96 требования стиля). Если вам не нравится предложенная дорожка, вы могли бы
97 нажать какую-нибудь клавишу, чтобы посмотреть более дорогой вариант, или
98 какую-то другую клавишу, чтобы откатиться к менее дорогому варианту.
99 Предполагаемый маршрут мог бы динамически изменяться при перемещении
100 перекрестия курсора для достижения указанной им точки. Если бы было
101 невозможно найти путь, дорожка бы пропадала. Щелчок мышью приводил бы к
102 добавлению предложенной дорожки и к переходу инструмента в новую начальную
103 точку (таким же образом, как это делается сейчас для инструмента
<strong>LINE
</strong>).
105 <code>Сложность =
5</code>
107 == Калькулятор посадочных мест IPC ==
109 Создать калькулятор посадочных мест, который принимал бы правила IPC и
110 производил посадочное место для
<strong>pcb
</strong>. Предпочтительно написать его таким
111 образом, чтобы ядро программы не зависело от графического интерфейса, с тем
112 чтобы программу можно было использовать в скриптах для создания больших
113 семейств посадочных мест или привязать её к выбранному графическому
114 интерфейсу (lesstif, gtk, может даже cgi). Может быть потребуется купить
115 IPC-
7351 (приблизительно в $
100 США) и проверить, что кому-нибудь
116 разрешается произвести такой калькулятор.
118 <code>Сложность =
2</code>
120 == Экспорт IPC-
356 ==
122 IPC-D-
356 --- спецификация выходного формата списка соединений,
123 используемого для производственной проверки печатных плат. Она определяет
124 информацию и о соединениях, и о положении контактных площадок, облегчая,
125 таким образом, использование автоматического тестирования после производства
126 печатной платы. В данном проекте вам надо реализовать программу экспорта,
127 которая бы писала IPC-D-
356-совместимый файл из
<strong>pcb
</strong>. Спецификация
128 IPC-D-
356 доступна по адресу:
129 http://www.solidigm.com/downloads/ipc356.pdf.
131 <code>Сложность =
3</code>
133 == Перечень последних загруженных файлов ==
135 В настоящее время в меню
</em>Файл
<em> программы
<strong>pcb
</strong> не отображается перечень
136 последних загруженных файлов. Было бы здорово, если бы
<strong>pcb
</strong> отслеживала
137 несколько последних загруженных пользователем файлов. Это стандартная
138 возможность в других программах.
140 <code>Сложность =
1</code>