X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f X-Recipient: geda-user AT delorie DOT com X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:subject:message-id:in-reply-to:references:mime-version :content-type:content-transfer-encoding; bh=0xzNuBOnTDLrxQApg2WLq2o1eSTWzpppXRmp/COZGnw=; b=VdisK/wfesnBJvKhau5dNQglw0/KGVE3aBfsT4D34uYZDU3WGnkd5OjeT5WRSdPHkv zMhOvUTyV++4vdGB+Kc60lPwKk5mrEyKQ+zvL1/KtvUXc9PmUdWkBATJt6hv0+bY633Q tk61s4IqJre8bI8erzyP5OaLYTScwoNtxlaVMNaosL5V+Mq4lpnagqwTE3EtS0xINOLw qKTw7IP7lzuQu9+jy13IJpi0BqsouKWkHJm/ejrEtdGu2ShpNQBr81y5Ea3dcDwu2l/b iVBcRG/1Wfw/2OolsD2ZQ2Mi3O9oO4A8QfuUuJbAAcggpV6sd2NmxjIkAbwT6x6fU9X2 OKmw== X-Received: by 10.194.156.199 with SMTP id wg7mr41314380wjb.114.1451236210645; Sun, 27 Dec 2015 09:10:10 -0800 (PST) Date: Sun, 27 Dec 2015 18:10:05 +0100 From: "Nicklas Karlsson (nicklas DOT karlsson17 AT gmail DOT com) [via geda-user AT delorie DOT com]" To: geda-user AT delorie DOT com Subject: Re: [geda-user] Re: DRC clearance work in progress Message-Id: <20151227181005.e8481d671102c3bf0867f594@gmail.com> In-Reply-To: References: <001a1134f920c49e910527d3a068 AT google DOT com> <20151227173145 DOT 4f52bd9239ac5e14b8966e07 AT gmail DOT com> X-Mailer: Sylpheed 3.5.0beta1 (GTK+ 2.24.25; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Reply-To: geda-user AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: geda-user AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk > "Nicklas Karlsson (nicklas DOT karlsson17 AT gmail DOT com) [via > geda-user AT delorie DOT com]" writes: > > >> "Peter Clifton (petercjclifton AT googlemail DOT com) [via > >> geda-user AT delorie DOT com]" writes: > >> > >> > Focus on within-layer clearances for now. > >> > > >> > Any more complex design rules (such as dielectric breakdown through > >> > the layer stack) requires more data than we have in PCB's data-model, > >> > and may actually belong in a separate calculation utility that would > >> > calculate out a geometric design rule that can be applied in PCB. > >> > >> I am playing with the idea to build a DRC tool that works on the gerber > >> output, using libgerbv and the clipper library (C++) > >> > >> http://angusj.com/delphi/clipper.php > >> > >> I have made Python bindings for importing gerbers into clipper polygon > >> data structures, perform bloating/shrinking and clipping operations. > >> > >> Design rules would be specified as boolean operations on suitably bloated > >> layer data, and anything left in the end is a violation. > >> > >> An example that I have working now: > >> > >> from pyclipper import Clipper, gerbv, OffsetPolygons > >> proj = gerbv.project() > >> proj.load("v01.front.gbr") > >> proj.load("v01.plated-drill.cnc") > >> scale=10000 > >> raw = proj[0].polygons(scale) > >> drill = proj[1].polygons(scale) > >> clip = Clipper() > >> clip.clear() > >> clip.addsubject(raw) > >> # clean up, and remove keyholes > >> routing = OffsetPolygons(clip.union(),1) > >> # require 12 mil annuklar rings > >> annular = OffsetPolygons(drill, 120) > >> clip.clear() > >> clip.addsubject(annular) > >> clip.addclip(routing) > >> annular = clip.difference() > >> > >> Any polygon left in annular is a violation. > >> > >> For net specific rules I'd need to add some input that gives for each > >> net at least one coordinate (per relevant layer). And some code to find > >> the polygon at the given coordinate. Some rules, like clearance checks, > >> require iterations over the individual ploygons in a layer. At that > >> point they could be tagged with a netname by the given coordinates. And > >> then there could be overrides of bloat values for specifiv nets. > >> > >> I plot the ploygons with gnuplot right now. A gerber export may be > >> usefull to visualize the violations in gerbv. Or some gui. > > > > Great! > > > > I think your work will would be useful within pcb to. > > > > Simple scale will give a little bit to large distance value in outer > > corner, attached picture, there need to be a circle segment but it > > could be fixed later at any point and to large distance is usually > > less of a problem than to small distance. > > Currently my Python bindings only support circle segments, but the > Clipper library can do other corner handling as well :-) Actually a full circle with clearance distance radius should work fine for all corners.