kicad/Documentation/development/road-map.md

11 KiB

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

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.

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.

User Interface Modernization

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:

Status:

  • No progress.

Build Tools

This section covers build tools for both the KiCad source as well as the custom dependency builds required to build KiCad.

Common Library

This section covers the source code shared between all of the KiCad applications

Unified Rendering Framework

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

Status

  • No progress

KiCad: Application Launcher

This section applies to the source code for the KiCad application launcher.

Eeschema: Schematic Editor

This section applies to the source code for the Eeschema schematic editor.

Graphics Abstraction Layer Conversion

Goal:

Take advantage of advanced graphics rendering in Eeschema.

Task:

  • Port graphics rendering to GAL.

Dependencies:

  • None

Status:

  • No progress.

Port Editing Tools

Goal:

Use standard tool framework across all applications.

Task:

  • Rewrite editing tools using the new tool framework.

Dependencies:

Status:

  • No progress.

Allow Use of System Fonts

Goal:

Currently the schematic editor uses the stroke drawn fonts which aren't really necessary for accurated printing of schematics. Allow the use of system fonts for schematic text.

Task:

  • Determine which library for font handling makes the most sense, wxWidgets or freetype.
  • Add support for selecting text object fonts.

Dependencies:

Status:

  • No progress.

CvPcb: Footprint Association Tool

This section covers the source code of the footprint assignment tool CvPcb.

Pcbnew: Circuit Board Editor

This section covers the source code of the board editing application Pcbnew.

Model Export

Goal:

Provide improved solid modeling export to the file formats available in OpenCascade.

Task:

  • Add STEP 3D modeling capability.
  • Add IGES 3D modeling capability.
  • Add any other file formats supported by OpenCascade that make sense for KiCad.

Dependencies:

  • None

Status:

  • None

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.

Pin and Part Swapping

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:

Status:

  • No progress.

Clipboard Support

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.

Segment End Point 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.

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:

Progress:

  • Planning

Net Highlighting

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.

Hatched Zone Filling

Goal:

Currently Pcbnew only supports solid zone files. Add option to fill zones with hatching.

Task:

  • Determine zone fill method, required filling code, and file format requirements.
  • Add hatch option and hatch configuration to zone dialog.

Dependencies:

  • None.

Status:

  • No progress.

Board Stack Up Impedance Calculator

Goal:

Provide a calculator to compute trace impedances using a full board stackup. Maybe this should be included in the PCB calculator application.

Task:

  • Design a trace impedance calculator that includes full board stackup.

Dependencies:

  • None.

Status:

  • No progress.

Net Class Improvements

Goal:

Add support for route impedance, color selection, etc in net class object.

Task:

  • Determine parameters to add to net class object.
  • Implement file parser and formatter changes to support net class object changes.
  • Implement tools to work with new net class parameters.
  • Create UI elements to configure new net class parameters.
  • Update the render tab UI code to view traces by net class.

Dependencies:

  • None.

Status:

  • No progress.

Ratsnest Improvements

Goal:

Add support for per net color and visibility settings.

Task:

  • Implement UI code to configure ratsnest color and visibility.
  • Update ratsnest code to handle per net color and visibility.

Dependencies:

  • None.

Status:

  • No progress.

GerbView: Gerber File Viewer

This section covers the source code for the GerbView gerber file viewer.

Graphics Abstraction Layer

Goal:

Graphics rendering unification.

Task:

  • Port graphics rendering layer to GAL.

Dependencies:

  • None.

Status

  • No progress.

Documentation

This section defines the tasks for both the user and developer documentation.

Maintenance

Task:

  • Keep screen shots current with the source changes.

Dependencies:

  • None.

Status:

  • No progress.

Unit Testing

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.