Layout - production "variant" - removing some footprints without affecting copper


Does anyone know if there is a way to produce a board drawing that has parts removed, but not the copper? This is for a production variant, where some parts are depopulated.
If you just remove a footprint in layout, it also removes the copper and the pads. That will not work: I need to be able to generate a drawing that looks just like the circuit board, but doesn’t show some components mounted.
Currently I am making a temporary footprint library, then editing each part that will be “removed”. I delete the assembly view (in my libraries, that’s the FAB layer, showing the component outline) and the 3D model. Then I save to that temporary library, then in the layout file I have to edit the part and change the footprint to the new one.
That’s a lot of steps, prone to making mistakes, but mainly a lot of time.
Is there an easier way to do this?


This is a BOM issue. It’s common to replace the Value field with something that indicates the part is not installed.


That’s really not a good enough solution. the assembly drawing will still show the parts populated and the CM will have to ask to be sure that they aren’t populated. It’s confusing. I also use Pads and they have a tool that removes the parts from the assembly view (without affecting copper / mask) for just this situation.


Probably needs a custom solution that would act on some ‘assembly version’ field.
As a start I would look into the assembly drawing generator scripts some people have created and work from there…


Well, if I understand you, your “board drawing” is the 3D view?

I’d edit the schematic to alter the part number of those that won’t be populated.

Then I’d create a new library footprint for that part and use a text editor to remove the 3D model reference.

In PcbNew, select one of the “new invisible” parts, and Edit Footprint Properties. In that box, click the “Change Footprints” button.

In this method, changing the schematic to reflect which parts are installed will be reflected in PcbNew each time you make a change and run the Netlist.


I believe I know what you’re trying to do, and why. Good luck keeping all of the variants, and their associated documentation, straightened out!

In prior incarnations the situation was controlled at the Parts List (P/L). There was a base part number (P/N) - 654123, or whatever - and a “variant designator” or “dash number” was appended to identify a specific version. E.g., P/N 654123-1 might be equipped with a 120V transformer for North America, and P/N 654123-2 might have the 220V transformer for Europe. (And P/N 654123-0 might have NO transformer; they sit in the warehouse until an order is received, the proper transformer is installed, and the part number is re-marked accordingly.)

In those situations, the P/L had separate columns for each dash number. When you looked at a line in the P/L, the dash number columns told you whether that item was used, for each dash number version. A " 0 " (zero) or blank entry told you to NOT install the part! On a pictorial assembly drawing, such parts were sometimes shaded, or drawn with dashed outlines, but more commonly were flagged with a Note saying something like “Optional component - see variant table.”.

The system worked most of the time, but errors and re-work were still too common.



Dale - yes, you get it, thanks. There really isn’t a great way to do this. I have one design that the customer wants to use the same PCB for three versions. So it’s layed out with DNPs for each version. And I had to make separate BOMs for each. For the assembly view (2D), Pads has an “assembly variant” option, which lets you define the “variant name” (product1, product2, …), then choose the components that are used for each. Then, when you generate the assembly drawing (2D), it populates the correct parts for each variant. I have used Orcad layout and PCad in the past, and I don’t think they did that, so it was a nice feature to have.
I suppose I would call this a wish-list item then, to allow removal of PCB components without affecting the copper / silk / mask.


Or maybe just a property to make the component active (visible) or inactive (invisible) for BOMs and views!


My solution, above, will work. And, I don’t see why it was so easily dismissed when the suggestion is based on the core work-flow of KiCad; and the NEW 3D viewer!

Unless I am missing something, all you have to do is make 2 custom Atomic parts for each optional part; which is not hard to do at all. Edit the one footprint to have NO 3D part association; and done.

A 3D visual/invisible check-box option could be a wishlist item, but I can’t see that being very high on the priority list unless another wishlist item could benefit also.

I have 2 parts on a board that are addressable by pins being pulled high/low/middle. I have the need for at least 3 boards with different addresses on the boards.

For my design, the BOM will only be different in quantity. And, in manufacture, will be different in quantity and placement.

I will create 2 Atomic Parts for the resistor I use, and simply alter one of the footprints to NOT have a 3D part association.

Then I will archive the current project under the first part number. Then I will swap the Atomic Parts around in Eeschema, re-run the Netlist, and have a new 3D view in PcbNew. Then re-archive the project with the second revision name.

It certainly seems different then Pads (from what you mentioned), but I don’t see how it is any harder; AND, you get a 3D view, not just a 2D view.


At the Symbol level, I think this would work. Archive and save for each version.

Might also help with possible future simulation.

Even if inactive, the “Footprint” would still be rendered onto a copper layer; while not shown on the 3D viewer.

Wow, this is an odd request, as I’ve been trying to ADD 3D viewable footprints on my designs, and NOT remove the 3D view.


As I said, look into assembly drawing scripts and work with them…

Just to make my point for the concept here is a view of the component table in EEschema in a KiCAD nightly from 13th May this year (the stables don’t have this, but you can have those fields as well and work with them in a stable):

If your assembly drawing script is able to get those fields from the schematic and omit the ones that are not assembled you get what you want.
I really thought the path forward would be clear after @Andy_P s answer… otherwise I would have elaborated and added all this in my earlier post.

Your custom script ‘just needs’ to:

  • identify how many options exist
  • create drawings based on number of options

You need to be vigilant about ID convention for options, so the script knows what is together.
And you need to tell it what the basic ‘omnipresent’ parts are… ‘_’ as ID field works for me.

PS: You can either run your own local atomic parts library or even do it with the KiCAD libs.
You just have to ADD this field in the EESchema options here BEFORE you start with the schematic or nowadays you can add them afterwards with KiField:

Any part placed in your schematic will have this field then - won’t work for already placed parts. You need to use KiField for that and ADD the field there.


I don’t think you’ll see something like this appear for a long time.
Your best shot is doing it yourself based on the work by others… naturally depending on your python scripting fu.


The footprint - properties - attributes selection already has normal, normal+insert and virtual.
You need to make your unfitted parts virtual


Will that affect prints, ie. the Fab layer?
The OP talks about drawings, not POS files…


I think that logically a “virtual” footprint should not be on the Fab layer, but should be on the Court Yard layer