From 00c9744c40432c51713dfdef18f34a91fe7a751d Mon Sep 17 00:00:00 2001 From: bancika Date: Thu, 29 Dec 2016 13:00:45 +0100 Subject: [PATCH] added rounded path added tele pickup --- .../src/org/diylc/common/RoundedPath.java | 48 ++++++ diylc/diylc-library/lib/diylc-core.jar | Bin 230206 -> 230954 bytes .../components/guitar/SingleCoilPickup.java | 138 ++++++++++++++---- diylc/diylc-swing/lib/diylc-core.jar | Bin 230206 -> 230954 bytes diylc/diylc-swing/library/main.jar | Bin 353376 -> 355226 bytes diylc/diylc-swing/update.xml | 4 + 6 files changed, 161 insertions(+), 29 deletions(-) create mode 100644 diylc/diylc-core/src/org/diylc/common/RoundedPath.java diff --git a/diylc/diylc-core/src/org/diylc/common/RoundedPath.java b/diylc/diylc-core/src/org/diylc/common/RoundedPath.java new file mode 100644 index 00000000..6b7da6b2 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/common/RoundedPath.java @@ -0,0 +1,48 @@ +package org.diylc.common; + +import java.awt.geom.GeneralPath; + +public class RoundedPath { + + private GeneralPath path; + + private double prevX = Double.NaN; + private double prevY = Double.NaN; + private double x = Double.NaN; + private double y = Double.NaN; + + private double radius; + + public RoundedPath(double radius) { + this.radius = radius; + path = new GeneralPath(); + } + + public final void moveTo(double x, double y) { + path.moveTo(x, y); + this.x = x; + this.y = y; + this.prevX = Double.NaN; + this.prevY = Double.NaN; + } + + public final void lineTo(double x, double y) { + if (Double.isNaN(prevX)) { + double theta = Math.atan2(y - this.y, x - this.x); + double r = Math.sqrt((y - this.y) * (y - this.y) + (x - this.x) * (x - this.x)); + path.lineTo(this.x + Math.cos(theta) * (r - radius), this.y + Math.sin(theta) * (r - radius)); + } else { + double theta = Math.atan2(y - this.y, x - this.x); + path.curveTo(this.x, this.y, this.x, this.y, this.x + Math.cos(theta) * radius, this.y + Math.sin(theta) * radius); + } + + this.prevX = this.x; + this.prevY = this.y; + this.x = x; + this.y = y; + } + + public GeneralPath getPath() { + return path; + } +} diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index dcfe4735eb5e3689277f983827b63ee89d7bec77..427ce0792cf22955d0cd1e9c93fdcbf2a86fbe30 100644 GIT binary patch delta 9373 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 NEHMg#(0-7HADLrp6cb5x^fekijpoJt z?~0AQ=yUjd^-B53t%x)K#*$|I+m$-VcMLzbQM7guUtW8MwB}zksRjQAN*(L02A?pN z*Gu~RzjqM_R-;22%T)rnCHe6RLyF(7w4E6chig9jIkDn+$@Q~n70)|q05^P2Tk)@p zj*s#!kJ4Exap7*GySlvQq~U%3-EQ=OS8O%@lX4&aNgZn@OB&5#9gW6GKJIME)`n7} z^5f?D$k5X&69uh}8|9|A?41#*aoocNx!n0OubJ;c2p1N+I&neX>GqBTJKX=~ag?v~ z9*Zi5KGrBS^NmGen%{mDI<#7b4$idcje<@4Y7`7QF%&j;9)^N`*J@<032ufhvW&m* z^*CrzCA7$kx9CtGYE%9pY_epeWVK&;)_}H9Zz}IDw~$Tx*q4_^^hC11dw*@n<6V+q zjL5n{Z&3Jp@P#J4YV7D;W?XR0`3I{kXPWD9#Jiw5B7KW&uqoqawGifWBox-pGeTkK zf}gk`k6L^{v6kJJT;eQmmc*b&L~)8xl_?)NT1dRJ2RP<$s3scC-&CV%FSps}RBpW85_OuD-bQNO zUCtQ0XIUv1^M>Aued**YBPg(=BDa*XmopTuMw z+6Gx4p(_U+a4H{n;xuY@Jar4*S)InwRDSm7;~2@3^M9dE?!^O$bh)wxn_c;1itlP@ zNTDPj+hQe~-nCejO!dm0f8B^=71zBR^Uz-YUWOc-?j6$MIj{>H5LpC)T!7)xT;6@p zxqRs(98|LRlTF;H>d7(6hsxG<{YEK6>5lAt+PVDT^SQ_sQvEv)6VIB>JTPq)A!cY| z(sx6`-(d0=bJZhGS_56u1XXPGhzCl621E~~aARVK(m*p}tHTrZuIWQ_Cm^ts*m^I? zhSj7{J?$DR;>CSy&)5*HDGzSr1v8rw(2+yf-RZ34oJ1+zAA(jItSty23sKJ`h=d>(--Db-$uo@Xz{c(MD?XVBF8j-EYHYQyBS<=G zjEW+~X#YNjbVICb9C?pe=XkOXrJD&PvJv;_J(SEtPK!eO;LX6fo~`qeY*}6^H22PM zvI|+3rIL?myL2pxK^&%g18%@|DnA%Otk$6|rGc z#!+MKFW=WTc;YVd7-@#?sqO0VKal`*vTGlihLX=A5@5;`lU7N(^MyuRc9k5*6g_hL zIwAp56vx^GL5f<9r;W91Zje;8ZG4*?LFvq0Vvf@7`y?KvPLD`mlomZ9Gf*;kPKKkD zRZUz_TJef_@wuZt`VVP|*vq%1F-q@0kSvrkK9O*g4oK4XD2-_(T}G*!zGRP5l95z^ z(p^(&CQ3ssrF|$l*h()@GIEssQHpSuc47n{T%;kGwPbfG8`lrrQ`WY#VaCrQnCN$t zs4=T}Maw_z7h^41_Q%QYuQ?wfEDxGNwZNh>m-ds zDc>I)^T{QB+riclQr?)Q^nl5w6CjB^c?L1%~W65 zbkXnid}^t6SS6KMat-O;?eqZ_aL8z-(RiRn%K~bueX~Ovifv3hB2{CIQO6|8H(71m zB?F+ zz#@WZH!ds+!ZR2<5=1+2B)kW8U}nLTpD0<^VA_?#(}QUc7mfr|e=d9orlIu~L%P>n zIIzv#sVlGhxjUZqSd$(?0RA4lYH1G|&V`#jXdf>4^b}F0_oQ7oQreUD=K>9($y^v- zE1V3W132OsN~5`u5h@4|gwoy|X%a>wxey;lBe+l!CI~-<(O8be^b+P9dkN%qFTvA2 zTm-f}Tv$B`r(xWxeFV+s!j1?U#|088c=|;Ot4+1Se`~8kdW$fY_ZGe$_NM)~`Jz6M z_V_;3iovnZ-9fw* zms5(oSYAJos9B?}dp?6i6#%!piuYszJ045h@Rt4BUF%x`THXz`UKYvQ<}~w-i6oLG zRqkYZ8YSFc-v1ME5e&k?z)eN_&usaJc^<4+mklMgTOs887X z5nkJJfNLIK-3~u+K+ni1{D@>jkg1@ zr4XN=ifh9X78OTrnL!+N=VWc-z*e_dLHQk#O;-SeZ`tZN>ch#F9$LD81CVuxCfKXU zOxMb1);qFKaUw9|{$Toey}V&l3sy5jWZ=d46*ku)SA!uIb-SuJu!8=y9e1*4Z~s*f zKx-*zwNN=RERn0XHD%Sn%>y`llj5lx_g)YWj(m4<@L)W3 z;@~X>)G1Ry`Nke|9v0`lJbQAiEpQq)nC3O8eYxC%ZR;;Gl~`(fyd1onLL}-%VOTkL zczz(|w}19xAUI6KplH;4BiYl(@N5PgXX8DQKQ675AuzqlxZgd}* z0g1Q}%bu@|wBQ>#tc{Apq+26!DElL=EX4T^fs=YC+9hKTdPN5xa~PYPhk z{Dz95Qg`2k{`OG0@|W1|q12AS71W5eND;mc#On@u0J?V@=x69E`fd3RQL}k-<{8j9 z2}Qk(tYl?FsXcQ{5nbFl1)^GSfUd@;P#fOy^A&WLv4UE%11WfzV;2q(PeNekBDrnxWb9Vbp?mhxOUF+3}#( zw}EQ5H>w8ulE&=!VPXV49|m!1{IJStIJM#|AJ67oJ_QWNps0I^v_{p+wxkIgKU}cn z4hNQ+c38D@IJM)MIjf)*oe*8>PxMT_*zTCw2++9hj~c-vL>nHYIk}mGXQKvf7!`o3 zb3v86Sfdc^3_|q$2r*r%dN0461;*o`IMro~uev=^H9YL|fl_zZ2Yq#OeR`q(u#wb? zJIomg4i85nIyjE#v1L(2hh0wMlq~5RMAg16Q&H7+v^f2D9Sy$Pr6Kw$o#-`~4((UA&3OerUqDfJ z*Ru@83~wQo3Xkms1%ORxv{*wvn9qt*4h+g0gSzFbCZTG`7;!*O8UqA=(=Z>4#)w8o zYCT#;gK-2D^?DaN6IIt0LF#Ud5d)@LVY!lDS7ppvjTN&da4b}n%)+Yib74eIudQ03 zRK?80Du;!i57tvh*WA_z=ekhbRH+PGSf}5FnWTxnE)3mQ;Ru@xs8@iU@}D~Sn9$PlZ-(+8Q4<^pda6!p5__%iCR&JbtIx(6^&b*yWzvUZ)j zhN{Y&7<-mM`6C+pq<9_tTU`~NW&4Z=)cFpgGslZ%eaEQ*&+UQN3W}SGyZwJq_0xS~ z)?mK9Iqp_w4JKw#)I)yBA9ZF1%q5eW@$Q&n_H&BHYdG@e$YhV~WAks(>NV_2!O{x1giB8xU* zTeHM`JgQWMy{@Zj$`?4334q4FL$uojv33qt&{H1~UG|AIX^@&D+8>urgJy1lD~x() zHq)>+6JhVaHbG2_XA0Rdil}3@m=MmK;7*&U7i#2qn$wl`_@TH_y zoz`-FRLwP#^x5HTk%Y=@aM;Nht3GCnF;JR(Z`3Sc$b+Ju$XYW+)syFA&_uAEV5I<7 ztedUWu;uBg)$p>f(bPcT>Tx>44qdi#lnmJ2i6WX8z(_W*;|ih6Bx=jubeRNh`Z}S0 zQ&*|sTEAjtwoW&2LN6(3XMaS=RN>5iDxkRmtY9i!y`!g!P40a~O+g$u zQue8)s(Ee`tf=z8oU&bt?UtTs`^Qu$+vu-??^rG}+TL>l_f>Gahe~Ux%mpNjJn@or11`bqE zduBRFa;kq{D2?oVH6H?72Bkw?fXYgomr$o~!iFYE#`X7`jFqFSTEf%sB4|`cl~Lcs z&x{;rh(`y15Tq;VbyfPTEK`ENnb$sYRPEi|^a}9&3&mf>_a@^rqlYu72cJ_0C>7ed|(A&Kfn^<>9qz{T8UB6QQanPNKqrqJ0M2K<`gdP){~KR}Aq9Uv+(Z3I@qW$h`VBpu<#DJqxNl%Ksx>7jH^d3|{(OILikxr*_)}4A1*`hwoDW@a}^G&My#$(NYE8 ze7GLAWDoPHIrmy}h7?H%8mq52kV$fT?kgAxefm+Lf}vM J0gx-r{{X#MsP6y( diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java index 775c90fb..3a3e149d 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java @@ -5,12 +5,12 @@ import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Point; -import java.awt.Polygon; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -18,6 +18,7 @@ import org.diylc.common.HorizontalAlignment; import org.diylc.common.IPlugInPort; import org.diylc.common.ObjectCache; import org.diylc.common.Orientation; +import org.diylc.common.RoundedPath; import org.diylc.common.VerticalAlignment; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; @@ -33,10 +34,10 @@ import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; -@ComponentDescriptor(name = "Strat Single Coil Pickup", category = "Guitar", author = "Branislav Stojkovic", - description = "Strat-style single coil guitar pickup", stretchable = false, zOrder = IDIYComponent.COMPONENT, - instanceNamePrefix = "PKP", autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, - keywordTag = "Guitar Wiring Diagram") +@ComponentDescriptor(name = "Single Coil Pickup", category = "Guitar", author = "Branislav Stojkovic", + description = "Single coil guitar pickup, both Strat and Tele style", stretchable = false, + zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "PKP", autoEdit = false, + keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "Guitar Wiring Diagram") public class SingleCoilPickup extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; @@ -46,9 +47,19 @@ public class SingleCoilPickup extends AbstractTransparentComponent { private static Color POINT_COLOR = Color.lightGray; private static Size WIDTH = new Size(15.5d, SizeUnit.mm); private static Size LENGTH = new Size(83d, SizeUnit.mm); - private static Size INNER_LENGTH = new Size(70d, SizeUnit.mm); - private static Size LIP_WIDTH = new Size(5d, SizeUnit.mm); - private static Size LIP_LENGTH = new Size(20d, SizeUnit.mm); + private static Size BASE_RADIUS = new Size(0.15d, SizeUnit.in); + + // strat-specific + private static Size STRAT_LIP_WIDTH = new Size(5d, SizeUnit.mm); + private static Size STRAT_LIP_LENGTH = new Size(20d, SizeUnit.mm); + private static Size STRAT_INNER_LENGTH = new Size(70d, SizeUnit.mm); + + // tele-specific + private static Size TELE_BASE_WIDTH = new Size(1.5d, SizeUnit.in); + private static Size TELE_LIP_LENGTH = new Size(1.735d, SizeUnit.in); + private static Size TELE_LENGTH = new Size(2.87d, SizeUnit.in); + private static Size TELE_HOLE_SPACING = new Size(1.135d, SizeUnit.in); + private static Size POINT_SIZE = new Size(3d, SizeUnit.mm); private static Size HOLE_SIZE = new Size(2d, SizeUnit.mm); private static Size HOLE_MARGIN = new Size(4d, SizeUnit.mm); @@ -61,6 +72,7 @@ public class SingleCoilPickup extends AbstractTransparentComponent { private Orientation orientation = Orientation.DEFAULT; private Color color = BODY_COLOR; private Color baseColor = BASE_COLOR; + private SingleCoilType type = SingleCoilType.Stratocaster; @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, @@ -77,7 +89,10 @@ public class SingleCoilPickup extends AbstractTransparentComponent { g2d.setColor(getBaseColor()); g2d.fill(body[4]); g2d.setColor(getColor()); - g2d.fill(body[0]); + if (body[0] == null) + g2d.fill(body[3]); + else + g2d.fill(body[0]); g2d.setColor(POINT_COLOR); g2d.fill(body[1]); @@ -115,7 +130,8 @@ public class SingleCoilPickup extends AbstractTransparentComponent { } g2d.setColor(finalBorderColor); - g2d.draw(body[0]); + if (body[0] != null) + g2d.draw(body[0]); g2d.draw(body[3]); if (componentState != ComponentState.DRAGGING && !outlineMode) { @@ -139,7 +155,7 @@ public class SingleCoilPickup extends AbstractTransparentComponent { } g2d.setColor(finalLabelColor); g2d.setFont(LABEL_FONT); - Rectangle bounds = body[0].getBounds(); + Rectangle bounds = body[3].getBounds(); drawCenteredText(g2d, value, bounds.x + bounds.width / 2, bounds.y + bounds.height / 2, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } @@ -153,26 +169,69 @@ public class SingleCoilPickup extends AbstractTransparentComponent { int y = controlPoint.y; int width = (int) WIDTH.convertToPixels(); int length = (int) LENGTH.convertToPixels(); - int innerLength = (int) INNER_LENGTH.convertToPixels(); - int lipWidth = (int) LIP_WIDTH.convertToPixels(); - int lipLength = (int) LIP_LENGTH.convertToPixels(); + int stratInnerLength = (int) STRAT_INNER_LENGTH.convertToPixels(); + int teleLength = (int) TELE_LENGTH.convertToPixels(); + int teleBaseWidth = (int) TELE_BASE_WIDTH.convertToPixels(); + int teleLipLength = getClosestOdd(TELE_LIP_LENGTH.convertToPixels()); + int teleHoleSpacing = (int) TELE_HOLE_SPACING.convertToPixels(); + int coilLength = getType() == SingleCoilType.Stratocaster ? stratInnerLength : teleLength; + int lipWidth = (int) STRAT_LIP_WIDTH.convertToPixels(); + int lipLength = (int) STRAT_LIP_LENGTH.convertToPixels(); int pointSize = getClosestOdd(POINT_SIZE.convertToPixels()); int holeSize = getClosestOdd(HOLE_SIZE.convertToPixels()); int holeMargin = getClosestOdd(HOLE_MARGIN.convertToPixels()); + int baseRadius = (int) BASE_RADIUS.convertToPixels(); + int coilOffset = 0; - Area mainArea = - new Area(new RoundRectangle2D.Double(x - length / 2, y - lipWidth / 2 - width, length, width, width, width)); - // Cutout holes - mainArea.subtract(new Area(new Ellipse2D.Double(x - length / 2 + holeMargin - holeSize / 2, y - lipWidth / 2 - - width / 2 - holeSize / 2, holeSize, holeSize))); - mainArea.subtract(new Area(new Ellipse2D.Double(x + length / 2 - holeMargin - holeSize / 2, y - lipWidth / 2 - - width / 2 - holeSize / 2, holeSize, holeSize))); + if (getType() == SingleCoilType.Stratocaster) { + coilOffset = lipWidth / 2; - body[0] = mainArea; - body[4] = - new Area(new Polygon(new int[] {(int) (x - length / 2 + width * 0.47), (int) (x + length / 2 - width * 0.47), - x + lipLength / 2, x - lipLength / 2}, new int[] {y - lipWidth / 2, y - lipWidth / 2, y + lipWidth / 2, - y + lipWidth / 2}, 4)); + Area mainArea = + new Area(new RoundRectangle2D.Double(x - length / 2, y - lipWidth / 2 - width, length, width, width, width)); + // Cutout holes + mainArea.subtract(new Area(new Ellipse2D.Double(x - length / 2 + holeMargin - holeSize / 2, y - lipWidth / 2 + - width / 2 - holeSize / 2, holeSize, holeSize))); + mainArea.subtract(new Area(new Ellipse2D.Double(x + length / 2 - holeMargin - holeSize / 2, y - lipWidth / 2 + - width / 2 - holeSize / 2, holeSize, holeSize))); + + body[0] = mainArea; + RoundedPath basePath = new RoundedPath(baseRadius); + basePath.moveTo(x, y + lipWidth / 2); + basePath.lineTo(x + lipLength / 2, y + lipWidth / 2); + basePath.lineTo(x + length / 2, y - lipWidth); + basePath.lineTo(x - length / 2, y - lipWidth); + basePath.lineTo(x - lipLength / 2, y + lipWidth / 2); + basePath.lineTo(x, y + lipWidth / 2); + + Area base = new Area(basePath.getPath()); + base.subtract(mainArea); + + body[4] = base; + } else if (getType() == SingleCoilType.Telecaster) { + coilOffset = (teleBaseWidth - width) / 4; + + RoundedPath basePath = new RoundedPath(baseRadius); + basePath.moveTo(x, y + coilOffset); + basePath.lineTo(x + teleLipLength / 2, y + coilOffset); + basePath.lineTo(x + coilLength * 0.53, y - coilOffset - width / 2); + basePath.lineTo(x + coilLength / 2 - width * 0.45, y - coilOffset - width); + basePath.lineTo(x, y - 3 * coilOffset - width); + basePath.lineTo(x - coilLength / 2 + width * 0.45, y - coilOffset - width); + basePath.lineTo(x - coilLength * 0.53, y - coilOffset - width / 2); + basePath.lineTo(x - teleLipLength / 2, y + coilOffset); + basePath.lineTo(x, y + coilOffset); + + Area base = new Area(basePath.getPath()); + base.intersect(new Area(new Rectangle2D.Double(x - coilLength * 0.48, y - teleBaseWidth, coilLength * 0.96, + teleBaseWidth * 2))); + + // Cutout holes + base.subtract(new Area(new Ellipse2D.Double(x - teleLipLength / 2 - holeSize / 2, y, holeSize, holeSize))); + base.subtract(new Area(new Ellipse2D.Double(x + teleLipLength / 2 - holeSize / 2, y, holeSize, holeSize))); + base.subtract(new Area(new Ellipse2D.Double(x - holeSize / 2, y - teleHoleSpacing, holeSize, holeSize))); + + body[4] = base; + } body[1] = new Area(new Ellipse2D.Double(x - pointSize / 2, y - pointSize / 2, pointSize, pointSize)); @@ -182,14 +241,17 @@ public class SingleCoilPickup extends AbstractTransparentComponent { Area poleArea = new Area(); for (int i = 0; i < 6; i++) { Ellipse2D pole = - new Ellipse2D.Double(x - length / 2 + poleMargin + i * poleSpacing - poleSize / 2, y - lipWidth / 2 - width + new Ellipse2D.Double(x - length / 2 + poleMargin + i * poleSpacing - poleSize / 2, y - coilOffset - width / 2 - poleSize / 2, poleSize, poleSize); poleArea.add(new Area(pole)); } body[2] = poleArea; body[3] = - new RoundRectangle2D.Double(x - innerLength / 2, y - lipWidth / 2 - width, innerLength, width, width, width); + new Area(new RoundRectangle2D.Double(x - coilLength / 2, y - coilOffset - width, coilLength, width, width, + width)); + + ((Area) body[4]).subtract((Area) body[3]); // Rotate if needed if (orientation != Orientation.DEFAULT) { @@ -208,7 +270,8 @@ public class SingleCoilPickup extends AbstractTransparentComponent { AffineTransform rotation = AffineTransform.getRotateInstance(theta, x, y); for (Shape shape : body) { Area area = (Area) shape; - area.transform(rotation); + if (area != null) + area.transform(rotation); } } } @@ -244,6 +307,19 @@ public class SingleCoilPickup extends AbstractTransparentComponent { } } + @EditableProperty + public SingleCoilType getType() { + if (type == null) + type = SingleCoilType.Stratocaster; + return type; + } + + public void setType(SingleCoilType type) { + this.type = type; + // Invalidate the body + body = null; + } + @Override public int getControlPointCount() { return 1; @@ -312,4 +388,8 @@ public class SingleCoilPickup extends AbstractTransparentComponent { public void setBaseColor(Color baseColor) { this.baseColor = baseColor; } + + public enum SingleCoilType { + Stratocaster, Telecaster; + } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index dcfe4735eb5e3689277f983827b63ee89d7bec77..427ce0792cf22955d0cd1e9c93fdcbf2a86fbe30 100644 GIT binary patch delta 9373 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 NEHMg#(0-7HADLrp6cb5x^fekijpoJt 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 J0gx-r{{X#MsP6y( diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 66b408e872ecd099aa55683b174cfcbc9abd83da..a26b3413cc9c3f1193def0f80999f6323809806b 100644 GIT binary patch delta 13520 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 delta 11681 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 diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 0d9a25d4..b7edebe6 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1466,6 +1466,10 @@ NEW_FEATURE P-90 pickup in both "dog ear" and "soap bar" variations added + + NEW_FEATURE + Telecaster bridge pickup added as a variation of single coil pickup + NEW_FEATURE Mini humbucker pickup added as a variation of Humbucker pickup