pcb-rnd knowledge pool
pstk_breakup by Tibor 'Igor2' Palinkas on 2018-07-05
Tags: announcement, padstack, breakup, split, explode
Abstract: Announcing new feature: breaking up padstacks
For about a year we have subcircuits, which is the generic way of grouping objects. We can construct a subcircuit by converting atomic objects into a subcircuit and we can break up a subcircuit back into atomic objects.
Padstacks are somewhat younger in the code base, but we always had the same way available to construct a padstack: draw a few shapes on different layers and just convert them to padstacks. What we did not have until now is the opposite direction, breaking up a padstack into atomic objects (lines and polygons). Now we have it, so our convert/breakup system is fully orthogonal.
How it is useful #1
For the simplest padstacks the padstackedit action's dialog box has enough tools to generate the shapes. But if you want to have a real complex shaped padstack, the best way is to draw the shapes and convert them to a padstack. The problem the new feature solves is editing a padstack with such a complex shape: you can break up the padstack, make the edit on the lines and polygons graphically, then convert the padstack back. We should have almost perfect breakup-convert round trips (see hole limitations below).
How it is useful #2
Most of our terminals (pins and pads) should be padstacks (light terminals). But we also support heavy terminals: for the rare cases when the terminal is so complex that it can not be expressed as a padstack. Sometimes complexity comes gradually and an existing subcircuit with an existing padstack terminal needs to be extended a bit. A bit that already needs heavy terminal instead of a padstack. In that case, editing the subcircuit, breaking up the padstack automatically results an almost fully working heavy terminal (see layer limitations below).
How does it work
We have three new UI entries:
- break up the padstack under the cursor (right click context menu)
- break up all selected padstacks on the board, in-place (select menu)
- break up all padstacks in the current buffer (buffer menu; see buffer limitations below)
Holes are not kept after the breakup. Rationale: the only one way we can represent a hole is a padstack, which we want to get rid of. Also, the hole has a very simple limited geometry, so it is trivial to re-create it when needed (in a round trip)
Padstacks are somewhat generic, not bound to your specific layer stackup. Instead of describing specific layers, they describe layer types for the shapes. E.g. a padstack will always have the same shape on all internal copper layers, which also means there is only one shape stored for internal copper layers. When you break up a padstack, it will result in one shape per layer type, on the first layer in your stack that matches the layer type. Thus if you break up a padstack that affected multiple internal copper layers, the broken-up version will create only one internal copper object - if you intend to have a fully working heavy terminal, you manually need to copy it to other internal copper layers.
(But generally it is a bad idea to use heavy terminals relying on internal layers as different boards will have different number of internal layers - this is not related to padstacks but subcircuits and heavy terminals).
Rationale: this is how we can have the proper round trip for padstack editing, which is supposed to be a more common use case so we optimize for that.
When a padstack is broken up in a buffer, the same thing happens as on the board. However, when the buffer is pasted on the board, only visible layer objects are pasted. (This is an intentional feature of the buffer/paste code, has nothing to do with padstacks). Thus if the padstack had paste and mask shapes, they will have objects in the buffer, but if the user pastes the buffer without making the paste/mask board layers visible, the paste operation will not paste those objects. Rationale: this is an easy way to control what objects to paste from a buffer (the buffer code always had it, it's not a new feature).