Regarding the non-rectangular outline not reflected by gcode output, this needs to be implemented as is stated in the source code (gcode.c:1037):
/*
* Currently this is a rather simple implementation, which mills
* the rectangular extents of the board and nothing else. This should
* be sufficient for many use cases.
*
* A better implementation would have to group the lines and polygons
* on the outline layer by outer polygon and inner holes, then offset
* all of them to the right side and mill that.
*/
/* a better implementation might look like this:
LAYER_TYPE_LOOP (PCB->Data, max_copper_layer, LT_OUTLINE);
{
LINE_LOOP (layer);
{
... calculate the offset for all lines and polygons of this layer,
mirror it if is_bottom, then mill it ...
}
END_LOOP;
}
END_LOOP;
Regarding the non-rectangular outline not reflected by gcode output, this needs to be implemented as is stated in the source code (gcode.c:1037):
/*
* Currently this is a rather simple implementation, which mills
* the rectangular extents of the board and nothing else. This should
* be sufficient for many use cases.
*
* A better implementation would have to group the lines and polygons
* on the outline layer by outer polygon and inner holes, then offset
* all of them to the right side and mill that.
*/
/* a better implementation might look like this:
LAYER_TYPE_LOOP (PCB->Data, max_copper_layer, LT_OUTLINE);
{
LINE_LOOP (layer);
{
... calculate the offset for all lines and polygons of this layer,
mirror it if is_bottom, then mill it ...
}
END_LOOP;
}
END_LOOP;