← Back to team overview

kicad-developers team mailing list archive

Re: Re: [LONG] Zone filling optimizations, first results


Magnus Beischer wrote:

I have another approach that might be worth looking at. One question
we might ask is:
- What can be done in the background (not in the GUI thread) that
helps the user to accept long processing times?

The idea is that as a user I might accept long processing times if for
instance I can keep working immediately after I have started a zone
fill (in a restricted way). For my own work I'd be happy if I could
start to fill a zone, move to the next zone and start to fill that
one, change layer and start to fill zones on that layer, take a break
from work and come back and see that all the zones are filled in a
beautifull way.

First of all, sorry for the late reply, I was on vacation :-)

I had already though about using a separate thread, but as others already stated, this would cause problems. Basically all the optimizations are done iterating through the linked list of zone tracks, so bad things could happen if you add/remove zone tracks to/from the list while the optimization is running in background. You can avoid this disabling the zone user operations during optimization, but I don't like this approach.

Another idea is that as a user I might want to control in my settings
if I want "fast zone generation", "beautiful zone edges" or "optimize
for redrawing speed".

I agree, this should be way to go. I'm still doing some tests and trying some optimizations to speed it up a bit. But when the patch will be ready and the main developers think it's worth adding in Kicad sources, I'll be happy to add all the needed options to the zone properties dialog (or in any other better place).

We could have two approaches: do the chosen optimizations every time a zone is filled or apply them just once before plotting the gerbers.
It is very difficult to decide!
For small boards there is very little difference, because zone optimizations are fast so is worth doing it every time a zone is filled. But in small boards zone redrawing on the screen is fast too, so zone optimization will less usefull (but it will reduce file size and memory consumption). For big boards more testing is needed. I work only on small boards, so for me is difficult to say if, for example, a zone fill which takes two minutes to complete is worth the faster zone screen redraw...

So now I'm separating the optimization code (the one that reduce the number of segments laving the final gerber zone layout the same) from the code that beautify (smooth) the zone margins. This way we obtain more flexibility and anyone would decide what is the best for every board. Fore example on a medium board one can decide to reduce the number of segments every time he fills a zone and to do the margin smoothing only once before plotting.

Could someone send me some 'big' board for testing purposes? (only track and zones, no modules, etc) ?

For people working on big boards: may I assume that video.brd in the demos is sufficiently complex that I can use it for testing or you design much more complicated boards than that?

PS: I'm also working to add teardrops for pads ;-)

Follow ups