Multiple layers (as in PhotoShop) support

I’ve been thinking about my design process and I came with a interesting idea -at least for me :slight_smile: How difficult would it be to implement multiple design layers per PCB layer? For example like you have layer in photoshop. Would be even useful for people?

For example I have a lot of stiching vias and when I move some major components I almost every time delete most of them and place them afterwards… So if it would be possible to put them on separate layer, disable that layer while moving components and then re-enable and just fix the conflicting vias.

Or I could have logical blocks on separate layers and work with them (move, rotate) easily…

I can come up with a lot of examples but I am afraid that it would be such a major redesign for KiCad that it would be very time intensive. (Thats also why I am not making it as Feteaure Request but only mentioning here in the forums…)

1 Like

Put them in a group.

Yeah, groups are kinda fine. But how do you disable it for a moment? You need to move it somewhere else and then move back. Also it is not so easy to select items from two groups, etc…

For example now I am designing a board and a side plate for it into enclosure. So I copy the footprints that need a hole in the side plate. it would be great if they would be on a separate layer that would be visible but not included in the final design. Now I’ve added then, grouped them together and moved them in and out. But for the final export I needed to delete the whole group.

Contract manufacturer asked me to mark footprints (like holes destined to later connect wires) that have to be protected during wave soldering. So I have selected one graphic layer and added the right shape for footprints needing it. I have done it with V5 where there were not a lot of extra layers but now you have so many layers that if I understand your problem well I would add to all footprints that need a hole in side plate this holes drawn at one layer I would destine only for that purpose. Then I would not delete anything but only made a picture containing only layers I need.

Am I missing something? Are you able to place footprints on User Defined layers?

This is the example I’ve been talking about:

The top side is the PCB that I will order and it will act as the side panel of the enclosure. I need gerbers and drill files for it.
The selected part below it is a copy/paste from the main PCB with the important footprints. It would be much helpfull if I could move them up so they would align with the holes perfectly. I did create group of them and moved the group up (precise move) and back down. However they must not be in the final export. Thats why I said that it would be great if I could put them no separate layer(s) but select them to be only visible and not included in the final export. Or even lock the layer so that I would not move with them.

The idea is that every time I do something in Gimp or similar then I do almost everything in separate layers just to be able to control it better and it seems to me that it could be the same in KiCad…

I think the heart is in my words:

First of all I understood side plate as being something mechanical (not PCB).
Then I understood side as box side and supposed that PCB used as base for dimensions is paralel to this plate.
So I assumed the needed picture can be drawn at any graphic layer at the same main PCB and then printed by selecting the right layers (or only one layer).
How I understand it now I suppose that I would:

  • start from copying the main PCB as a new project and there added what I need and then deleted all from main PCB, or
  • draw at main PCB at graphic layer the holes I need and then copied it to the side panel.

But it is not what you was asking about.

Can’t you add the needed graphic at separate layer and then move it somewhere without need to move back?
Selecting everything at separate layer and nothing else is easy by making this layer active and dimming/hiding all others.

I am sorry, I was not clear enough in my post about creating a sideplate. But I did not want to clutter the post with too much details…

And you are right. There is a lot of ways how to skin a PCB (I hope that it is culturally acceptable saying :slight_smile: ). But everything means that I need to do some extra work. For example redrawing the footprints to a graphical layer. And that is what I basically did, I created bunch of straight lines and dimensions to make the holes fit.

The idea with “my layers” is that it would be much easier and thus more error prone and repeatable.

I expect so many problems with “your layers”…
Assume you put some THT footprints at your Top1 layer and some others at your Top2 layer.
And you want to be able to select Top2 layer footprints and move them (temporary) somewhere.
Do there automatically should all other layers used by these footprints (bottom copper, top and bottom mask, top and bottom paste, and more…) be divided into 1 and 2. Inner layers for THT also exists…

Basically I would imagine it as having every layer toggles to:

  • Be visible
  • Be editable
  • Be included in the PCB - and thus interacting with other layers.

And I understand that it would mean a lot of problems that I can not foresee now. But I can also see a lot of positive use cases.

