missing NULL terminator in set_config_x
[geda-gaf.git] / docs / wiki / pcb-projects.html
blob50556cc37a2226b8c413794b6ac8514bac811c74
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 class="sectionedit1" id="pcb_projects">pcb Projects</h1>
18 <div class="level1">
20 </div>
21 <!-- EDIT1 SECTION "pcb Projects" [113-139] -->
22 <h2 class="sectionedit2" id="core_functionality">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 <li class="level1"><div class="li"> <a href="pcb-preferences_subsystem.html" class="wikilink1" title="pcb-preferences_subsystem.html">Preferences</a></div>
28 </li>
29 </ul>
31 </div>
32 <!-- EDIT2 SECTION "Core Functionality" [140-248] -->
33 <h2 class="sectionedit3" id="design_rule_checker">Design Rule Checker</h2>
34 <div class="level2">
36 <p>
37 <a href="pcb-drc.html" class="wikilink1" title="pcb-drc.html">drc</a>
38 </p>
40 </div>
41 <!-- EDIT3 SECTION "Design Rule Checker" [249-292] -->
42 <h3 class="sectionedit4" id="online_drc">Online DRC</h3>
43 <div class="level3">
45 </div>
46 <!-- EDIT4 SECTION "Online DRC" [293-312] -->
47 <h1 class="sectionedit5" id="pcb_layout_editor">pcb Layout Editor</h1>
48 <div class="level1">
50 </div>
51 <!-- EDIT5 SECTION "pcb Layout Editor" [313-344] -->
52 <h3 class="sectionedit6" id="plow_feature">Plow feature</h3>
53 <div class="level3">
55 <p>
56 A “plow” feature where the line tool shoves existing traces aside
57 preserving the design rules when possible.
58 </p>
60 <p>
61 <code>Difficulty = 4-5</code>
62 </p>
64 </div>
65 <!-- EDIT6 SECTION "Plow feature" [345-500] -->
66 <h3 class="sectionedit7" id="fast_snap_rounding_algorithm">Fast snap rounding Algorithm</h3>
67 <div class="level3">
69 <p>
70 Implement a fast snap rounding algorithm and resolve the case where
71 inserted point cause self-intersection.
72 </p>
74 <p>
75 PCB uses an integer coordinate system for all of its objects. The polygon
76 clipping code computes all points of intersection between two
77 non-self-intersecting contours (among many other things it does), but these
78 points of intersection must also have integer coordinates.
79 </p>
81 <p>
82 A snap-rounding algorithm replaces two segments that intersect at other than
83 their end points with four segments where each has an end point on an
84 integer coordinate near the original (non-integer) intersection. Because
85 this rounding operation on the point of intersection can change the slopes
86 of the four segments compare to that of the original two, it raises the
87 possibility that new intersections between the replacement segments and
88 other segments of the contours occur that did not exist with the original
89 segments. The snap rounding algorithm needs to produce a collection of
90 segments where all intersections occur at segment end points having integer
91 coordinates. The existing code in pcb does this already, but it uses a
92 theoretically slow algorithm, compared to others that are known, such as:
93 </p>
95 <p>
96 “Improved output-sensitive snap rounding,” John Hershberger, Proceedings of
97 the 22nd annual symposium on Computational geometry, 2006, pp 357-366.
98 <a href="http://doi.acm.org/10.1145/1137856.1137909" class="urlextern" title="http://doi.acm.org/10.1145/1137856.1137909" rel="nofollow">http://doi.acm.org/10.1145/1137856.1137909</a>
99 </p>
102 Algorithms described by de Berg, or Goodrich or Halperin, or Hobby would
103 probably also be better than what we currently have implemented.
104 </p>
107 In addition, there are rare-but-real degenerate situations where the snap
108 rounding results in one (or both) contours having a self-intersection that
109 did not exist before. This self-intersection is fatal to our polygon
110 clipping code. We do not know if the snap rounding algorithms in the
111 literature deal with this issue or not, but if they do not, we need to
112 develop a variant algorithm that does, whether done by judicious choice of
113 the rounding points that are created, or a post-processing step that
114 eliminates the self-intersection with minimal geometric distortion to the
115 original contours.
116 </p>
119 <code>Difficulty = 4-5</code>
120 </p>
122 </div>
123 <!-- EDIT7 SECTION "Fast snap rounding Algorithm" [501-2677] -->
124 <h3 class="sectionedit8" id="snapping_enhancements">Snapping enhancements</h3>
125 <div class="level3">
128 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.
129 </p>
132 Ideas for how the snapping system should work are being collected here: <a href="snapping_in_pcb.html" class="wikilink1" title="snapping_in_pcb.html">Snapping in pcb</a>. There is also a todo list with some work that needs to be done.
133 </p>
135 </div>
136 <!-- EDIT8 SECTION "Snapping enhancements" [2678-3181] -->
137 <h3 class="sectionedit9" id="auto-routed_drawing_tool">Auto-routed drawing tool</h3>
138 <div class="level3">
141 Basically with this tool, you would click on a starting point, then drag the
142 crosshair to some other (typically intermediate point), possibly on another
143 layer and an auto-routing tool would show a prospective path to that point
144 (meeting design rules and style requirements). If you didn&#039;t like the
145 offered path, you could hit a key to see a more expensive candidate, or a
146 different key to (back up) to a less expensive candidate. The prospective
147 route would dynamically change to reach the crosshair end-point as the
148 crosshair is moved. It would disappear if no path could be found. Clicking
149 would place the prospective path as copper and anchor a new starting point
150 for the tool (much like the line tool does now).
151 </p>
154 <code>Difficulty = 5</code>
155 </p>
157 </div>
158 <!-- EDIT9 SECTION "Auto-routed drawing tool" [3182-3954] -->
159 <h3 class="sectionedit10" id="ipc_footprint_calculator">IPC Footprint Calculator</h3>
160 <div class="level3">
163 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 <abbr title="Graphical User Interface">GUI</abbr> so that you can script it for generating entire large families of footprints or hook it up to a <abbr title="Graphical User Interface">GUI</abbr> 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.
164 </p>
167 <code>Difficulty = 2</code>
168 </p>
170 </div>
171 <!-- EDIT10 SECTION "IPC Footprint Calculator" [3955-4448] -->
172 <h3 class="sectionedit11" id="recently_loaded_file_list">Recently loaded file list</h3>
173 <div class="level3">
176 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.
177 </p>
180 <code>Difficulty = 1</code>
181 </p>
183 </div>
184 <!-- EDIT11 SECTION "Recently loaded file list" [4449-4709] -->
185 <h1 class="sectionedit12" id="user_experience_ux_improvements">User Experience (UX) Improvements</h1>
186 <div class="level1">
188 </div>
189 <!-- EDIT12 SECTION "User Experience (UX) Improvements" [4710-4759] -->
190 <h3 class="sectionedit13" id="update_the_user_manual">Update the User Manual</h3>
191 <div class="level3">
194 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.”
195 </p>
196 <ul>
197 <li class="level1"><div class="li"> Include a chapter on the Topological router in User Manual.</div>
198 </li>
199 <li class="level1"><div class="li"> Include DJ&#039;s Getting Started in the User Manual.</div>
200 </li>
201 <li class="level1"><div class="li"> Extend Getting Started for both autorouter and topological router.</div>
202 </li>
203 <li class="level1 node"><div class="li"> Add more step-by-step examples for existing exporters:</div>
204 <ul>
205 <li class="level2"><div class="li"> Usage of Nelma.</div>
206 </li>
207 <li class="level2"><div class="li"> Usage of GSvit.</div>
208 </li>
209 <li class="level2"><div class="li"> Usage of Blind and buried vias.</div>
210 </li>
211 <li class="level2"><div class="li"> Unify and combine the READMEs.</div>
212 </li>
213 </ul>
214 </li>
215 </ul>
217 </div>
218 <!-- EDIT13 SECTION "Update the User Manual" [4760-5350] -->
219 <h3 class="sectionedit14" id="i18n_l10n">i18n / l10n</h3>
220 <div class="level3">
221 <ul>
222 <li class="level1"><div class="li"> Get more translations/translators –&gt; better and more language translations.</div>
223 </li>
224 <li class="level1"><div class="li"> Update the Dutch translation ?</div>
225 </li>
226 <li class="level1"><div class="li"> Update the French translations ?</div>
227 </li>
228 <li class="level1"><div class="li"> Update the Cyrrilic translations ?</div>
229 </li>
230 <li class="level1"><div class="li"> Use Launchpad for common translations.</div>
231 </li>
232 <li class="level1"><div class="li"> Check on what should be translatable strings.</div>
233 </li>
234 <li class="level1"><div class="li"> Check on plural forms in exotic languages (Japanese, etc).</div>
235 </li>
236 <li class="level1"><div class="li"> Respect “Right-To-Left” reading users (Arabic, <abbr title="Graphical User Interface">GUI</abbr> layouts ?).</div>
237 </li>
238 </ul>
240 </div>
241 <!-- EDIT14 SECTION "i18n / l10n" [5351-5789] -->
242 <h3 class="sectionedit15" id="netlists">Netlists</h3>
243 <div class="level3">
244 <ul>
245 <li class="level1"><div class="li"> Layout vs netlist/schematic check or just trust the “import schematic” netlist (ERC).</div>
246 </li>
247 <li class="level1"><div class="li"> Rebuilding a netlist from scratch, based on connectivity (copper layers).</div>
248 </li>
249 </ul>
251 </div>
252 <!-- EDIT15 SECTION "Netlists" [5790-5978] -->
253 <h3 class="sectionedit16" id="routing">Routing</h3>
254 <div class="level3">
255 <ul>
256 <li class="level1"><div class="li"> Respect the “outline”, “route” and non-copper layers with the autorouter.</div>
257 </li>
258 <li class="level1"><div class="li"> Respect the “outline”, “route” and non-copper layers with the toporouter.</div>
259 </li>
260 <li class="level1"><div class="li"> Add via placement to the toporouter.</div>
261 </li>
262 <li class="level1"><div class="li"> Respect keepouts.</div>
263 </li>
264 <li class="level1"><div class="li"> Importing routing style and other data from the netlist (if available).</div>
265 </li>
266 </ul>
268 </div>
269 <!-- EDIT16 SECTION "Routing" [5979-6293] -->
270 <h3 class="sectionedit17" id="other_platforms_gui_s_and_dependencies">Other platforms, GUI&#039;s and dependencies</h3>
271 <div class="level3">
272 <ul>
273 <li class="level1"><div class="li"> Migrate to GNOME/GTK3 … when ?</div>
274 </li>
275 <li class="level1"><div class="li"> Migrate to GNOME/GTK4 … when ?</div>
276 </li>
277 <li class="level1"><div class="li"> HTML5 (+java) <abbr title="Graphical User Interface">GUI</abbr> (web based pcb layout designer).</div>
278 </li>
279 <li class="level1"><div class="li"> Android <abbr title="Graphical User Interface">GUI</abbr> for tablets and smart-phones.</div>
280 </li>
281 <li class="level1"><div class="li"> QT <abbr title="Graphical User Interface">GUI</abbr> ?</div>
282 </li>
283 <li class="level1"><div class="li"> wxWidgets for native Microsoft windows look-and-feel UX ?</div>
284 </li>
285 <li class="level1 node"><div class="li"> Single Document Interface mode GTK UI with a separate function tear-off (lessGTK ?)</div>
286 <ul>
287 <li class="level2"><div class="li"> Separate layout window for artwork (primary screen).</div>
288 </li>
289 <li class="level2"><div class="li"> Separate window for buttonbox and pull-down menu-items (secondary screen).</div>
290 </li>
291 <li class="level2"><div class="li"> More routing styles (in pull-down combo-box ?).</div>
292 </li>
293 </ul>
294 </li>
295 <li class="level1"><div class="li"> Multiple Document Interface mode for the GTK UI ?</div>
296 </li>
297 <li class="level1"><div class="li"> Multiple Document Interface mode for the lesstif UI ?</div>
298 </li>
299 <li class="level1"><div class="li"> Cygwin port for windows ?</div>
300 </li>
301 <li class="level1"><div class="li"> W32 port with minipack ?</div>
302 </li>
303 <li class="level1"><div class="li"> WIN32 port with a NSIS installer ?</div>
304 </li>
305 <li class="level1"><div class="li"> Flatpak (<a href="http://flatpak.org" class="urlextern" title="http://flatpak.org" rel="nofollow">http://flatpak.org</a>) pcb packages for multiple linux distributions ?</div>
306 </li>
307 </ul>
309 </div>
310 <!-- EDIT17 SECTION "Other platforms, GUI's and dependencies" [6294-7168] -->
311 <h3 class="sectionedit18" id="plug-ins">Plug-ins</h3>
312 <div class="level3">
313 <ul>
314 <li class="level1"><div class="li"> Breakout plug-in for BGA escape routes.</div>
315 </li>
316 <li class="level1"><div class="li"> MUCS manhattan router plug-in.</div>
317 </li>
318 <li class="level1"><div class="li"> Pcb shopper quotation plug-in.</div>
319 </li>
320 <li class="level1"><div class="li"> Double Stripline/Microstrip Impedance Calculator plug-in.</div>
321 </li>
322 <li class="level1"><div class="li"> Entity inspector/editor plug-in.</div>
323 </li>
324 <li class="level1"><div class="li"> Serpentine length matching plug-in.</div>
325 </li>
326 <li class="level1"><div class="li"> Differential pair routing plug-in.</div>
327 </li>
328 <li class="level1"><div class="li"> Panelize plug-in.</div>
329 </li>
330 <li class="level1"><div class="li"> Bus routing plug-in.</div>
331 </li>
332 <li class="level1"><div class="li"> Push and Shove routing plug-in.</div>
333 </li>
334 <li class="level1"><div class="li"> Parasitic capacitance/inductance extraction plug-in.</div>
335 </li>
336 <li class="level1"><div class="li"> Load plug-ins on demand.</div>
337 </li>
338 </ul>
340 </div>
341 <!-- EDIT18 SECTION "Plug-ins" [7169-7650] -->
342 <h3 class="sectionedit19" id="file_exchange">File exchange</h3>
343 <div class="level3">
344 <ul>
345 <li class="level1"><div class="li"> IDF importer/exporter (ECAD ←→ MCAD).</div>
346 </li>
347 <li class="level1"><div class="li"> XML importer/exporter.</div>
348 </li>
349 <li class="level1"><div class="li"> DXF importer/exporter (PCB ←→ MCAD).</div>
350 </li>
351 <li class="level1"><div class="li"> DSN importer/exporter (PCB ←→ external routing).</div>
352 </li>
353 <li class="level1"><div class="li"> Verilog-AMS exporter (PCB –&gt; simulation / analysis, see <a href="https://archive.fosdem.org/2016/schedule/event/eda_data_interchange/" class="urlextern" title="https://archive.fosdem.org/2016/schedule/event/eda_data_interchange/" rel="nofollow"> Albert Davis talk at FOSDEM-2016 </a>).</div>
354 </li>
355 <li class="level1"><div class="li"> GnuCAP exporter (PCB –&gt; simulation / analysis).</div>
356 </li>
357 </ul>
359 </div>
360 <!-- EDIT19 SECTION "File exchange" [7651-8071] -->
361 <h3 class="sectionedit20" id="exporters">Exporters</h3>
362 <div class="level3">
363 <ul>
364 <li class="level1 node"><div class="li"> Geometric model representation:</div>
365 <ul>
366 <li class="level2"><div class="li"> VRML exporter (PCB –&gt; eye-candy for visualisation / sales pitch).</div>
367 </li>
368 <li class="level2"><div class="li"> OpenSCAD exporter (PCB –&gt; MCAD integration / 3D printing / mock-up).</div>
369 </li>
370 <li class="level2"><div class="li"> STEP exporter (PCB –&gt; MCAD integration).</div>
371 </li>
372 <li class="level2"><div class="li"> DXF exporter (PCB –&gt; MCAD integration).</div>
373 </li>
374 <li class="level2"><div class="li"> STL exporter (PCB –&gt; MCAD integration / 3D printing / mock-up).</div>
375 </li>
376 </ul>
377 </li>
378 <li class="level1 node"><div class="li"> Electromagnetics / Capacitance exporters:</div>
379 <ul>
380 <li class="level2"><div class="li"> Validate the workflow for GSvit.</div>
381 </li>
382 <li class="level2"><div class="li"> Validate the workflow for Nelma.</div>
383 </li>
384 </ul>
385 </li>
386 </ul>
388 </div>
389 <!-- EDIT20 SECTION "Exporters" [8072-8568] -->
390 <h3 class="sectionedit21" id="other_unsorted_crazy_ideas">Other unsorted crazy ideas</h3>
391 <div class="level3">
392 <ul>
393 <li class="level1"><div class="li"> Gerber files as a background (for reverse engineering).</div>
394 </li>
395 <li class="level1"><div class="li"> Import a gerber project (for reverse engineering).</div>
396 </li>
397 <li class="level1"><div class="li"> Layer definition awareness (copper, non-copper, soldermask).</div>
398 </li>
399 <li class="level1"><div class="li"> Editable soldermask (gang solder mask clearance … for QFP, SO, PLCC, etc. package types).</div>
400 </li>
401 <li class="level1"><div class="li"> Grouping of elements, traces and vias.</div>
402 </li>
403 <li class="level1"><div class="li"> Show / define solder paste.</div>
404 </li>
405 <li class="level1"><div class="li"> Show / define IPC-356-D test points.</div>
406 </li>
407 <li class="level1"><div class="li"> Back annotation (output).</div>
408 </li>
409 <li class="level1"><div class="li"> Pin swapping.</div>
410 </li>
411 <li class="level1"><div class="li"> Pinout awareness (in, out, inout, pas, pwr like in gschem).</div>
412 </li>
413 <li class="level1"><div class="li"> Padstack definitions.</div>
414 </li>
415 <li class="level1"><div class="li"> Layer stackup definitions.</div>
416 </li>
417 <li class="level1"><div class="li"> Create multiple pcb executables during build time (bpcb for batch, gpcb for GTK, lpcb for lesstif).</div>
418 </li>
419 <li class="level1"><div class="li"> Assist the user with repetitive tasks.</div>
420 </li>
421 </ul>
423 </div>
424 <!-- EDIT21 SECTION "Other unsorted crazy ideas" [8569-9315] -->
425 <h1 class="sectionedit22" id="developer_experience_dx_improvements">Developer Experience (DX) Improvements</h1>
426 <div class="level1">
427 <ul>
428 <li class="level1"><div class="li"> Travis-CI Continuous Integration for pcb on Travis (<a href="https://travis-ci.org" class="urlextern" title="https://travis-ci.org" rel="nofollow">https://travis-ci.org</a>).</div>
429 </li>
430 <li class="level1"><div class="li"> Under the hood structural improvements.</div>
431 </li>
432 <li class="level1"><div class="li"> Start a pcb-5.x.y development blueprint and branch “devel” ?</div>
433 </li>
434 <li class="level1"><div class="li"> Object Oriented approach in source tree / files.</div>
435 </li>
436 <li class="level1"><div class="li"> libpcb for helper functions or abstraction stuff ?</div>
437 </li>
438 <li class="level1"><div class="li"> Pin/pad/traces know to which net they belong (cross reference index). </div>
439 </li>
440 <li class="level1 node"><div class="li"> Developer documentation !</div>
441 <ul>
442 <li class="level2"><div class="li"> Further Doxygenation of source files.</div>
443 </li>
444 <li class="level2"><div class="li"> Descriptions of “state machines” within actions and other code flow.</div>
445 </li>
446 </ul>
447 </li>
448 </ul>
450 </div>
451 <!-- EDIT22 SECTION "Developer Experience (DX) Improvements" [9316-9891] -->
452 <h3 class="sectionedit23" id="test_suite">Test Suite</h3>
453 <div class="level3">
454 <ul>
455 <li class="level1"><div class="li"> <a href="pcb-pcb_tests.html" class="wikilink1" title="pcb-pcb_tests.html">PCB level tests</a></div>
456 </li>
457 <li class="level1"><div class="li"> <a href="pcb-unit_tests.html" class="wikilink1" title="pcb-unit_tests.html">Code level unit tests</a></div>
458 </li>
459 </ul>
461 </div>
462 <!-- EDIT23 SECTION "Test Suite" [9892-] --></body>
463 </html>