LayerViewSet (main thread) - a python script for manipulating visible layers


The 4.0.x series is not released from master, it is released from the “4.0” branch. The 4.0 branch only has essential bug fixes on top of previous stable releases in the 4.0.x series. I guess when you have been around a bit longer you will get familiar with all this.

The nightly builds from master are effectively 5.0.0 beta versions.


Wow. This is totally opaque to me now. I have tested with the nightly. I hope to learn more about the process. Thanks for the insight!


4.0.7 will be 4.0.6 with bugs fixed and few or zero new features. Especially nothing will change that affects backwards compatibility with any of the 4.0.x releases.
As 4.0.0 is almost two year old, Nightly builds have evolved away a lot.
I call them “official” Nightlies as they are described on the KiCad website and bugs are managed on Launchpad


They have build dates / sourcecode reference numbers. If you hit ‘copy info’ in the about page you’ll get this:

Application: kicad
Version: (2017-05-12 revision b823d0b78)-makepkg, release build
Libraries: wxWidgets 3.0.2
libcurl/7.52.1 OpenSSL/1.0.2k zlib/1.2.11 libssh2/1.8.0 nghttp2/1.19.0 librtmp/2.3
Platform: Windows 7 (build 7601, Service Pack 1), 64-bit edition, 64 bit, Little endian, wxMSW

  • Build Info -
    wxWidgets: 3.0.2 (wchar_t,wx containers,compatible with 2.8)
    Boost: 1.60.0
    Curl: 7.52.1


Take note & be careful what of your data you expose to the nightlies, as backwards compatibility WILL GET BROKEN :wink:


I’m experimenting with adjusting the visual components in Layer Manager to integrate the push/pop functionality of Layer Visibility Sets. It’s not perfect yet, but getting close. I am trying to get it so that the LayerManager can dock into its normal place. Still having problems with width adjustment of the windows. And a little resizing issues, too. I went with clickable labels (with explanatory tooltips) so the space overhead is lower. Left to right is push, pop, and dock.

(Click the image to see the full thing).


Would it be possible to add some installation and usage information to the Read Me file beyond “Layer View A gui for saving, loading view sets as well as interacting with a stack of view sets for changing which layers are viewed within KiCad.” Documentation seems to be a dying art :frowning:


Only tested with the Nightly version of KiCad.

LayerViewSet is a ActionPlugin and is installed similar to other Action Plugins.
Place the file in 
C:\Program Files\KiCad\share\kicad\scripting\plugins
Or the equivalent in MacOS or Linux
(there may be a user-level directory for such files, but I am not aware of it at the moment.)

Within KiCad pcbnew, select the Tools > External Plugins > Refresh Plugins
LayerViewSet dialog box is shown when the LayerViewSet menu item is selected.


Thank you :slight_smile:

Here is some additional text to satisfy the minimum posting requirement.


Here’s an update on progress. This is not pushed to GitHub yet, but I’ll do so in the next few days.

I’ve figured out how to integrate with KiCad frame, and I think it looks great! There are still a few tweaks to make, and I’m not super happy with the buttons, but they are functional.

Click on the graphic to see the LayerViewSet control panel on the bottom:

A note on integration: it doesn’t integrate with the Layer Manager, but only with the KiCad frame. This means it doesn’t float around with the Layer Manager when you decouple the Layer Manager from the KiCad frame. Ideally, LayerViewSet would move around and float with the Layer Manager itself, but I haven’t figured that out yet.

And I’m still working on tweaking the title bar. Not sure of the right combination to make it work similarly to “Visibles”.

The “Click on any label.” is where message text will go to indicate progress (if any messages are needed, otherwise I’ll remove it)

Python code to integrate with Layer Manager?

Here’s a big release. This includes a lot of improvements. I’ve worked around the issue with checkboxes (now I am setting the checkboxes appropriately) but still haven’t gotten around the issue of layers not updating in the layout view without switching canvases (and back).