If you mark one of your top layers as being not included in PCB then while routing tracks can use the area free because of not being there footprints from that layer.
Then you switch that layer to be included in PCB and what - KiCad should find the other way for tracks that collide with these footprints?

That would be great but the ideal solution but that is merely impossible. The practical solution would be to mark the conflicts and let me resolve them. Basically the same as happens now when you move a footprint over existing tracks:
image
But maybe with showing the conflicts…

Same with vias. As I mentioned one use case for stitching vias, most of the vias would remain the same and I would fix the few of them. I could even create a custom design rule check in the form of “via not connected to GND on layer ‘stitching vias’”…

I think one overarching issue is that most of KiCad layers are physical things, not grouping/ordering concepts like in Gimp or Photoshop. You can’t drag a layer from the bottom to the top, since that wouldn’t make any physical sense. Similarly, you can’t take a footprint with information on 1-4+ physical layers, flatten it all onto one User (normally for documentation) layer and then re-expand it. Groups are the best collections we have at the moment.

There may one day be a way to “hide” groups (not just from visibility, from existing on the board at all) but I’ll be surprised if that time comes soon. That’s a complex problem to solve from the point of view of the core software which really cares about what the final physical board will look like. On the other hand, that might be a reasonable job for a plugin that could act like a many-item clipboard and let you “cut” out groups to plugin storage, deleting them from the board, and copy them back in later. (I don’t know of anything that does this now, but maybe someone else does?)

In the meantime, I’d personally second the idea of additional footprints that only consist of documentation layer information just for positioning stuff.

I do understand the concept of layers being mostly physical. But that just means that there are limitations for what you can do with the layers or not. And it is not completely true that you can not something like that. For example take footprints. You can think of them as collection of layers that you map onto a physical stackup. Only their behavior is so deeply engraved into the KiCad (or any other EDA) that you do not think about them like that.

And yeah, I can make a copy of footprints on the user layer or export it to svg and re-import or any other way I can think of. But that is this one example and even here it adds an extra work.

But I can find more examples that could be solved easily and more intuitively by using layers. For example some time ago I’ve been reading here about board variants: How to manage board variants (different components and footprints)? - #6 by poco

You can see that most of the solutions are a really awkward and feels more like a work-around-work-around than a proper solution. And they do not offer solution to variant tracks. Even one of the link on gitlab links to a video how it is done in altium: The variant is a SMD or THT LEDs. And the solution is to make tracks for both of them and position them carefully so they do not conflict… How much easier it would be to have one layer for SMD and one for THT?

Or imagine visual diff directly in KiCad. You would just second PCB into separate layers and you would immediately see the differences.

For me the problem you use as an example is to have one PCB with possibility to assemble SMD or THT. I also like this understand PCB variants. That way you can place one order for bigger quantity of one PCB and then assemble on it several device variants. It is chipper then placing several orders for smaller quantities of PCBs.
But as I understand your layers by switching them on and off you will get different PCBs. Each of them will have to be ordered separately what is exactly opposite to what is the idea you took as an example.

Yes, you are right. That is one kind of variants. The variants I’ve been talking about is a different kind of variants.

For example now I am designing a board with ICE40 FPGA. I rather do not care if it will be HX1K, HX4K or HX8K. I will be producing 10-15 boards max in total. The exact chip depends on availability and actual pricing…
And even in the same package HX1K and HX4K differs on cca 10 pins (including power pins)… It would be great to have two or more variants of the part of the PCB with the FPGA… And as I will be having them assembled, the price of PCB (~5USD) is less than setup fees for PCBA… (~20USD)

Don’t take this the wrong way please . . . but what you are trying to describe here is feature request but you have already decided upon how it should be implemented. This ties the hands of the developers and limits the scope of their creativity.

You should describe the problem you are trying to solve not how to solve it. The developers might have a good way of solving it using the current version.

Sure, I do not take it wrong. I am just thinking about what would make my experience using the software better. I do not suppose that it will be implemented but maybe it will spark some other ideas…

And as about the problems I am trying to solve, I’ve given at least 3 examples and I do know how to solve them but I do not find the solutions good enough so I am looking for ways that would help me to do it better. That is just all…

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.