From 1ffd9b50a85ccaf7b5254487f133c991dae7764d Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Tue, 25 Dec 2018 23:56:25 +0100 Subject: [PATCH] Oval solder pads --- diylc/diylc-library/lib/diylc-core.jar | Bin 248429 -> 248429 bytes .../components/connectivity/SolderPad.java | 376 +++++++++--------- diylc/diylc-swing/lib/diylc-core.jar | Bin 248429 -> 248429 bytes diylc/diylc-swing/library/main.jar | Bin 454684 -> 454891 bytes diylc/diylc-swing/update.xml | 4 + 5 files changed, 192 insertions(+), 188 deletions(-) diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 5d13643cd8e524eeb5173c32792c053759612ed8..55d0d90b1c9b5bd6f708aa4f53a26f52e515ee00 100644 GIT binary patch delta 4259 zcmY*cd0da_7VmkUq@*;Nnd%~CiDWEe$zVcBLfS^SF4;+BYcOclA|=(YdbKZFRJ5wM zML(h_V=22K%gnfDn8q@ei^2V!bKcMWeC}W0bG~PN&Uv2qS6zv{x)OW!bek=-duVCt zYH8J~<9k|jSsictk=LqKw#))xA+rJqVPgSg_7%Xt*=PVWJ_*2!+W_q0wg4fluj=D% z!~aXHdciTyQj7o>cY+W>ImJXE{}OfpW3)#BtkNE?fhv`D90wfSUEK}nhdqA<_|f2R zVA~AOF~B6FLE3-~pGTnX@MSqhy)xa5xVDd@0DGCa1?n9ZRfrJ-XQF@mAUi}Ot95{? z-9xT|yT{P|NI$SPL;QP~1)9x=zXS6>zG~3{d@$xRnybf|AYL5rfjD47J2R|Rr?`}u zcG|gfEv+zZRgRHKmB~autR6Wz3vuX_aoC-={R@u%Ro*%;7HIrq$bXyT_vqKd7h-oMxFc1ofLKsdyg$w6PdpoN0=BbCwO-pXUg~*M|%dbqZ<#RqDfc0Wym& zL-sAj?r3c}vK-O6%vK-x<@FmdYe(Y^9&f_ww zqAnZ(f0gZ}>j1sl{{va|Iai(J8b)d;BNb?{@{Fed*JWgwGq$ z-tSc*+RwbXi+sV`Vcj(yRbOTmz{}x+HNv#z>AI{17)f8Bcd|L~#$^2v7KJ{^ zVeBVi0I$lVd6K7EQ@l=EV$4mYPesC5F5JsnF>rGF8#<+!Gl;eI9^9mmyz?f~PUJL}A+(+#0U1obx3giOgj)u8YE*zI+P` zZWeqN3h4v+Q50qm;a5?xwBdbFup7ZcX%XS_0MnV8z8$0{UuG&l9L*Pzp=9yTtHU&g zAlQ(p6i_2{v?%=Q^&9La;B-KMjQ6mXV$1n>@6LT3OEhOf5l9nUQ>O=toihC-=|_ebGUBEN#;$dh<0 zGJYxC4VjZ^96#1_dj|gknMYYX4TZ2=ehP(|`8*$mr-l4;?4nxOVB_ za%5~8`MEy8yt&DL`wWB!kNFEUUHgM4Amj6qJ3_+hav@`4A0hgou(z9tqTjv_t0xm? zX&y+ewp3vt21)nMi0<+%UGW|IW%m#QJIOZ?tB~nwB)XiS-23^$9zTv#Rtg>Taatqj z$(&v%THqH`-nU8I!l+eS#WsAIo!f;Q3L|$5Z|GKv3lQIE{s@wO3=mU6HwYB)2Z=N# zP>cuM9w?>*HU^4s0sjsZ)6gCyW&_3q3HYN(Y6}w3mt-9LKmWdxf3UCwQVPaDcBC5$ znuL(k;t(+l>_s7BF5ue`YGP8Tm<;+4p~4HWBUCH_9KDAyevg$~!t-xPTrUF6IDU45z01L{Q$X5yB7nUn0a>K$l420hpuUt4Of`bl1In?Y)c@OF{QKAbbFu4$zn^d{W;8zqc zRsb3%5N=HnzM$Vvp!#D~!WHyz1+S~9Z>vPYZHdAi>}`p{6VNDQNNlWXI$fggLJ;igLMASQYi0w1<$6?90sNm1}S(u zRr6Xj_3YEgKO>Fuy;OA9bgG-1PW;<+>c=&M>J??s+A`_*?h58+(lOs;QoF8M6qcVw zVV|;SEUwu!zC+oh|CLSUX5>)0j2ya^f8@|O#^%y%*qKY$;Jkw7hbV6IAQAW$!Rz`Mp8TofB zCqIvJ08yQ7OR1GJVBq}vJ>QIe3It4;v~IcwSs0%r28v)Nx@;K zhz~zSKMi+J(d8R+njYu=)506-{CS%0!SrT&Y{|{yU%Af=*|NPd!WhJ~>PE99wBG@vU@!?kT!W8_jV?8_n;08^!fIC*1xEiOLTK delta 4259 zcmY+GcUVP5Iug5eBzEiSF;nQe7#J8C z7(~^@cOAqd>*5{W%D;LCW(%0l`tztdeFz%`P}#?Tf3pz)Yd#*}!|egPxC0=B_0+%p z(d_>U>z{DUvlBz1rY9jpP)#uo^8ONzfRVc4fR(x-66Jbb90z{XxuFx7?{@ta@U7|J zU~M%!%YaGd{dBOUV-}`A2%BU?~J^R?uyZt$O~hUVqEQl6jO+sV?)ti%u3+D>!w~Je0<61( zo*DNX^<=#z?q;zv0QKvsX}BK$^ih~!m}!N2QK9k(Xu_|VV-e+hR~>Hk(9k1b8qKeC`6zpoaVD+%u>Qp1v3>L-2gdGG!sR?U@5~_bUEp~tf zyWLg3AJw=w%M&1!_F)z%G=IcCLE+^<_7MuULzpoN_QRMd3gbRu);h?VGlqF{5DLe# zDsvE4xUv+Cc{_{6pb+E1-eF9vH+zki=((&31@{HAsad4F*ppwsz5y52n=2b!nWY-B zi1}jD<0Whw#(uhjT|mKj4J$&S(vQWVFnv8sz~G-YvWaN1`HHAIkdM1g@!w9=nmV`ppJ|xDv19cwYi9kcJAl8_{aj^j$B3%68CjtVoi;yjaI0@=^! z61$JW!j8^XK9$= z^NPiz@cSEf9EC#0yQ6Si$7$)-M%)`M>r8k63LR#A1q$94+zy2;AMim8rp)<}4@1jk zYi@+XPd)i26g+JC3>5bD5=6f;!%~<{jg@+UPcoc?Au_s?l6_eWQS z3qOIbt**R)ikn`&@Nk$?u22>7HDmo7V;@*F<#0Q6!x#6>gtF!+yMt!>&wmHOQ3FF%XKIO z`|%8X=)KoNLFrnui3|8?QCDu`%h1xggF8X6(j|bmfu}uy2g6reT^!HtuuNzIAB@6L zJ@1Xe#YBDuKQadu-h!5OsoVoCC(=27tkp{y`~$Sy%i`%Mgze`iQJ9{~b5VGh&)>%> zIu&sh>ogqZ)n?HB>snrd7W;aBwg*^VT<5>N2g05E{0X|Q{lOE^;`^36L&1s?p<-cQ zA$p+@)k#FtZ(m#g2V-Z*2U4X|N=-#S<<@D@S)E}dKF7H1E<)fWxu#+zTDqEx4i{+m zdajrZKWnPf3So#bE~|xnGSYHtt!Rc{Om+7LaRakfZWdectJ}U+c%U$Br&tWrDschg zQ@9S_28fA3(?BsC=oBc%fPZVCmW&B(ZlDK;i&?-6;WTuQ2&%g|LaYP(FA-u5&@EDU z0dq7yixl%fcaNg_IZ@<)7De?ZMbq5z(NypEXfYk)NA4E>z=GX4PjU>Ud&STg*)f#% zNaMs<@+ZX7c(-Dy&B#6S9>_A$d&ENEZ<_A7SNs$7w7oRm)4gH|=sw>FUtr@mv`uz# zWZxA>`Y#%%#ETUWR}e3j1I-eMn-hc|=(iK7|0un12R&TlcY2z;e9qVNQNYohQ5 z+9Zi-z*R|NKCm%~w!KhNpI+BeC#1x?6LE#K^J1DPzpb%&El)mO>9@(JxV8C|UzRVAP1@h&Q-8NZ#Ee67{nGyI5al@*5F-ny{)Ga$ zZ_?kpQ0|wce<9VY)2J(=xLZ}Cr?R?8*h5fa5e@Z25pB+(!?d_9hiRyj8qJQ-5Q~mb z(Yzz_j>-H-N2sX7QL+aerTlY8+gbXZ2^wD|euR5wr4UzAgx%Q4DJK1TI!9;0>ltDt%O zDk!eDg6irjDQ;FJ`Sq1FSG&dmD(%l^mHagtSrzr4T}Ae!D$0|aj)y(4n(XVV$zEMe zeT{3#?^Q$geKm9m?$uDeQMGa&`L=e}(j~uCOK)>nomc?&*gDc5)X|%CsTa$@UQ{oZ z0?iso-_$_gs`du43hd6u=@VRhoZ>7_(BoTvg5Ge0M(ak>{WV_HIQS&l!%xyr!_AZQ zSVx|s$GPW}SPXssJVlRoY7>2Plbgi9!2Yy}=JjZ%yxeArd)-WrclK#wj>e}NUCxj_ q?F`NP;0*P1Zjt9A>&CaxH~*HV+qcSnl=f|{w14MXDX-UA;qhNwtFRpa diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java index 25ada2ef..7a395587 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java @@ -1,196 +1,196 @@ /* + * + * DIY Layout Creator (DIYLC). Copyright (c) 2009-2018 held jointly by the individual authors. + * + * This file is part of DIYLC. + * + * DIYLC is free software: you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * DIYLC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with DIYLC. If not, see + * . + */ +package org.diylc.components.connectivity; - DIY Layout Creator (DIYLC). - Copyright (c) 2009-2018 held jointly by the individual authors. +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; - This file is part of DIYLC. +import org.diylc.common.PCBLayer; +import org.diylc.common.SimpleComponentTransformer; +import org.diylc.components.AbstractComponent; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.BomPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.core.annotations.PositiveMeasureValidator; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; - DIYLC is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. +@ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic", + description = "Copper solder pad, round or square", instanceNamePrefix = "Pad", stretchable = false, + zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, + keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class) +public class SolderPad extends AbstractComponent { - DIYLC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + private static final long serialVersionUID = 1L; - You should have received a copy of the GNU General Public License - along with DIYLC. If not, see . + public static Size SIZE = new Size(0.09d, SizeUnit.in); + public static Size HOLE_SIZE = new Size(0.8d, SizeUnit.mm); + public static Color COLOR = Color.black; -*/ -package org.diylc.components.connectivity; - -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.geom.Ellipse2D; -import java.awt.geom.Rectangle2D; - -import org.diylc.common.PCBLayer; -import org.diylc.common.SimpleComponentTransformer; -import org.diylc.components.AbstractComponent; -import org.diylc.core.ComponentState; -import org.diylc.core.IDIYComponent; -import org.diylc.core.IDrawingObserver; -import org.diylc.core.Project; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.BomPolicy; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; -import org.diylc.core.annotations.KeywordPolicy; -import org.diylc.core.annotations.PositiveMeasureValidator; -import org.diylc.core.measures.Size; -import org.diylc.core.measures.SizeUnit; -import org.diylc.utils.Constants; - -@ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic", - description = "Copper solder pad, round or square", instanceNamePrefix = "Pad", stretchable = false, - zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, - keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class) -public class SolderPad extends AbstractComponent { - - private static final long serialVersionUID = 1L; - - public static Size SIZE = new Size(0.09d, SizeUnit.in); - public static Size HOLE_SIZE = new Size(0.8d, SizeUnit.mm); - public static Color COLOR = Color.black; - - private Size size = SIZE; - private Color color = COLOR; - private Point point = new Point(0, 0); - private Type type = Type.ROUND; - private Size holeSize = HOLE_SIZE; - private PCBLayer layer = PCBLayer._1; - - @Override - public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, - IDrawingObserver drawingObserver) { - if (checkPointsClipped(g2d.getClip())) { - return; - } - double diameter = getSize().convertToPixels(); - double holeDiameter = getHoleSize().convertToPixels(); - g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR - : color); - drawingObserver.startTrackingContinuityArea(true); - if (type == Type.ROUND) { - g2d.fill(new Ellipse2D.Double(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter)); - } else { - g2d.fill(new Rectangle2D.Double(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter)); + private Size size = SIZE; + private Color color = COLOR; + private Point point = new Point(0, 0); + private Type type = Type.ROUND; + private Size holeSize = HOLE_SIZE; + private PCBLayer layer = PCBLayer._1; + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; } - drawingObserver.stopTrackingContinuityArea(); - if (getHoleSize().getValue() > 0) { - g2d.setColor(Constants.CANVAS_COLOR); - g2d.fill(new Ellipse2D.Double(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, holeDiameter)); - } - } - - @Override - public void drawIcon(Graphics2D g2d, int width, int height) { - int diameter = getClosestOdd(width / 2); - int holeDiameter = 5; - g2d.setColor(COLOR); - g2d.fillOval((width - diameter) / 2, (height - diameter) / 2, diameter, diameter); - g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval((width - holeDiameter) / 2, (height - holeDiameter) / 2, holeDiameter, holeDiameter); - } - - @EditableProperty(validatorClass = PositiveMeasureValidator.class) - public Size getSize() { - return size; - } - - public void setSize(Size size) { - this.size = size; - } - - @EditableProperty(name = "Hole") - public Size getHoleSize() { - if (holeSize == null) { - holeSize = HOLE_SIZE; - } - return holeSize; - } - - public void setHoleSize(Size holeSize) { - this.holeSize = holeSize; - } - - @EditableProperty - public PCBLayer getLayer() { - if (layer == null) { - layer = PCBLayer._1; - } - return layer; - } - - public void setLayer(PCBLayer layer) { - this.layer = layer; - } - - @Override - public String getName() { - return super.getName(); - } - - @Override - public int getControlPointCount() { - return 1; - } - - @Override - public boolean isControlPointSticky(int index) { - return true; - } - - @Override - public VisibilityPolicy getControlPointVisibilityPolicy(int index) { - return VisibilityPolicy.NEVER; - } - - @Override - public Point getControlPoint(int index) { - return point; - } - - @Override - public void setControlPoint(Point point, int index) { - this.point.setLocation(point); - } - - @EditableProperty(name = "Color") - public Color getLeadColor() { - return color; - } - - public void setLeadColor(Color color) { - this.color = color; - } - - @EditableProperty - public Type getType() { - return type; - } - - public void setType(Type type) { - this.type = type; - } - - @Override - public Void getValue() { - return null; - } - - @Override - public void setValue(Void value) {} - - public static enum Type { - ROUND, SQUARE; - - @Override - public String toString() { - return name().substring(0, 1) + name().substring(1).toLowerCase(); - } - } -} + double diameter = getSize().convertToPixels(); + double holeDiameter = getHoleSize().convertToPixels(); + g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : color); + drawingObserver.startTrackingContinuityArea(true); + if (type == Type.ROUND) { + g2d.fill(new Ellipse2D.Double(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter)); + } else if (type == Type.OVAL_HORIZONTAL) { + g2d.fill(new Ellipse2D.Double(point.x - diameter / 2, point.y - diameter * 3 / 8, diameter, diameter * 3 / 4)); + } else if (type == Type.OVAL_VERTICAL) { + g2d.fill(new Ellipse2D.Double(point.x - diameter * 3 / 8, point.y - diameter / 2, diameter * 3 / 4, diameter)); + } else { + g2d.fill(new Rectangle2D.Double(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter)); + } + drawingObserver.stopTrackingContinuityArea(); + if (getHoleSize().getValue() > 0) { + g2d.setColor(Constants.CANVAS_COLOR); + g2d.fill(new Ellipse2D.Double(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, holeDiameter)); + } + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int diameter = getClosestOdd(width / 2); + int holeDiameter = 5; + g2d.setColor(COLOR); + g2d.fillOval((width - diameter) / 2, (height - diameter) / 2, diameter, diameter); + g2d.setColor(Constants.CANVAS_COLOR); + g2d.fillOval((width - holeDiameter) / 2, (height - holeDiameter) / 2, holeDiameter, holeDiameter); + } + + @EditableProperty(validatorClass = PositiveMeasureValidator.class) + public Size getSize() { + return size; + } + + public void setSize(Size size) { + this.size = size; + } + + @EditableProperty(name = "Hole") + public Size getHoleSize() { + if (holeSize == null) { + holeSize = HOLE_SIZE; + } + return holeSize; + } + + public void setHoleSize(Size holeSize) { + this.holeSize = holeSize; + } + + @EditableProperty + public PCBLayer getLayer() { + if (layer == null) { + layer = PCBLayer._1; + } + return layer; + } + + public void setLayer(PCBLayer layer) { + this.layer = layer; + } + + @Override + public String getName() { + return super.getName(); + } + + @Override + public int getControlPointCount() { + return 1; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + @Override + public Point getControlPoint(int index) { + return point; + } + + @Override + public void setControlPoint(Point point, int index) { + this.point.setLocation(point); + } + + @EditableProperty(name = "Color") + public Color getLeadColor() { + return color; + } + + public void setLeadColor(Color color) { + this.color = color; + } + + @EditableProperty + public Type getType() { + return type; + } + + public void setType(Type type) { + this.type = type; + } + + @Override + public Void getValue() { + return null; + } + + @Override + public void setValue(Void value) {} + + public static enum Type { + ROUND, SQUARE, OVAL_HORIZONTAL, OVAL_VERTICAL; + + @Override + public String toString() { + return name().substring(0, 1) + name().substring(1).toLowerCase().replace('_', ' '); + } + } +} diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 5d13643cd8e524eeb5173c32792c053759612ed8..55d0d90b1c9b5bd6f708aa4f53a26f52e515ee00 100644 GIT binary patch delta 4259 zcmY*cd0da_7VmkUq@*;Nnd%~CiDWEe$zVcBLfS^SF4;+BYcOclA|=(YdbKZFRJ5wM zML(h_V=22K%gnfDn8q@ei^2V!bKcMWeC}W0bG~PN&Uv2qS6zv{x)OW!bek=-duVCt zYH8J~<9k|jSsictk=LqKw#))xA+rJqVPgSg_7%Xt*=PVWJ_*2!+W_q0wg4fluj=D% z!~aXHdciTyQj7o>cY+W>ImJXE{}OfpW3)#BtkNE?fhv`D90wfSUEK}nhdqA<_|f2R zVA~AOF~B6FLE3-~pGTnX@MSqhy)xa5xVDd@0DGCa1?n9ZRfrJ-XQF@mAUi}Ot95{? z-9xT|yT{P|NI$SPL;QP~1)9x=zXS6>zG~3{d@$xRnybf|AYL5rfjD47J2R|Rr?`}u zcG|gfEv+zZRgRHKmB~autR6Wz3vuX_aoC-={R@u%Ro*%;7HIrq$bXyT_vqKd7h-oMxFc1ofLKsdyg$w6PdpoN0=BbCwO-pXUg~*M|%dbqZ<#RqDfc0Wym& zL-sAj?r3c}vK-O6%vK-x<@FmdYe(Y^9&f_ww zqAnZ(f0gZ}>j1sl{{va|Iai(J8b)d;BNb?{@{Fed*JWgwGq$ z-tSc*+RwbXi+sV`Vcj(yRbOTmz{}x+HNv#z>AI{17)f8Bcd|L~#$^2v7KJ{^ zVeBVi0I$lVd6K7EQ@l=EV$4mYPesC5F5JsnF>rGF8#<+!Gl;eI9^9mmyz?f~PUJL}A+(+#0U1obx3giOgj)u8YE*zI+P` zZWeqN3h4v+Q50qm;a5?xwBdbFup7ZcX%XS_0MnV8z8$0{UuG&l9L*Pzp=9yTtHU&g zAlQ(p6i_2{v?%=Q^&9La;B-KMjQ6mXV$1n>@6LT3OEhOf5l9nUQ>O=toihC-=|_ebGUBEN#;$dh<0 zGJYxC4VjZ^96#1_dj|gknMYYX4TZ2=ehP(|`8*$mr-l4;?4nxOVB_ za%5~8`MEy8yt&DL`wWB!kNFEUUHgM4Amj6qJ3_+hav@`4A0hgou(z9tqTjv_t0xm? zX&y+ewp3vt21)nMi0<+%UGW|IW%m#QJIOZ?tB~nwB)XiS-23^$9zTv#Rtg>Taatqj z$(&v%THqH`-nU8I!l+eS#WsAIo!f;Q3L|$5Z|GKv3lQIE{s@wO3=mU6HwYB)2Z=N# zP>cuM9w?>*HU^4s0sjsZ)6gCyW&_3q3HYN(Y6}w3mt-9LKmWdxf3UCwQVPaDcBC5$ znuL(k;t(+l>_s7BF5ue`YGP8Tm<;+4p~4HWBUCH_9KDAyevg$~!t-xPTrUF6IDU45z01L{Q$X5yB7nUn0a>K$l420hpuUt4Of`bl1In?Y)c@OF{QKAbbFu4$zn^d{W;8zqc zRsb3%5N=HnzM$Vvp!#D~!WHyz1+S~9Z>vPYZHdAi>}`p{6VNDQNNlWXI$fggLJ;igLMASQYi0w1<$6?90sNm1}S(u zRr6Xj_3YEgKO>Fuy;OA9bgG-1PW;<+>c=&M>J??s+A`_*?h58+(lOs;QoF8M6qcVw zVV|;SEUwu!zC+oh|CLSUX5>)0j2ya^f8@|O#^%y%*qKY$;Jkw7hbV6IAQAW$!Rz`Mp8TofB zCqIvJ08yQ7OR1GJVBq}vJ>QIe3It4;v~IcwSs0%r28v)Nx@;K zhz~zSKMi+J(d8R+njYu=)506-{CS%0!SrT&Y{|{yU%Af=*|NPd!WhJ~>PE99wBG@vU@!?kT!W8_jV?8_n;08^!fIC*1xEiOLTK delta 4259 zcmY+GcUVP5Iug5eBzEiSF;nQe7#J8C z7(~^@cOAqd>*5{W%D;LCW(%0l`tztdeFz%`P}#?Tf3pz)Yd#*}!|egPxC0=B_0+%p z(d_>U>z{DUvlBz1rY9jpP)#uo^8ONzfRVc4fR(x-66Jbb90z{XxuFx7?{@ta@U7|J zU~M%!%YaGd{dBOUV-}`A2%BU?~J^R?uyZt$O~hUVqEQl6jO+sV?)ti%u3+D>!w~Je0<61( zo*DNX^<=#z?q;zv0QKvsX}BK$^ih~!m}!N2QK9k(Xu_|VV-e+hR~>Hk(9k1b8qKeC`6zpoaVD+%u>Qp1v3>L-2gdGG!sR?U@5~_bUEp~tf zyWLg3AJw=w%M&1!_F)z%G=IcCLE+^<_7MuULzpoN_QRMd3gbRu);h?VGlqF{5DLe# zDsvE4xUv+Cc{_{6pb+E1-eF9vH+zki=((&31@{HAsad4F*ppwsz5y52n=2b!nWY-B zi1}jD<0Whw#(uhjT|mKj4J$&S(vQWVFnv8sz~G-YvWaN1`HHAIkdM1g@!w9=nmV`ppJ|xDv19cwYi9kcJAl8_{aj^j$B3%68CjtVoi;yjaI0@=^! z61$JW!j8^XK9$= z^NPiz@cSEf9EC#0yQ6Si$7$)-M%)`M>r8k63LR#A1q$94+zy2;AMim8rp)<}4@1jk zYi@+XPd)i26g+JC3>5bD5=6f;!%~<{jg@+UPcoc?Au_s?l6_eWQS z3qOIbt**R)ikn`&@Nk$?u22>7HDmo7V;@*F<#0Q6!x#6>gtF!+yMt!>&wmHOQ3FF%XKIO z`|%8X=)KoNLFrnui3|8?QCDu`%h1xggF8X6(j|bmfu}uy2g6reT^!HtuuNzIAB@6L zJ@1Xe#YBDuKQadu-h!5OsoVoCC(=27tkp{y`~$Sy%i`%Mgze`iQJ9{~b5VGh&)>%> zIu&sh>ogqZ)n?HB>snrd7W;aBwg*^VT<5>N2g05E{0X|Q{lOE^;`^36L&1s?p<-cQ zA$p+@)k#FtZ(m#g2V-Z*2U4X|N=-#S<<@D@S)E}dKF7H1E<)fWxu#+zTDqEx4i{+m zdajrZKWnPf3So#bE~|xnGSYHtt!Rc{Om+7LaRakfZWdectJ}U+c%U$Br&tWrDschg zQ@9S_28fA3(?BsC=oBc%fPZVCmW&B(ZlDK;i&?-6;WTuQ2&%g|LaYP(FA-u5&@EDU z0dq7yixl%fcaNg_IZ@<)7De?ZMbq5z(NypEXfYk)NA4E>z=GX4PjU>Ud&STg*)f#% zNaMs<@+ZX7c(-Dy&B#6S9>_A$d&ENEZ<_A7SNs$7w7oRm)4gH|=sw>FUtr@mv`uz# zWZxA>`Y#%%#ETUWR}e3j1I-eMn-hc|=(iK7|0un12R&TlcY2z;e9qVNQNYohQ5 z+9Zi-z*R|NKCm%~w!KhNpI+BeC#1x?6LE#K^J1DPzpb%&El)mO>9@(JxV8C|UzRVAP1@h&Q-8NZ#Ee67{nGyI5al@*5F-ny{)Ga$ zZ_?kpQ0|wce<9VY)2J(=xLZ}Cr?R?8*h5fa5e@Z25pB+(!?d_9hiRyj8qJQ-5Q~mb z(Yzz_j>-H-N2sX7QL+aerTlY8+gbXZ2^wD|euR5wr4UzAgx%Q4DJK1TI!9;0>ltDt%O zDk!eDg6irjDQ;FJ`Sq1FSG&dmD(%l^mHagtSrzr4T}Ae!D$0|aj)y(4n(XVV$zEMe zeT{3#?^Q$geKm9m?$uDeQMGa&`L=e}(j~uCOK)>nomc?&*gDc5)X|%CsTa$@UQ{oZ z0?iso-_$_gs`du43hd6u=@VRhoZ>7_(BoTvg5Ge0M(ak>{WV_HIQS&l!%xyr!_AZQ zSVx|s$GPW}SPXssJVlRoY7>2Plbgi9!2Yy}=JjZ%yxeArd)-WrclK#wj>e}NUCxj_ q?F`NP;0*P1Zjt9A>&CaxH~*HV+qcSnl=f|{w14MXDX-UA;qhNwtFRpa diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index f7929d68145ef377e39e44640fdf87c69eb4960c..5a5987ffe6b879edac15da91fd3c2f6944bcbf9c 100644 GIT binary patch delta 12072 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 00:00:00.000 CET + + NEW_FEATURE + Oval solder pads, available as new types of regular "Solder Pad" components + IMPROVEMENT Faster click and popup menu response due to improved performance of selection area calculations, especially with bigger layouts