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=mime-version:sender:date:message-id:subject:from:to; bh=ITs9SfHgTmfCv4aZy/CbW5KqEIJZdyRjWErM7iJ+cdY=; b=vKrQRkRNXC0JjlE8acmiZAwLwVsLD+vF/d+eVVL5aZtrZbXytGjwppoYIFJuXyAiLN iE9tJPXFsApqHiOar/5e1C91UP1puzv9HvEWdUkYdNV2rDRXr9o5o9zd9q7cfSeeqHOw BBiWIfDp08VTgeV/G/RL2VZPjp4IudYUvs5/4Am+hjyEbdwmjxcD9bi7VQnLNl6oRfzM 5yPY9e+w2KfgNCA7HT/drMfaztCZNQc0E/msfXY3MpE6z92/e1ZhWLrj8ayfFxjRZD7j 8rSebCmOhzCLKs6T6yRUmCB0+TzA8vO8ztr8VNp5862PkA16UygmhPfuZc51wEWbpnxA bSEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:date:message-id:subject:from :to; bh=ITs9SfHgTmfCv4aZy/CbW5KqEIJZdyRjWErM7iJ+cdY=; b=dN3AU7DJp9PmGPZw07bJM0T3pHOIqmqiiokJCVa5PL+Yrg9CUmjSn2QGoDg+rkj+UV jK2xzVKs258IpLDzBEHL57JdofijVXp+eXbwhjI4mMIsI7eTE6AkbYfz/LEJD9UvpDeH u7ghpH8AHqsF2sVm+yhevVolAfiXpAjXMzAkwYEpp/R0jNoE+WAhF5MHt40txzkgV/8d 8edl3VEt28O1VSalftILPIdf9eAMVYWq5uPGHT9OfZPBI5USlQwRqHyA8vv+Bk8UoR5M zDrtPl5ElQzSHylR+tU00YPZAlYbAQY/TMUYK9flpdGesHubvVa8NoqnG2ExuEXka04r a1wg== X-Gm-Message-State: AOPr4FXro6icxTMo/qO0DxN2le+qlAJfhI1ULz0Pw86Sn/kz6oqQHhTNDseQANcjYepLhYKgWgc+kFf4P5WnPA== MIME-Version: 1.0 X-Received: by 10.37.48.2 with SMTP id w2mr6494936ybw.86.1463115488355; Thu, 12 May 2016 21:58:08 -0700 (PDT) Sender: silicon DOT on DOT inspiration AT gmail DOT com Date: Fri, 13 May 2016 14:58:08 +1000 X-Google-Sender-Auth: LWryCUIOpMDZ89d-Xi7LGOqpIFA Message-ID: Subject: Re: [geda-user] Differential pair support From: "Stephen Ecob (stephen DOT ecob AT sioi DOT com DOT au) [via geda-user AT delorie DOT com]" To: geda-user AT delorie DOT com Content-Type: multipart/mixed; boundary=94eb2c034488f3665d0532b21e7d Reply-To: geda-user AT delorie DOT com --94eb2c034488f3665d0532b21e7d Content-Type: text/plain; charset=UTF-8 Here's a basic implementation of differential pair support. The code in "differential.c" needs to be placed inside action.c The code is run by typing :MakeDifferential(TargetWidth,gap) where TargetWidth is the width of lines to transform and gap is the thickness of the gap to insert. The pictures show a 19 mil trace that is transformed into a differential pair with thickness 7 mil and gap 5 mil. This was done by typing :MakeDifferential(19mil,5mil) Caveats: * Doesn't support undo properly. Back up your work before running. * Doesn't work well with straight line intersections, it creates gaps and overhangs at the intersections. The workaround is to use arcs for changing direction, as it handles line to arc intersections beautifully. Enjoy! --94eb2c034488f3665d0532b21e7d Content-Type: text/x-csrc; charset=US-ASCII; name="differential.c" Content-Disposition: attachment; filename="differential.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io58fbzx2 LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpzdGF0aWMgY29uc3QgY2hhciBtYWtlZGlmZmVyZW50 aWFsX3N5bnRheFtdID0KICAiTWFrZURpZmZlcmVudGlhbCh3aWR0aCwgZ2FwKSI7CgpzdGF0aWMg Y29uc3QgY2hhciBtYWtlZGlmZmVyZW50aWFsX2hlbHBbXSA9ICJTcGxpdHMgbGluZXMgaW50byBk aWZmZXJlbnRpYWwgcGFpcnMuIjsKCi8qICVzdGFydC1kb2MgYWN0aW9ucyBNYWtlRGlmZmVyZW50 aWFsCgpFeHBlcmltZW50YWwgY29kZSB0aGF0IHNwbGl0cyBsaW5lcyBpbnRvIGRpZmZlcmVudGlh bCBwYWlycy4KCiVlbmQtZG9jICovCgpzdGF0aWMgaW50CkFjdGlvbk1ha2VEaWZmZXJlbnRpYWwg KGludCBhcmdjLCBjaGFyICoqYXJndiwgQ29vcmQgeCwgQ29vcmQgeSkKewogIGNoYXIgKndpZHRo ID0gQVJHICgwKTsKICBjaGFyICpnYXAgPSBBUkcgKDEpOwogIENvb3JkIHcgPSAxMDAwMDAwOwog IENvb3JkIGcgPSAyMDAwMDA7CiAgQ29vcmQgdDsKICBDb29yZCB4MSx5MSx4Mix5MjsKICBkb3Vi bGUgd3gsIHd5OwogIGRvdWJsZSBpLCBvZmZzZXQ7CiAgZG91YmxlIG54LCBueTsKICBMaW5lVHlw ZSAqbGluZTI7ICAKICBBcmNUeXBlICphcmMyOyAgCgogIGlmICh3aWR0aCAmJiBnYXApCiAgICB7 CiAgICAgIHcgPSBHZXRWYWx1ZSAod2lkdGgsIE5VTEwsIE5VTEwpOwogICAgICBnID0gR2V0VmFs dWUgKGdhcCwgTlVMTCwgTlVMTCk7Cgl9CiAgdCA9ICh3IC0gZykgLyAyOwogIG9mZnNldCA9IChk b3VibGUpKChnK3cpPj4yKTsKICAvL3ByaW50Zigidz0lZCwgZz0lZCwgdD0lZFxuIiwgdywgZywg dCk7CSAKCiAgQUxMTElORV9MT09QIChQQ0ItPkRhdGEpOwogICAgewoJICBpZiAoVEVTVF9GTEFH IChMT0NLRkxBRywgbGluZSkgfHwgbGluZS0+VGhpY2tuZXNzICE9IHcpCgkJY29udGludWU7Cgkg IEFkZE9iamVjdFRvU2l6ZVVuZG9MaXN0IChMSU5FX1RZUEUsIGxheWVyLCBsaW5lLCBsaW5lKTsK CSAgRXJhc2VMaW5lIChsaW5lKTsKCSAgcl9kZWxldGVfZW50cnkgKGxheWVyLT5saW5lX3RyZWUs IChCb3hUeXBlICopIGxpbmUpOwoJICBSZXN0b3JlVG9Qb2x5Z29uIChQQ0ItPkRhdGEsIExJTkVf VFlQRSwgbGF5ZXIsIGxpbmUpOwoJICBsaW5lLT5UaGlja25lc3MgPSB0OwoJICB3eCA9IChkb3Vi bGUpKGxpbmUtPlBvaW50Mi5YIC0gbGluZS0+UG9pbnQxLlgpOwoJICB3eSA9IChkb3VibGUpKGxp bmUtPlBvaW50Mi5ZIC0gbGluZS0+UG9pbnQxLlkpOwoJICBpID0gMS4wIC8gc3FydCh3eCp3eCAr IHd5Knd5KTsKCSAgbnggPSAtd3kgKiBpICogb2Zmc2V0OwoJICBueSA9IHd4ICogaSAqIG9mZnNl dDsKCSAgeDEgPSBsaW5lLT5Qb2ludDEuWCAtIChDb29yZClueDsKCSAgeTEgPSBsaW5lLT5Qb2lu dDEuWSAtIChDb29yZClueTsKCSAgeDIgPSBsaW5lLT5Qb2ludDIuWCAtIChDb29yZClueDsKCSAg eTIgPSBsaW5lLT5Qb2ludDIuWSAtIChDb29yZClueTsKCSAgbGluZS0+UG9pbnQxLlggKz0gKENv b3JkKW54OwoJICBsaW5lLT5Qb2ludDEuWSArPSAoQ29vcmQpbnk7CgkgIGxpbmUtPlBvaW50Mi5Y ICs9IChDb29yZClueDsKCSAgbGluZS0+UG9pbnQyLlkgKz0gKENvb3JkKW55OwoJICAKCSAgU2V0 TGluZUJvdW5kaW5nQm94IChsaW5lKTsKCSAgcl9pbnNlcnRfZW50cnkgKGxheWVyLT5saW5lX3Ry ZWUsIChCb3hUeXBlICopIGxpbmUsIDApOwoJICBDbGVhckZyb21Qb2x5Z29uIChQQ0ItPkRhdGEs IExJTkVfVFlQRSwgbGF5ZXIsIGxpbmUpOwoJICBEcmF3TGluZSAobGF5ZXIsIGxpbmUpOwoKCSAg aWYgKChsaW5lMiA9IENyZWF0ZURyYXduTGluZU9uTGF5ZXIgKGxheWVyLCB4MSwgeTEsCgkJCQkJ CSAgeDIsIHkyLAoJCQkJCQkgIHQsIGxpbmUtPkNsZWFyYW5jZSwKCQkJCQkJICBsaW5lLT5GbGFn cykpKQoJCXsKCQkgIEFkZE9iamVjdFRvQ3JlYXRlVW5kb0xpc3QgKExJTkVfVFlQRSwgbGF5ZXIs IGxpbmUyLCBsaW5lMik7CgkJICBEcmF3TGluZSAobGF5ZXIsIGxpbmUyKTsKCQkgIENsZWFyRnJv bVBvbHlnb24gKFBDQi0+RGF0YSwgTElORV9UWVBFLCBsYXllciwgbGluZTIpOwoJCX0KICAgIH0K ICBFTkRBTExfTE9PUDsKICAKICBBTExBUkNfTE9PUCAoUENCLT5EYXRhKTsKICB7CglpZiAoYXJj LT5UaGlja25lc3MgIT0gdykKCSAgY29udGludWU7CgoJQWRkT2JqZWN0VG9TaXplVW5kb0xpc3Qg KEFSQ19UWVBFLCBsYXllciwgYXJjLCBhcmMpOwoJRXJhc2VBcmMgKGFyYyk7CglyX2RlbGV0ZV9l bnRyeSAobGF5ZXItPmFyY190cmVlLCAoQm94VHlwZSAqKSBhcmMpOwoJUmVzdG9yZVRvUG9seWdv biAoUENCLT5EYXRhLCBBUkNfVFlQRSwgbGF5ZXIsIGFyYyk7CgogICAgYXJjLT5UaGlja25lc3Mg PSB0OwogICAgYXJjLT5XaWR0aCArPSAoQ29vcmQpb2Zmc2V0OwogICAgYXJjLT5IZWlnaHQgKz0g KENvb3JkKW9mZnNldDsKCglTZXRBcmNCb3VuZGluZ0JveCAoYXJjKTsKCXJfaW5zZXJ0X2VudHJ5 IChsYXllci0+YXJjX3RyZWUsIChCb3hUeXBlICopIGFyYywgMCk7CglDbGVhckZyb21Qb2x5Z29u IChQQ0ItPkRhdGEsIEFSQ19UWVBFLCBsYXllciwgYXJjKTsKCURyYXdBcmMgKGxheWVyLCBhcmMp OwoKCWlmICgoYXJjMiA9IENyZWF0ZU5ld0FyY09uTGF5ZXIgKGxheWVyLCBhcmMtPlgsIGFyYy0+ WSwKCQkJCQkgIGFyYy0+V2lkdGggLSAyICogKENvb3JkKW9mZnNldCwgYXJjLT5IZWlnaHQgLSAy ICogKENvb3JkKW9mZnNldCwKCQkJCQkgIGFyYy0+U3RhcnRBbmdsZSwKCQkJCQkgIGFyYy0+RGVs dGEsCgkJCQkJICB0LAoJCQkJCSAgYXJjLT5DbGVhcmFuY2UsCgkJCQkJICBhcmMtPkZsYWdzKSkp Cgl7CgkgIEFkZE9iamVjdFRvQ3JlYXRlVW5kb0xpc3QgKEFSQ19UWVBFLCBsYXllciwgYXJjMiwg YXJjMik7CgkgIERyYXdBcmMgKGxheWVyLCBhcmMyKTsKCSAgQ2xlYXJGcm9tUG9seWdvbiAoUENC LT5EYXRhLCBBUkNfVFlQRSwgbGF5ZXIsIGFyYzIpOwoJfQoKICB9CiAgRU5EQUxMX0xPT1A7CiAg CiAgcmV0dXJuIDA7Cn0KCi8vIE5CIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBhY3Rpb25fYWN0 aW9uX2xpc3RbXSBhcnJheSBuZWFyIHRoZSBlbmQgb2YgYWN0aW9uLmMKICB7Ik1ha2VEaWZmZXJl bnRpYWwiLCAwLCBBY3Rpb25NYWtlRGlmZmVyZW50aWFsLAogICBtYWtlZGlmZmVyZW50aWFsX2hl bHAsIG1ha2VkaWZmZXJlbnRpYWxfc3ludGF4fQogICwgIAoK --94eb2c034488f3665d0532b21e7d Content-Type: image/png; name="pcb1.png" Content-Disposition: attachment; filename="pcb1.png" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io595shs1 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 Rz71b1KX8W4AAAAASUVORK5CYII= --94eb2c034488f3665d0532b21e7d Content-Type: image/png; name="pcb2.png" Content-Disposition: attachment; filename="pcb2.png" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io595vyz2 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 --94eb2c034488f3665d0532b21e7d--