Open question for Ideas for improving PCB editor canvas clarity

Every now and then (for several years now) I wonder how viewability of the PCB in the PCB Editor and how it could be improved. Over the years transparency has been added and that’s a good thing, but I find it’s use quite limited. For example, it’s hard to use opacity of less then 70% for any layer because then all the layers start to blend into each other and you loose too much contrast.

One of my idea’s is that opacity should depend on layer drawing order. It does not make much sense if the lowest layer has any transparency, because all it reveals is a uniform background, and thus it just lowers the contrast of that bottom most layer.

Another GUI feature that may be a big improvement is to have the ability to “pin” layers to a certain drawing order. If you combine these two ideas, then you could for example pin the silkscreen layer to the top, so it’s always drawn over all other layers, but give it a low opacity, (maybe as low as 20%?) so it does not obstruct view of any other items. This makes the silkscreen layer much more usable as a “map” of where you are on the PCB wile zoomed in. This could especially help while working on the inner layers of a multi-layer (6+ ?) PCB.

KiCad V6 also has presets for layers, and you can create new presets and switch betwheen them, but I find this functionality still quite limited. These presets only control which layers are visible, and they do not control opacity of the layers or the drawing order of the layers. Another thing I’m missing in the presets are shortcut keys to switch between them. I use the [PgUp] and PgDn] keys quite a lot while routing a PCB, but these do not change the presets.

I think there is a lot of room for improvements here, but I don’t know the best way to improve this or how to turn this in a concise proposal. A user interface for this must also be easy and intuitive to use, and ironically, the functionality for a simple but good GUI is quite difficult to develop. It’s also easy to get lost in functionality when there are too many settings that can be changed.

Below I made an initial draft for a proposal for implementing this, and maybe I will turn this into a real proposal on gitlab at some time, but for now I’m curious what you all think about this and how this idea can be improved upon.


  1. Create a way to attach a preset to a layer.
    • This automatically adds shortcut keys such as [PgUp] and PgDn] to the preset changes.
    • This switches automatically between presets during a layer change, So single click preset changes!
    • Combined with 2). and 3). this gives a lot of flexibility in how KiCad renders layer changes.
    • The ability to copy such a preset to another layer will make managing the presets easier. (For example managing presets for Front / Back layer combinations).
  2. Add the ability to add layer drawing order to a preset. For example Pin a layer such as silkscreen on top.
  3. Add the ability to change layer opacity in the presets.
    • Combined with 2). you can draw the bottom layers with a high opacity, and the top layers with a low opacity.
  4. Add a third (or more?) option (s) to the Layer On / Off “eye” icon.
    • On / Off stays the same.
    • An “auto” lets it being controlled by a preset.
    • This icon can have a state to show this layer as it’s own preset.
    • Maybe add an option to “pin” a layer to the top here?
1 Like

You can switch presets with ctrl+tab :slightly_smiling_face: It’s not configurable, though.

I really wish for that. Upvote.

I’ll give this thread a bump.

Reason is that it’s just a rough proposal at this time and mostly an idea which has been bumping around only in my own head. And although I am convinced I have great Idea’s. I am also aware that others do not always find my idea’s as world enlightening as I do myself.

So I’m hoping for some kind of discussion here on ways to improve user interaction with all the KiCad layers with the idea of turning it into some proposal that can become an issue on gitlab. Without more input though, I’ll just let it slip.

How about <shift/ctrl/alt>+mousewheel for scrolling through the layers, so you do not have to move the mouse to the Appearance Manager for selecting the current layer?

I know, I know. That’s my experience, too. You have to be tolerant: they just didn’t come that far…
:rofl::rofl::rofl::innocent:

Adding some extra shortcut keys for quicker access to specific functions can be useful, but I am aiming for a more comprehensive GUI change that improves the visibility of the many layers and speeds up working with them.

I think that by giving users power over layer drawing order and transparency changes by defined presets can have a profound improvement on working with the PCB Editor, especially with multi layer PCB’s. (Which I do not make myself, so it’s difficult to make any prediction on that).

Ok , including opacity in the presets is a good thing and can be a feature request right now without having an all-encompassing concept ready IMHO.

Preset selection needs improvement as well. It is not convenient to go to the Appearance Manager, open the preset dropdown and do the selection. Tollbar buttons for quick selection? Double edged sword though as it reduces net canvas space.

It’s not necessarily opacity alone. Colors? Simply taking a snapshot of all properties.

Indeed. Only changing opacity does not change much. It’s the combination of Opacity, layer drawing order, and maybe other factors such as color or brightness that have to be combined to make these presets a powerful feature.

That’s an important feature for sure. As is the idea of binding a preset to a layer so you can have different visuals when switching layers while routing. Think inner vs outer layers…

I’m off to bed. My senile insomnia is not that bad, sometimes I have to sleep :sleeping:

Before I forget: how about including zone fill/unfill, track/via/pad outline atl ?

Open source projects works best with small incremental changes, as developers tend to have little slots of time and interest to work on sections of code.

This could also be a logical extension and I had not thought of it. It’s hard to predict how useful it is, but it’s probably fairly simple to add once the basics of my idea is implemented. The best way to find out how useful it is, is probably just to implement it, try it out, and interate over feedback.

At the moment I’m aiming at a minimal (to average) set of features to make this function useful, but collecting idea’s for later expansion are of course also welcome.