Mail Archives: geda-user/2017/05/01/08:33:30
Hi all,
I've finished another round of the layer rewrite, please check out the
demonstration video (~3 minutes):
https://archive.org/details/editlayer2
We already had editable paste and mask layers since last week; there are
three new features.
1. Composite silk
The silk layer group is composite, which means it is possible to define
subtractive silk layers and erase silk drawn manually or generated by
elements. This also allows writing inverse text: text on a negative layer
on top of a polygon on a positive layer.
If the silk group has only one positive auto layer, the old drawing
mechanism is used instead of compositing; this is because some fabs may
not like the geber produced by the composite silk (it uses gerber layers
to erase). This means using the gerber export is still safe with
traditional boards; if you start erasing silk, you should check with your
fab.
I will get the gerber exporter to emit a warning about this when
compositing silk is generated.
2. New layer selector widget on gtk
We had to fully rewrite the layer selector widget: the original
implementation hardwired too many assumptions and spent too much code on
gtk/OOP administration instead of the actual task.
The new widget shows the layers in a structure that closely follows the
layer stack (only the substrate/insulator layers are omitted). Layers
are grouped, group names are written on the left. Groups can be collapsed
and expanded, as demonstrated in the following short video:
https://archive.org/details/layersel
The new widget also supports context-sensitive popups for non-virtual
layers and groups. The popup menus are specified in the menu file.
The new code is more generic and is much smaller. When it supported about
as much features as the old code, it was ~30% of the size of the old code.
Now that it does a lot more, it's still about 42% of the original layer
selector's code. So this is also a cleanup, making the source more
compact and easier to maintain.
3. Layer order concepts
The rewrite of the widget also allowed us to simplify the concept of layer
orders. The original code (and gEDA/PCB) presents the layers in a custom
order that represents how layers are stored internally in the memory.
Moving a layer up or down moves the layer in this internal list. However,
this internal list has no connection with the physical world: the concept
of layer groups is orthogonal to this.
In the new system the user doesn't need to know that there's such an
internal layer list and order: layers are presented per physical group and
up/down means changing the order of layers within the group. In-group
order matters only for compisit groups: additions and subtractions are
executed in this order.
As a fortunate side effect: adding new layers and moving existing layers
will not change the color of any layer.
Furhter plans:
- more I/O plugins and bugfixes in the next 4 weeks
- release pcb-rnd 1.2.3 around end ot May, featuring an improved plugin
system and editable layers
- next target from June: more generic footprints (a.k.a. subcircuits)
that can contain any type of objects and can refer to any layer - another
feature with decade old pending requests.
Testing is welcome - feel free to visit us on IRC (repo.hu:6667,
#pcb-rnd), we have some sort of activity there ~16 hours a day,
every day.
Best regards,
Igor2
P.S. Special thanks to my fellow programmers and users/testers. This
improvement would not have been possible without real team work of a
constantly growing, contructive community.
- Raw text -