1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
|
# Road Map #
This document is the KiCad Developer's road map document. It is a living
document that should be maintained as the project progresses. The goal of
this document is to provide an overview for developers of where the project
is headed to prevent resource conflicts and endless rehashing of previously
discussed topics. It is broken into sections for each major component of
the KiCad source code and documentation. It defines tasks that developers
an use to contribute to the project and provides updated status information.
Tasks should define clear objective and avoid vague generalizations so that
a new developer can complete the task. It is not a place for developers to
add their own personal wish list It should only be updated with approval
of the project manager after discussion with the lead developers.
Each entry in the road map is made up of four sections. The goal should
be a brief description of the what the road map entry will accomplish. The
task section should be a list of deliverable items that are specific enough
hat they can be documented as completed. The dependencies sections is a list
of requirements that must be completed before work can begin on any of the
tasks. The status section should include a list of completed tasks or marked
as complete as when the goal is met.
[TOC]
# Project # {#project}
This section defines the tasks for the project related goals that are not
related to coding or documentation. It is a catch all for issues such as
developer and user relations, dissemination of information on websites,
policies, etc.
## Stable Release ## {#stable_release}
**Goal:**
Provide a lightweight stable release mechanism that is robust enough to meet
the requirements of Linux packagers and corporate users but avoid the burden
of back porting fixes to a maintenance branch to avoid the additional work for
developers.
**Task:**
- Devise a process to have some type of reasonably stable release protocol
to provide "stable" releases for Linux distribution packagers and corporate
users.
- Document "stable" release procedure.
**Dependencies:**
- None
**Status:**
- Initial planning stages.
## Website Improvements ## {#website_improvements}
**Goal:**
Make the website at www.kicad-pcb.org as the definitive resource for both
users and developers which will provide a single point of reference instead
of the many separate websites currently in used.
**Task:**
- Define the content and design of the website.
- Implement the new design.
**Dependencies:**
- None
**Status:**
- No progress.
# General # {#general}
This section defines the tasks that affect all or most of KiCad or do not
fit under as specific part of the code such as the board editor or the
schematic editor.
## Convert to a Single Process Application. ## {#kiway}
**Goal:**
Merge common schematic and board code into to separate dynamic objects to allow
Eeschema and Pcbnew to run under a single process.
**Task:**
- Convert the majority core code in Eeschema and Pcbnew into dynamic libraries.
- Provide a robust method for communicating between code running under a single
process.
- Revise the schematic editor and board editor main windows run under a single
process instead of multiple stand alone applications.
- Design a method for passing information between the dynamic libraries running
under the same process.
- Remove inter-process communications between Eeschema and Pcbnew.
**Dependencies:**
- None
**Status:**
- Stage 1 code released.
- Stage 2 in process.
## User Interface Modernization ## {#wxaui}
**Goal:**
Give KiCad a more modern user interface with dockable tool bars and windows.
Create perspectives to allow users to arrange dockable windows as they prefer.
**Task:**
- Take advantage of the advanced UI features in wxAui such as detaching and
hiding.
- Study ergonomics of various commercial/proprietary PCB applications (when
in doubt about any particular UI solution, check how it has been done in a
certain proprietary app that is very popular among OSHW folks and do exactly
opposite).
- Clean up menu structure. Menus must allow access to all features of the
program in a clear and logical way. Currently some functions of Pcbnew are
accessible only through tool bars
- Redesign dialogs, make sure they are following same style rules.
- Check quality of translations. Either fix or remove bad quality translations.
- Develop a global shortcut manager that allows the user assign arbitrary
shortcuts for any tool or action.
**Dependencies:**
- [wxWidgets 3](#wxwidgets3)
**Status:**
- No progress.
# Build Tools # {#build_tools}
This section covers build tools for both the KiCad source as well as the
custom dependency builds required to build KiCad.
## Create Separate Build Dependency Project ## {#depends_prj}
**Goal:**
Move the library dependencies and their patches into a separate project to
developers to build and install them as required instead of requiring them
at build time. Give developers the flexibility to build and/or install
library dependencies as they see fit. Remove them from the KiCad source code
to reduce the build footprint.
**Task:**
- Create a separate project to build all external dependency libraries that are
currently build from source (Boost, OpenSSL, etc).
- Use CMake to create a package configuration file for each library so the
KiCad find package can pull in header paths, library dependencies, compile
flags, and link flags to build KiCad.
- Use CMake find package to pull external dependencies.
- Remove all build from source dependencies for KiCad source code.
**Dependencies:**
- None
**Status:**
- Initial concept discussions.
## Platform Binary Installers ## {#installers}
**Goal:**
Provide quality installers for all supported platforms.
**Task:**
- Bring OSX installer up to the level of the Window's and Linux installers.
- Possible use of CPack to build platform specific installers as long as they
are of the same or better quality than the current independent installers.
**Dependencies**
- None
**Status**
- No progress
# Common Library # {#common_lib}
This section covers the source code shared between all of the KiCad
applications
## Unified Rendering Framework ## {#unified_rendering}
**Goal:**
Provide a single framework for developing new tools. Port existing tools
to the new framework and remove the legacy framework tools.
**Task:**
- Port wxDC to GAL or get Cairo rendering to nearly the performance of the
current wxDC rendering so that we have a single framework to develop new
tools and we can continue to support systems that don't have a complete
OpenGL stack.
**Dependencies**
- [Tool framework](http://www.ohwr.org/projects/cern-kicad/wiki/WorkPackages)
**Status**
- No progress
## Unified Geometry Library ## {#geometry_lib}
**Goal:**
Select a single geometry library so that all applications share a common
base for 2D objects. Remove any redundant geometry libraries and code to
clean up code base.
**Task:**
- Select the best geometry library (Boost, etc.) for the task.
- Port all legacy geometry code to the selected library.
- Remove any unused geometry library code.
**Dependencies:**
- None
**Status:**
- In progress as part of push and shove router.
## Conversion to wxWidgets 3 ## {#wxwidgets3}
**Goal:**
Stop supporting the version 2 branch of wxWidgets so that newer features
provided by version 3 can be utilized.
**Task:**
- Make wxWidgets 3 a build requirement.
- Remove all wxWidgets 2 specific code.
**Dependencies:**
- wxWidgets 3 is widely available on Linux distributions.
**Status:**
- Build now requires 3.0.0 or greater.
## Linux Printing Improvements ## {#linux_print}
**Goal:**
Bring printing on Linux up to par with printing on Windows.
**Task:**
- Resolve Linux printing issues.
**Dependencies**
- [wxWidgets 3](#wxwidgets3)
**Status**
- No progress.
## Object Properties and Introspection ## {#object_props}
**Goal:**
Provide an object introspection system using properties.
**Task:**
- Select existing or develop property system.
- Add definable properties to base objects.
- Create introspection framework for manipulating object properties.
- Serialization of properties to and from files and/or other I/O structures.
- Create tool to edit property name/type/value table.
**Dependencies:**
- None
**Status:**
- No progress.
## Dynamic Library Plugin ## {#plugin_base}
**Goal:**
Create a base library plugin for handling external file I/O. This will allow
plugins to be provided that are external to the project such as providing solid
model file support (STEP, IGES, etc.) using OpenCascade without making it a
project dependency.
**Task:**
- Create a plugin to handle dynamically registered plugins for loading and
saving file formats.
- This object should be flexible enough to be extended for handling all file
plugin types including schematic, board, footprint library, component
library, etc.
- See [blueprint](https://blueprints.launchpad.net/kicad/+spec/pluggable-file-io)
on Launchpad for more information.
**Dependencies:**
- None
**Status:**
- No progress.
# KiCad: Application Launcher # {#kicad}
This section applies to the source code for the KiCad application launcher.
# Eeschema: Schematic Editor # {#eeschema}
This section applies to the source code for the Eeschema schematic editor.
## Coherent SCHEMATIC Object ## {#sch_object}
**Goal:**
Clean up the code related to the schematic object(s) into a coherent object for
managing and manipulating the schematic.
**Task:**
- Move most if not all of the code from SCH_SCREEN to the new SCHEMATIC object.
- Add any missing functionality to the SCHEMATIC object.
**Dependencies:**
- None
**Status:**
- No progress.
## Hierarchical Sheet Design ## {#hierarchy_fix}
**Goal:**
Create a more robust sheet instance design rather than recreating them on the
fly every time sheet information is required.
**Task:**
- Choose a data structure to contain the sheet hierarchy.
- Create helper class to manipulate the hierarchy data structure.
**Dependencies:**
- None
**Status:**
- No progress.
## Schematic and Component Library Plugin ## {#sch_plugin}
**Goal:**
Create a plugin manager for loading and saving schematics and component
libraries similar to the board plugin manager.
**Task:**
- Design plugin manager for schematics and component libraries.
- Port the current schematic and component library file formats to use the
plugin.
**Dependencies:**
- [Dynamic library plugin](#plugin_base)
**Status:**
- No progress.
## Graphics Abstraction Layer Conversion ## {#sch_gal}
**Goal:**
Take advantage of advanced graphics rendering in Eeschema.
**Task:**
- Port graphics rendering to GAL.
**Dependencies:**
- None
**Status:**
- No progress.
## Port Editing Tools ## {#sch_tool_framework}
**Goal:**
Use standard tool framework across all applications.
**Task:**
- Rewrite editing tools using the new tool framework.
**Dependencies:**
- [GAL port](#sch_gal).
**Status:**
- No progress.
## S-Expression File Format ## {#sch_sexpr}
**Goal:**
Make schematic file format more readable, add new features, and take advantage
of the s-expression capability used in Pcbnew.
**Task:**
- Finalize feature set and file format.
- Discuss the possibility of dropping the unit-less proposal temporarily to get
the s-expression file format and SWEET library format implemented without
completely rewriting Eeschema.
- Add new s-expression file format to plugin.
**Dependencies:**
- [Dynamic library plugin](#plugin_base).
**Status:**
- File format document nearly complete.
## Implement Sweet Component Libraries ## {#sch_sweet}
**Goal:**
Make component library design more robust and feature rich. Use s-expressions
to make component library files more readable.
**Task:**
- Use sweet component file format for component libraries.
**Dependencies:**
- [S-expression file format](#sch_sexpr).
**Status:**
- Initial SWEET library written.
## Component Library Editor Improvements ## {#lib_editor_usability}
**Goal:**
Make editing components with multiple units and/or alternate graphical
representations easier.
**Task:**
- Determine usability improvements in the library editor for components with
multiple units and/or alternate graphical representations.
- Implement said useability improvements.
**Dependencies:**
- None.
**Status:**
- No progress.
## Component and Netlist Attributes ## {#netlist_attributes}
**Goal:**
Provide a method of passing information to other tools via the net list.
**Task:**
- Add virtual components and attributes to netlist to define properties that
can be used by other tools besides the board editor.
**Dependencies:**
- [S-expression schematic file format](#sch_sexpr).
**Status:**
- No progress.
## Net Highlighting ## {#sch_net_highlight}
**Goal:**
Highlight wires, buses, and junctions when corresponding net in Pcbnew is selected.
**Task:**
- Add communications link to handle net selection from Pcbnew.
- Implement highlight algorithm for net objects.
- Highlight objects connected to net selected in Pcbnew.
**Dependencies:**
- [GAL port, maybe](#sch_gal).
**Status:**
- No progress.
# CvPcb: Footprint Association Tool # {#cvpcb}
This section covers the source code of the footprint assignment tool CvPcb.
## Footprint Assignment Tool ##
**Goal:**
Merge the footprint assignment functionality of CvPcb into Eeschema so
footprints can be assigned inside the schematic editor eliminating the need
to launch an separate program.
**Task:**
- Merge footprint assignment capability into Pcbnew shared library.
- Remove CvPcb as a stand alone tool.
- Add functionality to both the schematic and board editors so users can assign
footprints as they prefer.
**Dependencies:**
- [Convert to a single process application](#kiway).
**Status:**
- Initial library conversion committed to product branch.
# Pcbnew: Circuit Board Editor # {#pcbnew}
This section covers the source code of the board editing application Pcbnew.
## Tool Framework ## {#pcb_tool_framework}
**Goal:**
Unify all board editing tools under a single framework.
**Task:**
- Complete porting of all board editing tools to new tool framework so they
are available in the OpenGL and Cairo canvases.
- Remove all duplicate legacy editing tools.
**Dependencies:**
- None
**Status:**
- Initial porting work in progress.
## Linked Objects ## {#pcb_linked_objects}
**Goal:**
Provide a way to allow external objects such as footprints to be externally
linked in the board file so that changes in the footprint are automatically
updated. This will all a one to many object relationship which can pave the
way for real board modules.
**Task:**
- Add externally and internally linked objects to the file format to allow for
footprints and/or other board objects to be shared (one to many relationship)
instead of only supporting embedded objects (one to one relationship) that
can only be edited in place.
**Dependencies:**
- None.
**Status:**
- No progress.
## Modeling ## {#modeling}
**Goal:**
Provide improved solid modeling support for KiCad including the file formats
available in OpenCascade.
**Task:**
- Design plugin architecture to handle loading and saving 3D models.
- Back port existing 3D formats (IDF and S3D) to plugin
- Add STEP 3D modeling capability.
- Add IGES 3D modeling capability.
**Dependencies:**
- [Dynamic library plugin](#plugin_base).
**Status:**
- No progress.
## Push and Shove Router Improvements ## {#ps_router_improvements}
**Goal:**
Add features such as matched length and microwave tools to the P&S router.
**Task:**
- Determine which features are feasible.
- Look at the recently opened FreeRouter code at
http://www.freerouting.net/fen/download/file.php?id=146 for inspiration.
**Dependencies:**
- None
**Status:**
- Match trace length work in progress.
## Layer Improvements ## {#pcb_layers}
**Goal:**
Increase the number of usable technical and user defined layers in Pcbnew.
**Task:**
- Extend the number of copper and mechanical layers.
- Develop a type safe flag set template or adapt something already available.
- Refactor Pcbnew code to use new flag and remove the 32 layer limitation.
- Extend the board file format to handle the additional layers.
**Dependencies:**
- None
**Status:**
- Work complete on 32 copper and 32 technical layers is complete.
## Pin and Part Swapping ## {#pcb_drc}
**Goal:**
Allow Pcbnew to perform pin and/or part swapping during layout so the user
does not have to do it in Eeschema and re-import the net list.
**Task:**
- Provide forward and back annotation between the schematic and board editors.
- Define netlist file format changes required to handle pin/part swapping.
- Update netlist file formatter and parser to handle file format changes.
- Develop a netlist comparison engine that will produce a netlist diff that
can be passed between the schematic and board editors.
- Create pin/part swap dialog to manipulate swappable pins and parts.
- Add support to handle net label back annotation changes.
**Dependencies:**
- [S-expression schematic file format](#sch_sexpr).
- [Convert to a single process application](#kiway).
**Status:**
- No progress.
## Intelligent Selection Tool ## {#pcb_selection_tool}
**Goal:**
Make the selection tool easier for the user to determine which object(s) are
being selected.
**Task:**
- Determine and define the actual desired behavior.
- Improve ambiguous selections when multiple items are under the cursor or in
the selection bounding box.
**Dependencies:**
- Tool framework.
- Unified geometry library.
**Status:**
- Initial design committed to product branch.
## Clipboard Support ## {#fp_edit_clipboard}
**Goal:**
Provide clipboard cut and paste for footprints..
**Task:**
- Clipboard cut and paste to and from clipboard of footprints in footprint
editor.
**Dependencies:**
- None
**Status:**
- No progress.
## Design Rule Check (DRC) Improvements. ## {#drc_improvements}
**Goal:**
Create additional DRC tests for improved error checking.
**Task:**
- Replace geometry code with [unified geometry library](#geometry_lib).
- Remove floating point code from clearance calculations to prevent rounding
errors.
- Add checks for component, silk screen, and mask clearances.
- Add checks for keep out zones.
- Remove DRC related limitations such as no arc or text on copper layers.
- Add option for saving and loading DRC options.
**Dependencies:**
- [Unified geometry library.](#geometry_lib)
**Progress:**
- Planning
## Segment End Point Snapping. ## {#segment_snapping}
**Goal:**
It is not uncommon for board edge segment end points to inadvertently not
be closed causing issues for the 3D viewer and exporting to different file
formats due the board outline not being a fully enclosed polygon. This
feature would add segment end snapping support to allow the board outline
to be fully enclosed. This feature would only need to be supported by the
GAL rendering.
**Tasks**
- Mark board edge segment ends with a drag indicator to make it visible to the
user that the segment end does not have an endpoint with any other board edge
segment.
- Allow the user to smap the unconnected segment end to the nearest segment end
point.
- Automatically connect unconnected segments with and additional segment when
opening the 3D viewer or exporting the board to another format. Warn the
user that an addition segment has be added and should be verified.
**Dependencies:**
- None
**Progress:**
- Initial discussion.
## Keepout Zones. ## {#keepout_zones}
**Goal:**
Add support for keepout zones on boards and footprints.
**Task:**
- Add keepout support to zone classes.
- Add keepout zone support to board editor.
- Add keepout zone support to library editor.
**Dependencies:**
- [DRC Improvements.](#drc_improvements)
**Progress:**
- Planning
## Gerber File Attributes ## {#gerber_attributes}
**Goal:**
Add file attributes to gerber files for defining layer stacks. See
[this](http://www.ucamco.com/files/downloads/file/5/Extending_the_Gerber_Format_with_Attributes.pdf)
document and [this](http://www.ucamco.com/files/downloads/file/22/Kick_Starting_a_Revolution_IPC-2581_Meets_Gerber.pdf)
document for more information.
**Task:**
- Implement gerber file attributes as an optional setting when plotting gerber
files.
**Dependencies:**
- None
**Progress:**
- Done both in Pcbnew and Gerbview.
## Net Highlighting ## {#pcb_net_highlight}
**Goal:**
Highlight rats nest links and/or traces when corresponding net in Eeschema is selected.
**Task:**
- Add communications link to handle net selection from Eeschema.
- Implement highlight algorithm for objects connected to the selected net.
- Highlight objects connected to net selected in Eeschema
**Dependencies:**
- None.
**Status:**
- No progress.
# GerbView: Gerber File Viewer # {#gerbview}
This section covers the source code for the GerbView gerber file viewer.
## Graphics Abstraction Layer ## {#gerbview_gal}
**Goal:**
Graphics rendering unification.
**Task:**
- Port graphics rendering layer to GAL.
**Dependencies:**
- None.
**Status**
- No progress.
# Documentation # {#documentation}
This section defines the tasks for both the user and developer documentation.
## Conversion to Markup/down Format ## {#doc_format}
**Goal:**
Make documentation more VCS friendly and separate document content and
formatting for more uniform formatting across all user documentation.
**Task:**
- Convert the documentation to a mark up/down language to reduce the VCS
footprint, to be able to actually use the VCS to see what changed, and
improve the formatting consistency.
**Dependencies:**
- None
**Status:**
- Started with this document.
## Grammar Check ## {#doc_grammar}
**Goal:**
Improve user documentation readability and make life easier to for translators.
**Task:**
- Review and revise all of the English documentation so that it is update with
the current functionality of the code.
- Translate the update documentation into other languages.
**Dependencies:**
- None
**Status:**
- No progress.
## Maintenance ## {#doc_maintenance}
**Task:**
- Keep screen shots current with the source changes.
**Dependencies:**
- None.
**Status:**
- No progress.
## Convert Developer Documentation to Markup/down Format ## {#dev_doc_format}
**Goal:**
Improve developers documentation to make life easier for new developers to get
involved with the project.
**Task:**
- Convert platform build instructions from plain text to new format to be
merged with the developer documentation.
- Convert how to contribute to KiCad instructions from plain text to the new
format to merged with the developer documentation.
**Dependencies:**
- None.
**Status:**
- No progress.
# Unit Testing # {#unittest}
**Goal:**
Improve the quality of KiCad and ensure changes do no break existing
capabilities.
**Task:**
- Explore the possibility of including a C++ unit test framework in addition
to the existing Python framework.
- Create robust enough test coverage to determine if code changes break any
core functionality.
**Dependencies:**
- Completion of the initial release of this document.
**Status:**
- In progress.
# Circuit Simulation # {#simulation}
**Goal:**
Provide quality circuit simulation capabilities similar to commercial products.
**Task:**
- Evaluate and select simulation library (spice, gnucap, qucs, etc).
- Evaluate and select plotting library with wxWidgets support.
- Confirm current spice netlist export is up to the task and add missing
support for simulations.
- Use plotting library to handle simulator output in a consistent manor similar
to LTSpice.
- Develop a tool that allows fine tuning of components on the fly.
- Use plugin for the simulation code to allow support of different simulation
libraries.
- Create a library of simulation components such as voltage source, current
source, current probe, etc.
**Dependencies:**
- [Dynamic library plugin](#plugin_base).
**Status:**
- No progress.
|