libgeda: Don't double free path argument
[geda-gaf.git] / docs / wiki / pcb-projects.html
blob2d73832d824433a3b844aa5dc7c25c8d84998223
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html>
4 <head>
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" />
10 </head>
11 <body>
13 <p>
14 <em>Translations of this page are also available in the following languages:</em> <a href="pcb-projects.ru.html" class="wikilink1" title="pcb-projects.ru.html">Русский</a>
15 </p>
17 <h1 id="pcbprojects">pcb Projects</h1>
18 <div class="level1">
20 </div>
22 <h2 id="corefunctionality">Core Functionality</h2>
23 <div class="level2">
24 <ul>
25 <li class="level1"><div class="li"> <a href="pcb-padstacks.html" class="wikilink1" title="pcb-padstacks.html">Padstacks</a></div>
26 </li>
27 </ul>
29 </div>
31 <h2 id="designrulechecker">Design Rule Checker</h2>
32 <div class="level2">
34 <p>
35 <a href="pcb-drc.html" class="wikilink1" title="pcb-drc.html">drc</a>
36 </p>
38 </div>
40 <h3 id="onlinedrc">Online DRC</h3>
41 <div class="level3">
43 </div>
45 <h1 id="pcblayouteditor">pcb Layout Editor</h1>
46 <div class="level1">
48 </div>
50 <h3 id="plowfeature">Plow feature</h3>
51 <div class="level3">
53 <p>
54 A &quot;plow&quot; feature where the line tool shoves existing traces aside
55 preserving the design rules when possible.
56 </p>
58 <p>
59 <code>Difficulty = 4-5</code>
60 </p>
62 </div>
64 <h3 id="fastsnaproundingalgorithm">Fast snap rounding Algorithm</h3>
65 <div class="level3">
67 <p>
68 Implement a fast snap rounding algorithm and resolve the case where
69 inserted point cause self-intersection.
70 </p>
72 <p>
73 PCB uses an integer coordinate system for all of its objects. The polygon
74 clipping code computes all points of intersection between two
75 non-self-intersecting contours (among many other things it does), but these
76 points of intersection must also have integer coordinates.
77 </p>
79 <p>
80 A snap-rounding algorithm replaces two segments that intersect at other than
81 their end points with four segments where each has an end point on an
82 integer coordinate near the original (non-integer) intersection. Because
83 this rounding operation on the point of intersection can change the slopes
84 of the four segments compare to that of the original two, it raises the
85 possibility that new intersections between the replacement segments and
86 other segments of the contours occur that did not exist with the original
87 segments. The snap rounding algorithm needs to produce a collection of
88 segments where all intersections occur at segment end points having integer
89 coordinates. The existing code in pcb does this already, but it uses a
90 theoretically slow algorithm, compared to others that are known, such as:
91 </p>
93 <p>
94 &quot;Improved output-sensitive snap rounding,&quot; John Hershberger, Proceedings of
95 the 22nd annual symposium on Computational geometry, 2006, pp 357-366.
96 http:<em>doi.acm.org/10.1145/1137856.1137909
98 Algorithms described by de Berg, or Goodrich or Halperin, or Hobby would
99 probably also be better than what we currently have implemented.
101 In addition, there are rare-but-real degenerate situations where the snap
102 rounding results in one (or both) contours having a self-intersection that
103 did not exist before. This self-intersection is fatal to our polygon
104 clipping code. We do not know if the snap rounding algorithms in the
105 literature deal with this issue or not, but if they do not, we need to
106 develop a variant algorithm that does, whether done by judicious choice of
107 the rounding points that are created, or a post-processing step that
108 eliminates the self-intersection with minimal geometric distortion to the
109 original contours.
111 <code>Difficulty = 4-5</code>
113 ==== Snapping enhancements ====
115 There are a number of possible enhancements related to crosshair snapping that could improve usability. For example, being able to reorder the snapping priority (what objects are snapped to before others), disabling certain objects from being snapped to, changing the radius at which a snap occurs, and others.
117 Ideas for how the snapping system should work are being collected here: <a href="snappinginpcb.html" class="wikilink2" title="snappinginpcb.html">Snapping in pcb</a>. There is also a todo list with some work that needs to be done.
119 ==== Auto-routed drawing tool ====
121 Basically with this tool, you would click on a starting point, then drag the
122 crosshair to some other (typically intermediate point), possibly on another
123 layer and an auto-routing tool would show a prospective path to that point
124 (meeting design rules and style requirements). If you didn&#039;t like the
125 offered path, you could hit a key to see a more expensive candidate, or a
126 different key to (back up) to a less expensive candidate. The prospective
127 route would dynamically change to reach the crosshair end-point as the
128 crosshair is moved. It would disappear if no path could be found. Clicking
129 would place the prospective path as copper and anchor a new starting point
130 for the tool (much like the line tool does now).
132 <code>Difficulty = 5</code>
134 ==== IPC Footprint Calculator ====
136 Build a footprint calculator that can take the IPC rules and produce a pcb footprint. Preferably write this in a way where the core program is independent of a GUI so that you can script it for generating entire large families of footprints or hook it up to a GUI of choice (lesstif, gtk, maybe even cgi). Would require the purchase of IPC-7351 (approximately U.S.A. $100) and verifying that one is allowed to produce such a calculator.
138 <code>Difficulty = 2</code>
140 ==== Recently loaded file list ====
142 Presently pcb does not present a list of recently loaded files in the file menu. It would be nice if pcb kept track of the last few files a user loaded. This is a common feature found in other programs.
144 <code>Difficulty = 1</code>
146 ====== User Experience (UX) Improvements ======
149 ==== Update the User Manual ====
151 In 1997, Richard Stallman wrote: “The biggest deficiency in free operating systems is not in the software — it is the lack of good free manuals that we can include in these systems.”
153 * Include a chapter on the Topological router in User Manual.
154 * Include DJ&#039;s Getting Started in the User Manual.
155 * Extend Getting Started for both autorouter and topological router.
156 * Add more step-by-step examples for existing exporters:
157 * Usage of Nelma.
158 * Usage of GSvit.
159 * Usage of Blind and buried vias.
160 * Unify and combine the READMEs.
162 ==== i18n / l10n ====
164 * Get more translations/translators --&gt; better and more language translations.
165 * Update the Dutch translation ?
166 * Update the French translations ?
167 * Update the Cyrrilic translations ?
168 * Use Launchpad for common translations.
169 * Check on what should be translatable strings.
170 * Check on plural forms in exotic languages (Japanese, etc).
171 * Respect &quot;Right-To-Left&quot; reading users (Arabic, GUI layouts ?).
173 ==== Netlists ====
175 * Layout vs netlist/schematic check or just trust the &quot;import schematic&quot; netlist (ERC).
176 * Rebuilding a netlist from scratch, based on connectivity (copper layers).
178 ==== Routing ====
180 * Respect the &quot;outline&quot;, &quot;route&quot; and non-copper layers with the autorouter.
181 * Respect the &quot;outline&quot;, &quot;route&quot; and non-copper layers with the toporouter.
182 * Add via placement to the toporouter.
183 * Respect keepouts.
184 * Importing routing style and other data from the netlist (if available).
186 ==== Other platforms, GUI&#039;s and dependencies ====
188 * Migrate to GNOME/GTK3 … when ?
189 * Migrate to GNOME/GTK4 … when ?
190 * HTML5 (+java) GUI (web based pcb layout designer).
191 * Android GUI for tablets and smart-phones.
192 * QT GUI ?
193 * wxWidgets for native Microsoft windows look-and-feel UX ?
194 * Single Document Interface mode GTK UI with a separate function tear-off (lessGTK ?)
195 * Separate layout window for artwork (primary screen).
196 * Separate window for buttonbox and pull-down menu-items (secondary screen).
197 * More routing styles (in pull-down combo-box ?).
198 * Multiple Document Interface mode for the GTK UI ?
199 * Multiple Document Interface mode for the lesstif UI ?
200 * Cygwin port for windows ?
201 * W32 port with minipack ?
202 * WIN32 port with a NSIS installer ?
203 * Flatpak (http:</em>flatpak.org) pcb packages for multiple linux distributions ?
204 </p>
206 </div>
208 <h3 id="plug-ins">Plug-ins</h3>
209 <div class="level3">
210 <ul>
211 <li class="level1"><div class="li"> Breakout plug-in for BGA escape routes.</div>
212 </li>
213 <li class="level1"><div class="li"> MUCS manhattan router plug-in.</div>
214 </li>
215 <li class="level1"><div class="li"> Pcb shopper quotation plug-in.</div>
216 </li>
217 <li class="level1"><div class="li"> Double Stripline/Microstrip Impedance Calculator plug-in.</div>
218 </li>
219 <li class="level1"><div class="li"> Entity inspector/editor plug-in.</div>
220 </li>
221 <li class="level1"><div class="li"> Serpentine length matching plug-in.</div>
222 </li>
223 <li class="level1"><div class="li"> Differential pair routing plug-in.</div>
224 </li>
225 <li class="level1"><div class="li"> Panelize plug-in.</div>
226 </li>
227 <li class="level1"><div class="li"> Bus routing plug-in.</div>
228 </li>
229 <li class="level1"><div class="li"> Push and Shove routing plug-in.</div>
230 </li>
231 <li class="level1"><div class="li"> Parasitic capacitance/inductance extraction plug-in.</div>
232 </li>
233 <li class="level1"><div class="li"> Load plug-ins on demand.</div>
234 </li>
235 </ul>
237 </div>
239 <h3 id="fileexchange">File exchange</h3>
240 <div class="level3">
241 <ul>
242 <li class="level1"><div class="li"> IDF importer/exporter (ECAD &lt;--&gt; MCAD).</div>
243 </li>
244 <li class="level1"><div class="li"> XML importer/exporter.</div>
245 </li>
246 <li class="level1"><div class="li"> DXF importer/exporter (PCB &lt;--&gt; MCAD).</div>
247 </li>
248 <li class="level1"><div class="li"> DSN importer/exporter (PCB &lt;--&gt; external routing).</div>
249 </li>
250 <li class="level1"><div class="li"> Verilog-AMS exporter (PCB --&gt; simulation / analysis, see Albert Davis talk at FOSDEM-2016 ).</div>
251 </li>
252 <li class="level1"><div class="li"> GnuCAP exporter (PCB --&gt; simulation / analysis).</div>
253 </li>
254 </ul>
256 </div>
258 <h3 id="exporters">Exporters</h3>
259 <div class="level3">
260 <ul>
261 <li class="level1 node"><div class="li"> Geometric model representation:</div>
262 <ul>
263 <li class="level2"><div class="li"> VRML exporter (PCB --&gt; eye-candy for visualisation / sales pitch).</div>
264 </li>
265 <li class="level2"><div class="li"> OpenSCAD exporter (PCB --&gt; MCAD integration / 3D printing / mock-up).</div>
266 </li>
267 <li class="level2"><div class="li"> STEP exporter (PCB --&gt; MCAD integration).</div>
268 </li>
269 <li class="level2"><div class="li"> DXF exporter (PCB --&gt; MCAD integration).</div>
270 </li>
271 <li class="level2"><div class="li"> STL exporter (PCB --&gt; MCAD integration / 3D printing / mock-up).</div>
272 </li>
273 </ul>
274 </li>
275 <li class="level1 node"><div class="li"> Electromagnetics / Capacitance exporters:</div>
276 <ul>
277 <li class="level2"><div class="li"> Validate the workflow for GSvit.</div>
278 </li>
279 <li class="level2"><div class="li"> Validate the workflow for Nelma.</div>
280 </li>
281 </ul>
282 </li>
283 </ul>
285 </div>
287 <h3 id="otherunsortedcrazyideas">Other unsorted crazy ideas</h3>
288 <div class="level3">
289 <ul>
290 <li class="level1"><div class="li"> Gerber files as a background (for reverse engineering).</div>
291 </li>
292 <li class="level1"><div class="li"> Import a gerber project (for reverse engineering).</div>
293 </li>
294 <li class="level1"><div class="li"> Layer definition awareness (copper, non-copper, soldermask).</div>
295 </li>
296 <li class="level1"><div class="li"> Editable soldermask (gang solder mask clearance … for QFP, SO, PLCC, etc. package types).</div>
297 </li>
298 <li class="level1"><div class="li"> Grouping of elements, traces and vias.</div>
299 </li>
300 <li class="level1"><div class="li"> Show / define solder paste.</div>
301 </li>
302 <li class="level1"><div class="li"> Show / define IPC-356-D test points.</div>
303 </li>
304 <li class="level1"><div class="li"> Back annotation (output).</div>
305 </li>
306 <li class="level1"><div class="li"> Pin swapping.</div>
307 </li>
308 <li class="level1"><div class="li"> Pinout awareness (in, out, inout, pas, pwr like in gschem).</div>
309 </li>
310 <li class="level1"><div class="li"> Padstack definitions.</div>
311 </li>
312 <li class="level1"><div class="li"> Layer stackup definitions.</div>
313 </li>
314 <li class="level1"><div class="li"> Create multiple pcb executables during build time (bpcb for batch, gpcb for GTK, lpcb for lesstif).</div>
315 </li>
316 <li class="level1"><div class="li"> Assist the user with repetitive tasks.</div>
317 </li>
318 </ul>
320 </div>
322 <h1 id="developerexperiencedximprovements">Developer Experience (DX) Improvements</h1>
323 <div class="level1">
324 <ul>
325 <li class="level1"><div class="li"> Travis-CI Continuous Integration for pcb on Travis (https:<em>travis-ci.org).
326 * Under the hood structural improvements.
327 * Start a pcb-5.x.y development blueprint and branch &quot;devel&quot; ?
328 * Object Oriented approach in source tree / files.
329 * libpcb for helper functions or abstraction stuff ?
330 * Pin/pad/traces know to which net they belong (cross reference index).
331 * Developer documentation !
332 * Further Doxygenation of source files.
333 * Descriptions of &quot;state machines&quot; within actions and other code flow.
335 ==== Test Suite ====
336 * <a href="pcb-pcb_tests.html" class="wikilink1" title="pcb-pcb_tests.html">PCB level tests</a>
337 * <a href="pcb-unit_tests.html" class="wikilink1" title="pcb-unit_tests.html">Code level unit tests</a>
338 </div>
339 </li>
340 </ul>
342 </div>
343 </body>
344 </html>