This fully integrates into KiCad: you can dock the tool anywhere. I’ve shown my favorite place. I’ve shortened the label names to one line, and provided the full list of layers and renders in the tooltip to the View Set button.

If a button icon/word isn’t clear, just hover over it to get a full description of what it does. I’ve also updated the that should cover most uses.

Let me know what you think!!


Hi, Greg :slight_smile: It’s a really nice feature, but in my opinion the interface is a bit clumsy. Unfortunately, can’t try this plugin in business, so my opinion is based only on your pictures. From the first glance it’s hard to say what the buttons do (let’s forget that you explained it earlier). I can suggest my vision: if you are implementing a stack of view perspectives, you need two buttons - push and restore. A list of perspectives may be maintained by wxListBox. It would be nice if the user could change the name of the perspective (e.g., I can prepare “Front view”, “Bottom view”, “Mechanical” etc.). I hope my feedback can be useful)


Agreed on all points. I want the ability to “save” sets to the side and rename them. As to the ease of use of the buttons. I agree that it’s difficult to determine what they do. Perhaps a downward arrow on each of the thee push buttons and an up arrow on the pop button (I tried to do that with ASCII ^ (pop) and v (push – and the dashes in “-v-” indicates coming from both Layers and Renders and pushing onto the stack)?

Also the tool tips (which you don’t get from the picture, but you do get when you hover over each button) are:

“Pop stack and assign visible layers and/or renders”
“Push visible Layers onto stack”
“Push visible Layers and Renders onto stack”
“Push visible Renders onto stack”

Hovering over the button shows every visible layer in that set.


Another release around the corner, possibly by this weekend.

Integrating saved / named view sets. You’ll be able save any viewset on the stack and name it. It will appear as a selectable viewset on the right, and it will persist between kicad runs in ~/kicad/viewsets

This seems to be reaching and end in development. There are no other features that I plan to add after this. Any ideas or thoughts on what would make this more useful?


Here’s where development is at the moment.

I put the stack on the right, and the saved view sets on the left. The stack automatically gets the name [layers]/[renders], without extra labels. This way the label in the stack is small, and any extra room can go to the named set on the left.

Here is a little guide on the stack label format:
3/5 - 3 layers are visible and 5 renders are visible
2/ - 2 layers are visible and renders will be unchanged
/4 - layers will be unchanged and 4 renders are visible
0/3 - 0 layers are visible and 3 renders are visible

Note the subtle distinction between “/4” and “0/3”.

The “tooltip” for the stack buttons list all the visible layers in the set:

Kicad pet peeves

Well, I couldn’t wait. I’ve updated the files on github with the latest update. Includes naming and saving ViewSets. An updated explains in detail how to use the control.

Please let me know how it works and if you find any bugs. It’s been lightly tested in Windows KiCad nightly.


LayerViewSet github master branch has been updated.

In combination with a fix to KiCad, this LayerViewSet update removes the need to switch canvas and back to update the layout view after pop or load.

This fix works with KiCad nightly a557838c615c9b268830138348c6a8d6a4cc9ba9 or later, referenced by this bug report.

It should still function with older nightlies, but will still require switching views.


LayerViewSet has been updated. There was a bug that prevented loading different viewsets from different buttons. It should work much smoother now.

Because LayerViewSet can load Layers and Renders separately or together, you can do cool things like set buttons for quickly changing the Renders. This, for example, has buttons named “Show All Renders” and “Hide All Renders”. You can set any combination of layer visibility, render visibility, or both, that you want; name them; and they will persist between KiCad sessions:


Really gotta find some time to play with this. :thumbsup:


I’m always in development, so I don’t notice some things.

If anyone can confirm the following, I’d appreciate letting me know.

LayerViewSet doesn’t seem to work as an ActionPlugin without doing the following in the Scripting Console:

import layerviewset
reload layerviewset

If this is not done is that the dialog that comes up is blank and has the title “who are you”.

I can’t figure out if this is legacy code on my computer only or if this is the case for everyone.