--- In kicad-devel@xxxxxxxxxxxxxxx, Dick Hollenbeck <dick@...> wrote:
Magnus Beischer wrote:
I guess that we have 2 separate speed problems here:
1) Generating the zone fill segments (done once for every zone)
2) Drawing the zone fill segments on screen (done all the time the
user move, zoom, redraw etc. on the screen.
Making changes that increase the drawing speed is not a good idea, but
I think a smarter sone fill algorithm could drastically speed up the
drawing on the screen. A question here for you Dick: If zone creation
time goes up by 20% and zone drawig on the screen goes down by 50%,
would you conider that to be an improvement? (if also generating
smother edges)
Magnus
Yes, that would be an improvement.
The last time we talked about this, I mentioned the idea of using
polygon fills from within PCBNEW to show zones. And to postpone the
creation of the actual raster lines, (vertical and horizontal,
instances
of class ZONE, a class derived from TRACK) until gerber file export
time.
Variations on this idea could be improvements, because then the PCBNEW
use of zones would be more limited to the ZONE_CONTAINER instances.
We
all recognized that the visual presentation of the filled polygon used
like this in some competing software tools did not always correctly
present gaps around pads and such like the current raster lines do.
This just reinforces the need to always look at the final gerbers in
the
gerber viewer anyway, and this is not a new need.
Is what you are thinking similar to this general scheme? If so, I
suspect the numbers you offer of 20% and 50% are conservative, and
actual results might make folks scream for joy.
And this is not to say that only my idea could make folks scream for
joy. What do you have up your sleeve?
Dick
The 20% and 50% was just to be sure that the zone drawing speed is
much more important than the zone generation speed.
Some ideas:
1. By comparing KiCAD and Supermax ECAD at
http://beischer.com/opencad/fillzone.htm I see that Supermax is just
using horizontal lines combined with a line follwing the border of a
zone. Just using horizontal lines will reduce the number of lines with
~50% but this method requires the patch not to distroy the smothness
of vertical zone borders. Adding the border like the patch does will
move the 50% up a bit, but I still think there will be much less lines
than in the current releas. Question: Is drawing time also dependent
on segment length?
2. I think that there is a great advantage to draw the zones
internally in KiCAD, on the screen and in the gerber files in the same
way, to have the bord review as simple as possibl. One way of keeping
this method but also increasing the speed is to:
- When drawing a border like the patch and for instance drawing the
zone with 8 mil tracks using 5 mill grid, if there are 3 tracks in
paralell, reduce the length of the segments 10 mill and replace them
by one ~24 mill segment. When using this method the number of segments
will be reduced heavily. The more simple the zone is to fill, the more
segments we can optimize. For rectagular or trapetsoid part of zones
the reduction of segments will be about 50%.
In total the 1 and 2 above will reduce the number of zone segments
down to minimum 25% + the extra zone edges. It's hard to do any real
claculations on this since the reduction is dependent on the bord. I
have just done some manual tests in KiCAD to get very rough estimates.
Note: Segment widths and zone grid has to be calculated and optimized
not to get small areas without any fill inside the zones...
Magnus