mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-11 01:32:08 +10:00
Feature/freeway (#876)
* freeway initial * freeway improvements * handle circuits with one path * freeway improvements
This commit is contained in:
@@ -20,6 +20,10 @@ public class TreeAsciiUtil {
|
||||
|
||||
public static List<String> concatenateMultiLineParallel(List<List<String>> elementLines) {
|
||||
|
||||
if (elementLines.size() <= 1) {
|
||||
return elementLines.stream().findFirst().orElse(new ArrayList<>());
|
||||
}
|
||||
|
||||
List<Integer> lineCounts = elementLines.stream()
|
||||
.map(lines -> lines.size())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,446 @@
|
||||
/*
|
||||
*
|
||||
* 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
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.diylc.components.guitar;
|
||||
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.Color;
|
||||
import java.awt.Composite;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.diylc.appframework.miscutils.ConfigurationManager;
|
||||
import org.diylc.common.IPlugInPort;
|
||||
import org.diylc.common.ObjectCache;
|
||||
import org.diylc.common.Orientation;
|
||||
import org.diylc.components.AbstractTransparentComponent;
|
||||
import org.diylc.components.transform.Freeway3x3_03Transformer;
|
||||
import org.diylc.core.ComponentState;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.IDrawingObserver;
|
||||
import org.diylc.core.ISwitch;
|
||||
import org.diylc.core.Project;
|
||||
import org.diylc.core.Theme;
|
||||
import org.diylc.core.VisibilityPolicy;
|
||||
import org.diylc.core.annotations.ComponentDescriptor;
|
||||
import org.diylc.core.annotations.EditableProperty;
|
||||
import org.diylc.core.annotations.KeywordPolicy;
|
||||
import org.diylc.core.measures.Size;
|
||||
import org.diylc.core.measures.SizeUnit;
|
||||
import org.diylc.utils.Constants;
|
||||
import com.kitfox.svg.SVGDiagram;
|
||||
import com.kitfox.svg.SVGElement;
|
||||
import com.kitfox.svg.SVGUniverse;
|
||||
import com.kitfox.svg.ShapeElement;
|
||||
|
||||
@ComponentDescriptor(name = "Freeway 3X3-03 Toggle", category = "Guitar",
|
||||
author = "Branislav Stojkovic", description = "Freeway 3X3-03 Toggle Switch",
|
||||
zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "SW",
|
||||
keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "Guitar Wiring Diagram",
|
||||
transformer = Freeway3x3_03Transformer.class, enableCache = true)
|
||||
public class Freeway3x3_03 extends AbstractTransparentComponent<Void> implements ISwitch {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(Freeway3x3_03.class);
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private static Color BASE_COLOR = FR4_COLOR;// Color.DARK_GRAY;
|
||||
private static Color PAD_COLOR = COPPER_COLOR;
|
||||
private static Color LABEL_COLOR = Color.WHITE;
|
||||
private static Color CASE_COLOR = METAL_COLOR;
|
||||
|
||||
private static final double[] X_OFFSETS =
|
||||
new double[] {9, 15, 21, 21, 21, 21, 21, 21, 12, 3, 3, 3, 3, 3, 3};
|
||||
private static final double[] Y_OFFSETS =
|
||||
new double[] {3, 3, 5, 9.5, 14, 18.5, 23, 27.5, 30, 27.5, 23, 18.5, 14, 9.5, 5};
|
||||
|
||||
private static final String[] PAD_NAMES = new String[] {"CA", "CB", "B-B1", "B-B2", "B-M1",
|
||||
"B-M2", "B-N2", "B-N1", "GND", "A-12", "A-N2", "A-M2", "A-M1", "A-B2", "A-B1"};
|
||||
|
||||
private static final AffineTransform SCALE_TX = AffineTransform.getScaleInstance(0.615d, 0.615d);
|
||||
|
||||
private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)};
|
||||
|
||||
private Orientation orientation = Orientation.DEFAULT;
|
||||
|
||||
private transient SVGDiagram svgDiagram;
|
||||
private transient List<Shape> pads;
|
||||
private transient List<Shape> labels;
|
||||
private transient Shape base;
|
||||
private transient Shape caseShape;
|
||||
private transient double[] xOffsetsPx;
|
||||
private transient double[] yOffsetsPx;
|
||||
|
||||
public Freeway3x3_03() {
|
||||
super();
|
||||
updateControlPoints();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getControlPointNodeName(int index) {
|
||||
return PAD_NAMES[index];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode,
|
||||
Project project, IDrawingObserver drawingObserver) {
|
||||
|
||||
Shape base = getBase();
|
||||
Rectangle2D bounds2d = base.getBounds2D();
|
||||
|
||||
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
|
||||
|
||||
Point2D point = getControlPoint(0);
|
||||
|
||||
double x = point.getX();
|
||||
double y = point.getY();
|
||||
|
||||
double[] xOffsets = getXOffsetsPx();
|
||||
double[] yOffsets = getYOffsetsPx();
|
||||
|
||||
|
||||
|
||||
Rectangle2D rect = new Rectangle2D.Double(x - xOffsets[0], y - yOffsets[0], bounds2d.getWidth(),
|
||||
bounds2d.getHeight());
|
||||
|
||||
if (getOrientation() != Orientation.DEFAULT) {
|
||||
double theta = orientation.toRadians();
|
||||
AffineTransform tx = AffineTransform.getRotateInstance(theta, x, y);
|
||||
rect = tx.createTransformedShape(rect).getBounds2D();
|
||||
}
|
||||
|
||||
Shape clip = g2d.getClip().getBounds();
|
||||
if (!clip.intersects(rect)) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<Shape> pads = getPads();
|
||||
List<Shape> labels = getLabels();
|
||||
Shape caseShape = getCase();
|
||||
|
||||
Composite oldComposite = g2d.getComposite();
|
||||
if (alpha < MAX_ALPHA) {
|
||||
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
|
||||
}
|
||||
|
||||
if (getOrientation() != Orientation.DEFAULT) {
|
||||
double theta = orientation.toRadians();
|
||||
g2d.rotate(theta, x, y);
|
||||
}
|
||||
|
||||
g2d.translate(x - xOffsets[0], y - yOffsets[0]);
|
||||
|
||||
Color finalBorderColor;
|
||||
if (outlineMode) {
|
||||
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY,
|
||||
Constants.DEFAULT_THEME);
|
||||
finalBorderColor =
|
||||
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING
|
||||
? SELECTION_COLOR
|
||||
: theme.getOutlineColor();
|
||||
} else {
|
||||
finalBorderColor =
|
||||
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING
|
||||
? SELECTION_COLOR
|
||||
: BASE_COLOR.darker();
|
||||
}
|
||||
|
||||
drawingObserver.startTracking();
|
||||
g2d.setColor(BASE_COLOR);
|
||||
g2d.fill(base);
|
||||
drawingObserver.stopTracking();
|
||||
g2d.setColor(finalBorderColor);
|
||||
g2d.draw(base);
|
||||
|
||||
drawingObserver.startTrackingContinuityArea(true);
|
||||
g2d.setColor(PAD_COLOR);
|
||||
for (Shape pad : pads) {
|
||||
g2d.fill(pad);
|
||||
}
|
||||
drawingObserver.stopTrackingContinuityArea();
|
||||
|
||||
g2d.setColor(PAD_COLOR.darker());
|
||||
for (Shape pad : pads) {
|
||||
g2d.draw(pad);
|
||||
}
|
||||
|
||||
g2d.setColor(LABEL_COLOR);
|
||||
for (Shape l : labels) {
|
||||
g2d.fill(l);
|
||||
}
|
||||
|
||||
g2d.setColor(CASE_COLOR);
|
||||
g2d.fill(caseShape);
|
||||
|
||||
g2d.setColor(CASE_COLOR.darker());
|
||||
g2d.draw(caseShape);
|
||||
|
||||
g2d.setComposite(oldComposite);
|
||||
}
|
||||
|
||||
public double[] getXOffsetsPx() {
|
||||
if (xOffsetsPx == null) {
|
||||
xOffsetsPx = new double[X_OFFSETS.length];
|
||||
for (int i = 0; i < X_OFFSETS.length; i++) {
|
||||
xOffsetsPx[i] = new Size(X_OFFSETS[i], SizeUnit.mm).convertToPixels();
|
||||
}
|
||||
}
|
||||
return xOffsetsPx;
|
||||
}
|
||||
|
||||
public double[] getYOffsetsPx() {
|
||||
if (yOffsetsPx == null) {
|
||||
yOffsetsPx = new double[Y_OFFSETS.length];
|
||||
for (int i = 0; i < Y_OFFSETS.length; i++) {
|
||||
yOffsetsPx[i] = new Size(Y_OFFSETS[i], SizeUnit.mm).convertToPixels();
|
||||
}
|
||||
}
|
||||
return yOffsetsPx;
|
||||
}
|
||||
|
||||
private transient BufferedImage iconImage;
|
||||
|
||||
@Override
|
||||
public void drawIcon(Graphics2D g2d, int width, int height) {
|
||||
if (iconImage == null) {
|
||||
iconImage = new BufferedImage(width - 1, height - 1, BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics2D iconG2d = iconImage.createGraphics();
|
||||
iconG2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
iconG2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
||||
Shape base = getBase();
|
||||
List<Shape> pads = getPads();
|
||||
List<Shape> labels = getLabels();
|
||||
double scale = 1d * width / base.getBounds2D().getWidth() * 2.5;
|
||||
iconG2d.scale(scale, scale);
|
||||
iconG2d.setColor(BASE_COLOR);
|
||||
iconG2d.fill(base);
|
||||
iconG2d.setColor(BASE_COLOR.darker());
|
||||
iconG2d.draw(base);
|
||||
iconG2d.setColor(PAD_COLOR);
|
||||
pads.stream().forEach(p -> iconG2d.fill(p));
|
||||
iconG2d.setColor(LABEL_COLOR);
|
||||
labels.stream().forEach(l -> iconG2d.fill(l));
|
||||
iconG2d.setColor(CASE_COLOR);
|
||||
iconG2d.fill(getCase());
|
||||
}
|
||||
g2d.drawImage(iconImage, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getControlPointCount() {
|
||||
return X_OFFSETS.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Point2D getControlPoint(int index) {
|
||||
return controlPoints[index];
|
||||
}
|
||||
|
||||
private void updateControlPoints() {
|
||||
Point2D firstPoint = controlPoints[0];
|
||||
controlPoints = new Point2D[X_OFFSETS.length];
|
||||
controlPoints[0] = firstPoint;
|
||||
double[] xOffsetsPx = getXOffsetsPx();
|
||||
double[] yOffsetsPx = getYOffsetsPx();
|
||||
// Update control points.
|
||||
double theta = orientation.toRadians();
|
||||
AffineTransform tx =
|
||||
AffineTransform.getRotateInstance(theta, firstPoint.getX(), firstPoint.getY());
|
||||
for (int i = 1; i < controlPoints.length; i++) {
|
||||
controlPoints[i] = new Point2D.Double(firstPoint.getX() + (xOffsetsPx[i] - xOffsetsPx[0]),
|
||||
firstPoint.getY() + (yOffsetsPx[i] - yOffsetsPx[0]));
|
||||
tx.transform(controlPoints[i], controlPoints[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public SVGDiagram getSvgDiagram() {
|
||||
if (svgDiagram == null) {
|
||||
try {
|
||||
byte[] data =
|
||||
IOUtils.toByteArray(Freeway3x3_03.class.getResourceAsStream("freeway_3x3-03.svg"));
|
||||
ByteArrayInputStream bis = new ByteArrayInputStream(data);
|
||||
SVGUniverse universe = new SVGUniverse();
|
||||
URI url = universe.loadSVG(bis,
|
||||
"SVG-" + Integer.toHexString(new Random(System.currentTimeMillis()).nextInt()));
|
||||
svgDiagram = universe.getDiagram(url);
|
||||
svgDiagram.setIgnoringClipHeuristic(true);
|
||||
} catch (IOException e) {
|
||||
LOG.error("Error loading SVG", e);
|
||||
}
|
||||
}
|
||||
return svgDiagram;
|
||||
}
|
||||
|
||||
public List<Shape> getPads() {
|
||||
if (pads == null) {
|
||||
SVGDiagram svg = getSvgDiagram();
|
||||
com.kitfox.svg.Group group = (com.kitfox.svg.Group) svg.getElement("pads");
|
||||
pads = new ArrayList<Shape>();
|
||||
for (int i = 0; i < group.getNumChildren(); i++) {
|
||||
SVGElement child = group.getChild(i);
|
||||
if (child instanceof ShapeElement) {
|
||||
ShapeElement shapeElement = (ShapeElement) child;
|
||||
pads.add(SCALE_TX.createTransformedShape(shapeElement.getShape()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return pads;
|
||||
}
|
||||
|
||||
public List<Shape> getLabels() {
|
||||
if (labels == null) {
|
||||
SVGDiagram svg = getSvgDiagram();
|
||||
com.kitfox.svg.Group group = (com.kitfox.svg.Group) svg.getElement("labels");
|
||||
labels = new ArrayList<Shape>();
|
||||
for (int i = 0; i < group.getNumChildren(); i++) {
|
||||
SVGElement child = group.getChild(i);
|
||||
if (child instanceof ShapeElement) {
|
||||
ShapeElement shapeElement = (ShapeElement) child;
|
||||
labels.add(SCALE_TX.createTransformedShape(shapeElement.getShape()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return labels;
|
||||
}
|
||||
|
||||
public Shape getCase() {
|
||||
if (caseShape == null) {
|
||||
SVGDiagram svg = getSvgDiagram();
|
||||
ShapeElement shapeElement = (ShapeElement) svg.getElement("case");
|
||||
caseShape = SCALE_TX.createTransformedShape(shapeElement.getShape());
|
||||
}
|
||||
return caseShape;
|
||||
}
|
||||
|
||||
public Shape getBase() {
|
||||
if (base == null) {
|
||||
SVGDiagram svg = getSvgDiagram();
|
||||
ShapeElement shapeElement = (ShapeElement) svg.getElement("base");
|
||||
base = SCALE_TX.createTransformedShape(shapeElement.getShape());
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isControlPointSticky(int index) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VisibilityPolicy getControlPointVisibilityPolicy(int index) {
|
||||
return VisibilityPolicy.ALWAYS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setControlPoint(Point2D point, int index) {
|
||||
controlPoints[index].setLocation(point);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void getValue() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(Void value) {}
|
||||
|
||||
@Override
|
||||
public boolean canPointMoveFreely(int pointIndex) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@EditableProperty
|
||||
public Orientation getOrientation() {
|
||||
if (orientation == null)
|
||||
orientation = Orientation.DEFAULT;
|
||||
return orientation;
|
||||
}
|
||||
|
||||
public void setOrientation(Orientation orientation) {
|
||||
this.orientation = orientation;
|
||||
updateControlPoints();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2D getCachingBounds() {
|
||||
Shape base = getBase();
|
||||
Rectangle2D bounds2d = base.getBounds2D();
|
||||
Point2D point = getControlPoint(0);
|
||||
|
||||
double x = point.getX();
|
||||
double y = point.getY();
|
||||
|
||||
double theta = orientation.toRadians();
|
||||
AffineTransform tx = AffineTransform.getRotateInstance(theta, x, y);
|
||||
|
||||
double[] xOffsets = getXOffsetsPx();
|
||||
double[] yOffsets = getYOffsetsPx();
|
||||
|
||||
Rectangle2D rect = new Rectangle2D.Double(x - xOffsets[0] - 1, y - yOffsets[0] - 1,
|
||||
bounds2d.getWidth() + 2, bounds2d.getHeight() + 2);
|
||||
return tx.createTransformedShape(rect).getBounds2D();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPositionCount() {
|
||||
return 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPositionName(int position) {
|
||||
return Integer.toString(position + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean arePointsConnected(int index1, int index2, int position) {
|
||||
if (position == 0 && ((index1 == 0 && index2 == 9) || (index1 == 1 && index2 == 7))) {
|
||||
return true;
|
||||
}
|
||||
if (position == 1 && ((index1 == 0 && (index2 == 9 || index2 == 14))
|
||||
|| (index1 == 1 && (index2 == 2 || index2 == 7)))) {
|
||||
return true;
|
||||
}
|
||||
if (position == 2 && ((index1 == 0 && index2 == 14) || (index1 == 1 && index2 == 2))) {
|
||||
return true;
|
||||
}
|
||||
if (position == 3
|
||||
&& ((index1 == 0 && (index2 == 9 || index2 == 10)) || (index1 == 1 && index2 == 6))) {
|
||||
return true;
|
||||
}
|
||||
if (position == 4 && ((index1 == 0 && (index2 == 11 || index2 == 12))
|
||||
|| (index1 == 1 && (index2 == 4 || index2 == 5)))) {
|
||||
return true;
|
||||
}
|
||||
if (position == 5
|
||||
&& ((index1 == 0 && (index2 == 13 || index2 == 14)) || (index1 == 1 && index2 == 3))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Creator: CorelDRAW 2020 (64-Bit) -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="23.9607mm" height="32.004mm" version="1.0" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"
|
||||
viewBox="0 0 306.49 408.65"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
|
||||
<g id="Layer_x0020_1">
|
||||
<metadata id="CorelCorpID_0Corel-Layer"/>
|
||||
<path id="base" fill="#434242" d="M-0 87.84l0.41 -7.52c0.75,-3.22 1.91,-6.42 3.41,-9.57l0.03 -0.08 0.26 -0.52c0.85,-1.76 1.81,-3.53 2.92,-5.27 22.24,-35.67 88.7,-65.06 144.94,-64.87l1.26 0.02 1.26 -0.02c56.25,-0.2 122.7,29.2 144.94,64.87 1.11,1.75 2.09,3.51 2.92,5.27l0.26 0.52 0.03 0.08c1.5,3.15 2.66,6.33 3.41,9.57l0.41 7.52 0 76.16 0 80.65 0 76.16 -0.41 7.52c-0.75,3.23 -1.91,6.42 -3.41,9.57l-0.03 0.08 -0.26 0.52c-0.83,1.76 -1.81,3.53 -2.92,5.27 -22.24,35.67 -88.7,65.06 -144.94,64.87l-1.26 -0.02 -1.26 0.02c-56.25,0.2 -122.7,-29.2 -144.94,-64.87 -1.11,-1.75 -2.08,-3.51 -2.92,-5.27l-0.26 -0.52 -0.03 -0.08c-1.5,-3.15 -2.66,-6.35 -3.41,-9.57l-0.41 -7.52 0 -76.16 0 -80.65 0 -76.16z"/>
|
||||
<g id="labels">
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M64.99 74.66l1.31 0c0.62,0 1.13,-0.15 1.49,-0.46 0.36,-0.31 0.54,-0.73 0.54,-1.27 0,-0.52 -0.18,-0.93 -0.54,-1.22 -0.34,-0.28 -0.85,-0.42 -1.49,-0.42l-1.31 0 0 3.38zm0 -5.57l1.05 0c0.62,0 1.1,-0.15 1.44,-0.41 0.36,-0.28 0.52,-0.65 0.52,-1.14 0,-0.49 -0.16,-0.85 -0.49,-1.08 -0.33,-0.25 -0.85,-0.36 -1.55,-0.36l-0.96 0 0 2.99 -0 0zm-2.86 7.95l0 -13.16 4.07 0c1.54,0 2.68,0.28 3.46,0.83 0.78,0.56 1.19,1.39 1.19,2.5 0,0.67 -0.18,1.24 -0.54,1.71 -0.36,0.47 -0.9,0.83 -1.62,1.09 0.8,0.18 1.42,0.56 1.88,1.11 0.46,0.57 0.69,1.27 0.69,2.07 0,1.27 -0.47,2.22 -1.4,2.87 -0.95,0.64 -2.32,0.96 -4.17,0.96l-3.56 0 0 0zm14.15 0l0 -10.76 -2.3 0 0.42 -2.4 4.8 0 0 13.16 -2.92 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M64.99 127.35l1.31 0c0.62,0 1.13,-0.15 1.49,-0.46 0.36,-0.31 0.54,-0.74 0.54,-1.27 0,-0.52 -0.18,-0.93 -0.54,-1.21 -0.34,-0.29 -0.85,-0.44 -1.49,-0.44l-1.31 0 0 3.38zm0 -5.57l1.05 0c0.62,0 1.1,-0.15 1.44,-0.41 0.36,-0.28 0.52,-0.65 0.52,-1.14 0,-0.49 -0.16,-0.85 -0.49,-1.08 -0.33,-0.23 -0.85,-0.34 -1.55,-0.34l-0.96 0 0 2.97 -0 0zm-2.86 7.95l0 -13.16 4.07 0c1.54,0 2.68,0.28 3.46,0.83 0.78,0.57 1.19,1.4 1.19,2.5 0,0.67 -0.18,1.24 -0.54,1.71 -0.36,0.47 -0.9,0.83 -1.62,1.09 0.8,0.18 1.42,0.55 1.88,1.13 0.46,0.55 0.69,1.26 0.69,2.07 0,1.26 -0.47,2.22 -1.4,2.86 -0.95,0.64 -2.32,0.96 -4.17,0.96l-3.56 0 0 0zm10.28 0l0 -1.06 4.75 -5.7 0.05 -0.05c0.88,-1.04 1.32,-1.86 1.32,-2.43 0,-0.46 -0.16,-0.85 -0.47,-1.14 -0.31,-0.31 -0.72,-0.46 -1.21,-0.46 -0.44,0 -0.83,0.15 -1.16,0.44 -0.33,0.29 -0.54,0.7 -0.65,1.19l-2.52 -1.24c0.38,-1 0.96,-1.76 1.75,-2.32 0.78,-0.55 1.7,-0.82 2.76,-0.82 1.26,0 2.32,0.39 3.19,1.19 0.87,0.8 1.29,1.8 1.29,2.99 0,0.73 -0.2,1.49 -0.59,2.27 -0.38,0.78 -0.98,1.63 -1.8,2.53l-1.73 1.91 4.74 0 -0.46 2.69 -9.26 0 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M61.03 183.75l2.74 -13.58 0.23 0 4.97 8.57 4.69 -8.57 0.23 0 2.76 13.58 -2.99 0 -1.11 -6.01 -3.55 6.5 -0.21 0 -3.79 -6.59 -1.16 6.1 -2.81 0zm20.29 0l0 -10.76 -2.32 0 0.44 -2.4 4.79 0 0 13.16 -2.91 0 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M59.73 236.44l2.73 -13.58 0.23 0 4.97 8.57 4.69 -8.57 0.25 0 2.75 13.58 -2.99 0 -1.11 -6.01 -3.53 6.5 -0.21 0 -3.81 -6.58 -1.14 6.09 -2.81 0 0 0zm16.41 0l0 -1.06 4.76 -5.7 0.05 -0.05c0.88,-1.04 1.32,-1.86 1.32,-2.43 0,-0.46 -0.16,-0.85 -0.47,-1.14 -0.31,-0.31 -0.72,-0.46 -1.21,-0.46 -0.46,0 -0.83,0.15 -1.16,0.44 -0.33,0.29 -0.56,0.7 -0.65,1.21l-2.52 -1.26c0.38,-1 0.96,-1.76 1.75,-2.32 0.78,-0.54 1.7,-0.82 2.76,-0.82 1.26,0 2.32,0.39 3.19,1.19 0.87,0.8 1.29,1.8 1.29,2.99 0,0.73 -0.2,1.49 -0.59,2.28 -0.39,0.78 -0.98,1.62 -1.8,2.51l-1.73 1.91 4.72 0 -0.44 2.69 -9.26 0 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M60.8 290.45l0 -13.58 0.29 0 8.2 7.67 0 -7.25 2.91 0 0 13.66 -0.28 0 -8.24 -7.69 0 7.18 -2.89 0 0 0zm13.3 0l0 -1.06 4.76 -5.7 0.05 -0.05c0.88,-1.04 1.32,-1.86 1.32,-2.43 0,-0.46 -0.16,-0.85 -0.47,-1.14 -0.31,-0.31 -0.72,-0.46 -1.21,-0.46 -0.46,0 -0.83,0.15 -1.16,0.44 -0.33,0.29 -0.56,0.7 -0.65,1.19l-2.52 -1.24c0.38,-1 0.96,-1.76 1.75,-2.32 0.79,-0.55 1.7,-0.82 2.76,-0.82 1.26,0 2.32,0.39 3.19,1.19 0.85,0.8 1.29,1.79 1.29,2.99 0,0.73 -0.2,1.49 -0.59,2.27 -0.39,0.78 -0.98,1.63 -1.8,2.53l-1.73 1.91 4.72 0 -0.44 2.69 -9.26 0 -0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M63.44 344.47l0 -13.58 0.31 0 8.2 7.67 0 -7.25 2.89 0 0 13.66 -0.26 0 -8.24 -7.69 0 7.18 -2.91 0 -0 -0zm17.17 0l0 -10.76 -2.3 0 0.42 -2.4 4.81 0 0 13.16 -2.93 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M228.51 74.66l1.31 0c0.64,0 1.13,-0.15 1.49,-0.46 0.36,-0.31 0.54,-0.73 0.54,-1.27 0,-0.52 -0.18,-0.93 -0.52,-1.22 -0.36,-0.28 -0.85,-0.42 -1.5,-0.42l-1.31 0 0 3.38 0 0zm0 -5.57l1.05 0c0.62,0 1.1,-0.15 1.45,-0.41 0.34,-0.28 0.52,-0.65 0.52,-1.14 0,-0.49 -0.16,-0.85 -0.51,-1.08 -0.33,-0.25 -0.83,-0.36 -1.53,-0.36l-0.98 0 0 2.99 0 0zm-2.86 7.95l0 -13.16 4.07 0c1.54,0 2.7,0.28 3.48,0.83 0.78,0.56 1.18,1.39 1.18,2.5 0,0.67 -0.18,1.24 -0.54,1.71 -0.36,0.47 -0.9,0.83 -1.62,1.09 0.8,0.18 1.42,0.56 1.88,1.11 0.46,0.57 0.69,1.27 0.69,2.07 0,1.27 -0.47,2.22 -1.4,2.87 -0.93,0.64 -2.32,0.96 -4.15,0.96l-3.58 0 0 0zm14.15 0l0 -10.76 -2.3 0 0.42 -2.4 4.8 0 0 13.16 -2.92 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M228.51 127.35l1.31 0c0.64,0 1.13,-0.15 1.49,-0.46 0.36,-0.31 0.54,-0.74 0.54,-1.27 0,-0.52 -0.18,-0.93 -0.52,-1.21 -0.36,-0.29 -0.85,-0.44 -1.5,-0.44l-1.31 0 0 3.38 0 0zm0 -5.57l1.05 0c0.62,0 1.1,-0.15 1.45,-0.41 0.34,-0.28 0.52,-0.65 0.52,-1.14 0,-0.49 -0.16,-0.85 -0.51,-1.08 -0.33,-0.23 -0.83,-0.34 -1.53,-0.34l-0.98 0 0 2.97 0 0zm-2.86 7.95l0 -13.16 4.07 0c1.54,0 2.7,0.28 3.48,0.83 0.78,0.57 1.18,1.4 1.18,2.5 0,0.67 -0.18,1.24 -0.54,1.71 -0.36,0.47 -0.9,0.83 -1.62,1.09 0.8,0.18 1.42,0.55 1.88,1.13 0.46,0.55 0.69,1.26 0.69,2.07 0,1.26 -0.47,2.22 -1.4,2.86 -0.93,0.64 -2.32,0.96 -4.15,0.96l-3.58 0 0 0zm10.28 0l0 -1.06 4.77 -5.7 0.03 -0.05c0.88,-1.04 1.32,-1.86 1.32,-2.43 0,-0.46 -0.15,-0.85 -0.46,-1.14 -0.31,-0.31 -0.72,-0.46 -1.22,-0.46 -0.44,0 -0.83,0.15 -1.16,0.44 -0.33,0.29 -0.54,0.7 -0.65,1.19l-2.52 -1.24c0.39,-1 0.96,-1.76 1.75,-2.32 0.78,-0.55 1.72,-0.82 2.76,-0.82 1.27,0 2.34,0.39 3.19,1.19 0.87,0.8 1.29,1.8 1.29,2.99 0,0.73 -0.2,1.49 -0.57,2.27 -0.39,0.78 -1,1.63 -1.81,2.53l-1.72 1.91 4.72 0 -0.44 2.69 -9.28 0 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M224.57 183.75l2.73 -13.58 0.23 0 4.97 8.57 4.69 -8.57 0.25 0 2.75 13.58 -2.99 0 -1.11 -6.01 -3.53 6.5 -0.21 0 -3.81 -6.59 -1.14 6.1 -2.81 0 0 0zm20.28 0l0 -10.76 -2.3 0 0.42 -2.4 4.8 0 0 13.16 -2.92 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M223.25 236.44l2.74 -13.58 0.21 0 4.98 8.57 4.69 -8.57 0.23 0 2.76 13.58 -2.99 0 -1.13 -6.01 -3.53 6.5 -0.21 0 -3.79 -6.58 -1.16 6.09 -2.81 0zm16.41 0l0 -1.06 4.77 -5.7 0.03 -0.05c0.88,-1.04 1.32,-1.86 1.32,-2.43 0,-0.46 -0.15,-0.85 -0.47,-1.14 -0.31,-0.31 -0.7,-0.46 -1.21,-0.46 -0.44,0 -0.83,0.15 -1.16,0.44 -0.33,0.29 -0.54,0.7 -0.65,1.21l-2.52 -1.26c0.39,-1 0.96,-1.76 1.75,-2.32 0.79,-0.54 1.72,-0.82 2.76,-0.82 1.27,0 2.34,0.39 3.19,1.19 0.87,0.8 1.29,1.8 1.29,2.99 0,0.73 -0.2,1.49 -0.57,2.28 -0.39,0.78 -1,1.62 -1.81,2.51l-1.72 1.91 4.72 0 -0.44 2.69 -9.28 0 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M224.33 290.45l0 -13.58 0.31 0 8.2 7.67 0 -7.25 2.89 0 0 13.66 -0.26 0 -8.24 -7.69 0 7.18 -2.91 0 0 0zm13.3 0l0 -1.06 4.77 -5.7 0.03 -0.05c0.88,-1.04 1.32,-1.86 1.32,-2.43 0,-0.46 -0.16,-0.85 -0.47,-1.14 -0.31,-0.31 -0.72,-0.46 -1.21,-0.46 -0.44,0 -0.83,0.15 -1.16,0.44 -0.33,0.29 -0.54,0.7 -0.65,1.19l-2.52 -1.24c0.38,-1 0.96,-1.76 1.75,-2.32 0.78,-0.55 1.7,-0.82 2.76,-0.82 1.27,0 2.32,0.39 3.19,1.19 0.87,0.8 1.29,1.79 1.29,2.99 0,0.73 -0.2,1.49 -0.59,2.27 -0.38,0.78 -0.98,1.63 -1.8,2.53l-1.73 1.91 4.74 0 -0.44 2.69 -9.28 0 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M225.65 344.47l0 -13.58 0.29 0 8.2 7.67 0 -7.25 2.91 0 0 13.66 -0.28 0 -8.22 -7.69 0 7.18 -2.91 0 0 -0zm17.17 0l0 -10.76 -2.3 0 0.42 -2.4 4.8 0 0 13.16 -2.92 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M109.76 341.06c0.57,0.44 1.1,0.75 1.57,0.96 0.49,0.21 0.93,0.33 1.36,0.33 0.54,0 0.98,-0.15 1.31,-0.43 0.34,-0.29 0.51,-0.67 0.51,-1.13 0,-0.52 -0.23,-0.91 -0.69,-1.17 -0.46,-0.28 -1.13,-0.41 -2.03,-0.41l-0.34 0 0 -2.27c1,-0.03 1.75,-0.2 2.24,-0.49 0.49,-0.29 0.74,-0.7 0.74,-1.26 0,-0.38 -0.13,-0.69 -0.38,-0.93 -0.24,-0.25 -0.57,-0.36 -0.96,-0.36 -0.36,0 -0.74,0.1 -1.14,0.33 -0.39,0.23 -0.85,0.57 -1.32,1.04l-1.68 -1.76c0.62,-0.77 1.27,-1.34 1.99,-1.71 0.7,-0.38 1.45,-0.55 2.27,-0.55 1.18,0 2.16,0.36 2.94,1.09 0.78,0.72 1.18,1.63 1.18,2.73 0,0.6 -0.15,1.14 -0.41,1.62 -0.28,0.49 -0.65,0.88 -1.16,1.19 0.59,0.29 1.03,0.72 1.36,1.27 0.33,0.56 0.49,1.21 0.49,1.94 0,1.26 -0.44,2.25 -1.32,3.04 -0.87,0.78 -2.01,1.17 -3.43,1.17 -0.82,0 -1.63,-0.16 -2.44,-0.46 -0.82,-0.31 -1.55,-0.75 -2.21,-1.31l1.57 -2.48 0 0zm9.08 3.79l4.74 -6.81 -4.67 -6.35 3.84 0 2.73 3.75 2.55 -3.75 3.41 0 -4.23 6.09 5.18 7.07 -3.86 0 -3.2 -4.46 -3.04 4.46 -3.45 0 -0 0zm15.1 -3.79c0.57,0.44 1.09,0.75 1.57,0.96 0.49,0.21 0.93,0.33 1.36,0.33 0.54,0 0.98,-0.15 1.31,-0.43 0.33,-0.29 0.49,-0.67 0.49,-1.13 0,-0.52 -0.23,-0.91 -0.67,-1.17 -0.46,-0.28 -1.13,-0.41 -2.03,-0.41l-0.34 0 0 -2.27c1,-0.03 1.75,-0.2 2.24,-0.49 0.49,-0.29 0.73,-0.7 0.73,-1.26 0,-0.38 -0.13,-0.69 -0.38,-0.93 -0.26,-0.25 -0.57,-0.36 -0.96,-0.36 -0.36,0 -0.73,0.1 -1.14,0.33 -0.41,0.23 -0.85,0.57 -1.34,1.04l-1.67 -1.76c0.62,-0.77 1.27,-1.34 1.99,-1.71 0.7,-0.38 1.45,-0.55 2.27,-0.55 1.18,0 2.16,0.36 2.94,1.09 0.77,0.72 1.16,1.63 1.16,2.73 0,0.6 -0.13,1.14 -0.39,1.62 -0.28,0.49 -0.67,0.88 -1.16,1.19 0.59,0.29 1.03,0.72 1.36,1.27 0.33,0.56 0.47,1.21 0.47,1.94 0,1.26 -0.43,2.25 -1.31,3.04 -0.88,0.78 -2.01,1.17 -3.43,1.17 -0.82,0 -1.63,-0.16 -2.45,-0.46 -0.8,-0.31 -1.54,-0.75 -2.21,-1.31l1.58 -2.48 0 0zm30.38 -1.57l0 -2.53 4.82 0 0 2.53 -4.82 0zm10.11 -1.22c0,1.31 0.15,2.32 0.46,3.07 0.31,0.73 0.73,1.09 1.26,1.09 0.54,0 0.96,-0.36 1.27,-1.09 0.31,-0.73 0.46,-1.75 0.46,-3.07 0,-1.32 -0.15,-2.35 -0.46,-3.07 -0.29,-0.73 -0.72,-1.11 -1.27,-1.11 -0.52,0 -0.95,0.38 -1.26,1.11 -0.29,0.73 -0.46,1.76 -0.46,3.07zm-3.01 0c0,-2.19 0.41,-3.92 1.26,-5.14 0.83,-1.24 1.99,-1.86 3.46,-1.86 1.47,0 2.63,0.62 3.48,1.86 0.85,1.24 1.26,2.95 1.26,5.14 0,2.19 -0.41,3.9 -1.26,5.14 -0.85,1.26 -2.01,1.88 -3.48,1.88 -1.47,0 -2.63,-0.62 -3.46,-1.86 -0.85,-1.24 -1.26,-2.96 -1.26,-5.16l0 0zm11.96 2.79c0.57,0.44 1.09,0.75 1.57,0.96 0.49,0.21 0.93,0.33 1.36,0.33 0.54,0 0.98,-0.15 1.31,-0.43 0.33,-0.29 0.49,-0.67 0.49,-1.13 0,-0.52 -0.21,-0.91 -0.67,-1.17 -0.46,-0.28 -1.13,-0.41 -2.03,-0.41l-0.34 0 0 -2.27c1,-0.03 1.75,-0.2 2.24,-0.49 0.49,-0.29 0.74,-0.7 0.74,-1.26 0,-0.38 -0.13,-0.69 -0.38,-0.93 -0.26,-0.25 -0.57,-0.36 -0.96,-0.36 -0.36,0 -0.74,0.1 -1.14,0.33 -0.41,0.23 -0.85,0.57 -1.34,1.04l-1.67 -1.76c0.62,-0.77 1.27,-1.34 1.99,-1.71 0.7,-0.38 1.45,-0.55 2.27,-0.55 1.18,0 2.16,0.36 2.94,1.09 0.79,0.72 1.16,1.63 1.16,2.73 0,0.6 -0.13,1.14 -0.39,1.62 -0.28,0.49 -0.65,0.88 -1.16,1.19 0.59,0.29 1.03,0.72 1.36,1.27 0.33,0.56 0.49,1.21 0.49,1.94 0,1.26 -0.44,2.25 -1.32,3.04 -0.88,0.78 -2.01,1.17 -3.43,1.17 -0.82,0 -1.63,-0.16 -2.43,-0.46 -0.82,-0.31 -1.55,-0.75 -2.22,-1.31l1.58 -2.48 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M152.71 362.49l0 6.4c-0.88,0.44 -1.75,0.77 -2.58,0.99 -0.85,0.23 -1.65,0.34 -2.45,0.34 -1.99,0 -3.66,-0.67 -4.98,-1.99 -1.32,-1.32 -1.99,-2.99 -1.99,-4.99 0,-2.04 0.67,-3.72 2.03,-5.06 1.34,-1.32 3.04,-1.99 5.08,-1.99 0.78,0 1.52,0.1 2.22,0.33 0.7,0.2 1.37,0.52 2.03,0.95l-0.34 3.3c-0.6,-0.62 -1.21,-1.06 -1.81,-1.35 -0.61,-0.28 -1.24,-0.42 -1.91,-0.42 -1.18,0 -2.16,0.39 -2.94,1.17 -0.77,0.8 -1.16,1.78 -1.16,2.97 0,1.24 0.38,2.27 1.13,3.05 0.75,0.78 1.72,1.17 2.89,1.17 0.26,0 0.54,-0.02 0.82,-0.07 0.29,-0.05 0.57,-0.11 0.88,-0.21l0 -1.91 -2.5 0 0 -2.68 5.6 0zm5.72 4.49l0.69 0c1.37,0 2.45,-0.34 3.23,-1.01 0.77,-0.65 1.16,-1.58 1.16,-2.74 0,-1.17 -0.39,-2.11 -1.16,-2.77 -0.78,-0.67 -1.86,-1.01 -3.23,-1.01l-0.69 0 0 7.54zm-3.1 2.82l0 -13.17 3.5 0c2.45,0 4.38,0.59 5.78,1.76 1.39,1.17 2.08,2.79 2.08,4.83 0,1.21 -0.28,2.3 -0.82,3.25 -0.56,0.95 -1.36,1.71 -2.43,2.33 -0.61,0.36 -1.26,0.6 -1.98,0.75 -0.7,0.16 -1.58,0.24 -2.63,0.24l-3.5 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M118.16 67.97c-0.57,-0.59 -1.16,-1.03 -1.73,-1.31 -0.59,-0.29 -1.21,-0.42 -1.85,-0.42 -1.11,0 -2.03,0.37 -2.73,1.14 -0.72,0.77 -1.06,1.76 -1.06,2.97 0,1.19 0.34,2.17 1.05,2.92 0.7,0.75 1.62,1.13 2.75,1.13 0.67,0 1.34,-0.15 1.99,-0.43 0.67,-0.28 1.32,-0.7 1.99,-1.26l-0.21 3.49c-0.56,0.39 -1.18,0.67 -1.85,0.88 -0.67,0.2 -1.36,0.29 -2.08,0.29 -0.78,0 -1.52,-0.11 -2.24,-0.36 -0.7,-0.25 -1.37,-0.6 -1.96,-1.08 -0.85,-0.67 -1.5,-1.47 -1.96,-2.43 -0.44,-0.96 -0.67,-2.01 -0.67,-3.13 0,-0.98 0.16,-1.89 0.51,-2.74 0.33,-0.85 0.82,-1.62 1.45,-2.27 0.64,-0.65 1.37,-1.14 2.22,-1.5 0.83,-0.34 1.72,-0.52 2.66,-0.52 0.73,0 1.44,0.1 2.11,0.31 0.67,0.21 1.32,0.52 1.93,0.95l-0.33 3.36 -0 -0zm6 4.82l3.46 0 -1.72 -4.13 -1.75 4.13zm-4.93 4.18l6.72 -13.56 0.21 0 6.57 13.56 -3.3 0 -0.83 -1.91 -5.34 0 -0.85 1.91 -3.17 0 0 0z"/>
|
||||
<path fill="#DA8A67" fill-rule="nonzero" d="M186.99 67.63c-0.57,-0.59 -1.14,-1.03 -1.73,-1.31 -0.59,-0.29 -1.19,-0.42 -1.85,-0.42 -1.11,0 -2.03,0.38 -2.73,1.14 -0.7,0.77 -1.06,1.76 -1.06,2.97 0,1.19 0.36,2.17 1.06,2.92 0.69,0.75 1.6,1.13 2.75,1.13 0.65,0 1.32,-0.15 1.99,-0.42 0.65,-0.28 1.32,-0.7 1.98,-1.26l-0.2 3.49c-0.57,0.39 -1.18,0.67 -1.85,0.88 -0.67,0.2 -1.37,0.29 -2.09,0.29 -0.78,0 -1.52,-0.11 -2.24,-0.36 -0.7,-0.25 -1.36,-0.6 -1.96,-1.08 -0.85,-0.67 -1.5,-1.47 -1.94,-2.43 -0.46,-0.96 -0.69,-2.01 -0.69,-3.13 0,-0.98 0.18,-1.89 0.51,-2.74 0.33,-0.86 0.82,-1.62 1.45,-2.27 0.64,-0.65 1.39,-1.14 2.22,-1.5 0.85,-0.34 1.73,-0.52 2.66,-0.52 0.74,0 1.44,0.1 2.12,0.31 0.67,0.21 1.31,0.52 1.93,0.93l-0.34 3.38 0 -0zm5.33 6.61l1.31 0c0.62,0 1.11,-0.15 1.47,-0.46 0.36,-0.31 0.54,-0.73 0.54,-1.27 0,-0.52 -0.16,-0.93 -0.52,-1.22 -0.34,-0.29 -0.85,-0.42 -1.49,-0.42l-1.31 0 0 3.38zm0 -5.58l1.05 0c0.61,0 1.1,-0.13 1.44,-0.41 0.34,-0.26 0.52,-0.64 0.52,-1.13 0,-0.51 -0.16,-0.86 -0.49,-1.09 -0.34,-0.23 -0.85,-0.34 -1.55,-0.34l-0.96 0 0 2.97 0 0zm-2.88 7.97l0 -13.17 4.07 0c1.54,0 2.7,0.29 3.48,0.85 0.78,0.55 1.18,1.39 1.18,2.5 0,0.67 -0.18,1.24 -0.54,1.7 -0.36,0.47 -0.9,0.85 -1.62,1.09 0.8,0.2 1.44,0.56 1.9,1.13 0.44,0.57 0.67,1.26 0.67,2.07 0,1.27 -0.46,2.22 -1.4,2.87 -0.93,0.64 -2.32,0.96 -4.15,0.96l-3.58 0z"/>
|
||||
<polygon fill="#DA8A67" points="98.49,70.79 100.91,73.47 103.31,76.15 103.31,70.79 103.31,65.44 100.91,68.12 "/>
|
||||
<polygon fill="#DA8A67" points="208.82,70.79 206.4,73.47 203.98,76.15 203.98,70.79 203.98,65.44 206.4,68.12 "/>
|
||||
</g>
|
||||
<g id="pads">
|
||||
<path fill="#DA8A67" d="M7.85 206.79l71.8 0c1.44,0 2.64,1.18 2.64,2.62l0 11.18 -18.6 0c-5.64,0 -10.27,4.61 -10.27,10.26l0 0c0,5.63 4.63,10.24 10.27,10.24l18.6 0 0 11.59c0,1.46 -1.2,2.64 -2.64,2.64l-71.8 0c-1.44,0 -2.63,-1.18 -2.63,-2.64l0 -43.26c0,-1.44 1.18,-2.62 2.63,-2.62z"/>
|
||||
<path fill="#DA8A67" d="M79.65 313.88l-71.8 0c-1.44,0 -2.51,1.2 -2.63,2.64 -2.89,33.96 41.88,55.52 54.73,63.04 0.5,0.23 0.92,0.4 1.48,0.4 0.52,0 1.04,-0.16 1.5,-0.4 6.47,-8.55 14.55,-19.17 19.37,-25.69l0 -6.17 -18.39 0c-5.76,0 -10.48,-4.69 -10.48,-10.45l0 0c0,-5.75 4.72,-10.46 10.48,-10.46l18.39 0 0 -10.27c0,-1.44 -1.2,-2.64 -2.64,-2.64l0 0z"/>
|
||||
<path fill="#DA8A67" d="M148.76 60.34l-61.44 0 -0.02 -7.53 -17.59 -24.26c-1.25,-1.25 -1.67,-3.13 -0.19,-4.4 14.13,-7.25 44.32,-18.62 79.24,-18.62 1.44,0 2.63,1.18 2.63,2.64l0 49.54c0,1.44 -1.18,2.62 -2.63,2.62z"/>
|
||||
<path fill="#DA8A67" d="M176.52 315.98l43.14 0 0 40.17 18.22 24.26c1.74,2.68 0.94,2.85 -1.53,4.36 -12.63,7.72 -35.64,14.03 -59.53,16.79l0 0.17c-7.25,1.03 -15.19,1.44 -23.39,1.36 -8.21,0.09 -16.13,-0.33 -23.39,-1.36l0 -0.17c-23.91,-2.76 -46.91,-9.07 -59.55,-16.79 -2.47,-1.51 -3.27,-1.69 -1.53,-4.36l18.22 -24.26 0 -40.17 43.28 0 0 11.3 -22.62 0c-5.76,0 -10.48,4.69 -10.48,10.45l0 0c0,5.77 4.72,10.46 10.48,10.46l44.39 0 0 4.61 -4.18 0c-5.65,0 -10.27,4.61 -10.27,10.24l0 0c0,5.65 4.61,10.25 10.27,10.25l10.88 0c5.66,0 10.27,-4.61 10.27,-10.25l0 0c0,-5.63 -4.61,-10.24 -10.27,-10.24l-4.18 0 0 -4.61 43.97 0c5.76,0 10.48,-4.69 10.48,-10.46l0 0c0,-5.75 -4.72,-10.45 -10.48,-10.45l-22.2 0 0 -11.3 0 0z"/>
|
||||
<path fill="#DA8A67" d="M7.85 152.75l71.8 0c1.44,0 2.64,1.2 2.64,2.64l0 11.18 -18.6 0c-5.64,0 -10.27,4.61 -10.27,10.24l0 0c0,5.65 4.63,10.25 10.27,10.25l18.6 0 0 11.59c0,1.44 -1.2,2.62 -2.64,2.62l-71.8 0c-1.44,0 -2.63,-1.18 -2.63,-2.62l0 -43.26c0,-1.44 1.18,-2.64 2.63,-2.64z"/>
|
||||
<path fill="#DA8A67" d="M7.85 260.67l71.8 0c1.44,0 2.64,1.18 2.64,2.64l0 11.18 -18.6 0c-5.64,0 -10.27,4.61 -10.27,10.24l0 0c0,5.65 4.63,10.25 10.27,10.25l18.6 0 0 11.59c0,1.44 -1.2,2.62 -2.64,2.62l-71.8 0c-1.44,0 -2.63,-1.18 -2.63,-2.62l0 -43.26c0,-1.46 1.18,-2.64 2.63,-2.64z"/>
|
||||
<path fill="#DA8A67" d="M7.85 98.86l71.8 0c1.44,0 2.64,1.18 2.64,2.62l0 11.18 -18.6 0c-5.64,0 -10.27,4.61 -10.27,10.26l0 0c0,5.63 4.63,10.25 10.27,10.25l18.6 0 0 11.58c0,1.46 -1.2,2.64 -2.64,2.64l-71.8 0c-1.44,0 -2.63,-1.18 -2.63,-2.64l0 -43.26c0,-1.44 1.18,-2.62 2.63,-2.62z"/>
|
||||
<path fill="#DA8A67" d="M298.64 206.79l-71.8 0c-1.46,0 -2.64,1.18 -2.64,2.62l0 11.18 18.6 0c5.64,0 10.27,4.61 10.27,10.26l0 0c0,5.63 -4.63,10.24 -10.27,10.24l-18.6 0 0 11.59c0,1.46 1.18,2.64 2.64,2.64l71.8 0c1.44,0 2.63,-1.18 2.63,-2.64l0 -43.26c0,-1.44 -1.18,-2.62 -2.63,-2.62z"/>
|
||||
<path fill="#DA8A67" d="M298.64 152.75l-71.8 0c-1.46,0 -2.64,1.2 -2.64,2.64l0 11.18 18.6 0c5.64,0 10.27,4.61 10.27,10.24l0 0c0,5.65 -4.63,10.25 -10.27,10.25l-18.6 0 0 11.59c0,1.44 1.18,2.62 2.64,2.62l71.8 0c1.44,0 2.63,-1.18 2.63,-2.62l0 -43.26c0,-1.44 -1.18,-2.64 -2.63,-2.64z"/>
|
||||
<path fill="#DA8A67" d="M298.64 260.67l-71.8 0c-1.46,0 -2.64,1.18 -2.64,2.64l0 11.18 18.6 0c5.64,0 10.27,4.61 10.27,10.24l0 0c0,5.65 -4.63,10.25 -10.27,10.25l-18.6 0 0 11.59c0,1.44 1.18,2.62 2.64,2.62l71.8 0c1.44,0 2.63,-1.18 2.63,-2.62l0 -43.26c0,-1.46 -1.18,-2.64 -2.63,-2.64z"/>
|
||||
<path fill="#DA8A67" d="M298.64 98.86l-71.8 0c-1.46,0 -2.64,1.18 -2.64,2.62l0 11.18 18.6 0c5.64,0 10.27,4.61 10.27,10.26l0 0c0,5.63 -4.63,10.25 -10.27,10.25l-18.6 0 0 11.58c0,1.46 1.18,2.64 2.64,2.64l71.8 0c1.44,0 2.63,-1.18 2.63,-2.64l0 -43.26c0,-1.44 -1.18,-2.62 -2.63,-2.62z"/>
|
||||
<path fill="#DA8A67" d="M226.84 313.88l71.78 0c1.46,0 2.52,1.2 2.64,2.64 2.89,33.96 -41.88,55.52 -54.72,63.04 -0.5,0.23 -0.92,0.4 -1.48,0.4 -0.52,0 -1.04,-0.16 -1.5,-0.4 -6.47,-8.55 -14.55,-19.17 -19.37,-25.69l0 -6.17 18.39 0c5.76,0 10.48,-4.69 10.48,-10.45l0 0c0,-5.75 -4.72,-10.46 -10.48,-10.46l-18.39 0 0 -10.27c0,-1.44 1.2,-2.64 2.64,-2.64l0 0z"/>
|
||||
<path fill="#DA8A67" d="M79.65 94.01l-71.8 0c-1.44,0 -2.51,-1.18 -2.63,-2.64 -2.89,-33.97 41.88,-55.52 54.73,-63.04 0.5,-0.21 0.92,-0.38 1.48,-0.38 0.52,0 1.04,0.16 1.5,0.38 6.47,8.55 14.55,19.19 19.37,25.69l0 6.17 -18.39 0c-5.76,0 -10.48,4.71 -10.48,10.46l0 0c0,5.75 4.72,10.47 10.48,10.47l18.39 0 0 10.25c0,1.46 -1.2,2.64 -2.64,2.64l0 0z"/>
|
||||
<path fill="#DA8A67" d="M226.84 94.01l71.78 0c1.46,0 2.52,-1.18 2.64,-2.64 2.89,-33.97 -41.88,-55.52 -54.72,-63.04 -0.5,-0.21 -0.92,-0.38 -1.48,-0.38 -0.52,0 -1.04,0.16 -1.5,0.38 -6.47,8.55 -14.55,19.19 -19.37,25.69l0 6.17 18.39 0c5.76,0 10.48,4.71 10.48,10.46l0 0c0,5.75 -4.72,10.47 -10.48,10.47l-18.39 0 0 10.25c0,1.46 1.2,2.64 2.64,2.64l0 0z"/>
|
||||
<path fill="#DA8A67" d="M158.28 60.34l61.43 0 0.02 -7.53 17.59 -24.26c1.25,-1.25 1.69,-3.13 0.21,-4.4 -14.13,-7.25 -44.34,-18.62 -79.24,-18.62 -1.44,0 -2.64,1.18 -2.64,2.64l0 49.54c0,1.44 1.2,2.62 2.64,2.62z"/>
|
||||
</g>
|
||||
<path id="case" fill="#B7CBD8" d="M98.22 95.76l110.55 0c4.22,0 7.67,3.45 7.67,7.67l0 202.45c0,4.22 -3.45,7.67 -7.67,7.67l-110.55 0c-4.22,0 -7.67,-3.45 -7.67,-7.67l0 -202.45c0,-4.22 3.45,-7.67 7.67,-7.67zm55.27 149.38l0 0c4.02,0 7.31,3.29 7.31,7.31l0 31.27c0,4.02 -3.29,7.31 -7.31,7.31l-0 0c-4.02,0 -7.31,-3.29 -7.31,-7.31l0 -31.27c0,-4.02 3.29,-7.31 7.31,-7.31zm-0 -126.63l0 0c4.02,0 7.31,3.29 7.31,7.31l0 31.27c0,4.02 -3.29,7.31 -7.31,7.31l-0 0c-4.02,0 -7.31,-3.29 -7.31,-7.31l0 -31.27c0,-4.02 3.29,-7.31 7.31,-7.31z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
package org.diylc.components.transform;
|
||||
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Point2D;
|
||||
import org.diylc.common.IComponentTransformer;
|
||||
import org.diylc.common.Orientation;
|
||||
import org.diylc.components.guitar.Freeway3x3_03;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
|
||||
public class Freeway3x3_03Transformer implements IComponentTransformer {
|
||||
|
||||
@Override
|
||||
public boolean canRotate(IDIYComponent<?> component) {
|
||||
return component.getClass().equals(Freeway3x3_03.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canMirror(IDIYComponent<?> component) {
|
||||
return component.getClass().equals(Freeway3x3_03.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mirroringChangesCircuit() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rotate(IDIYComponent<?> component, Point2D center, int direction) {
|
||||
AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.getX(), center.getY());
|
||||
for (int index = 0; index < component.getControlPointCount(); index++) {
|
||||
Point2D p = new Point2D.Double();
|
||||
rotate.transform(component.getControlPoint(index), p);
|
||||
component.setControlPoint(p, index);
|
||||
}
|
||||
|
||||
Freeway3x3_03 sw = (Freeway3x3_03) component;
|
||||
Orientation o = sw.getOrientation();
|
||||
int oValue = o.ordinal();
|
||||
oValue += direction;
|
||||
if (oValue < 0)
|
||||
oValue = Orientation.values().length - 1;
|
||||
if (oValue >= Orientation.values().length)
|
||||
oValue = 0;
|
||||
o = Orientation.values()[oValue];
|
||||
sw.setOrientation(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mirror(IDIYComponent<?> component, Point2D center, int direction) {
|
||||
Freeway3x3_03 sw = (Freeway3x3_03) component;
|
||||
|
||||
if (direction == IComponentTransformer.HORIZONTAL) {
|
||||
double dx = 2 * (center.getX() - sw.getControlPoint(1).getX());
|
||||
double dy = 0;
|
||||
Orientation o = sw.getOrientation();
|
||||
switch (o) {
|
||||
case DEFAULT:
|
||||
dx += sw.getControlPoint(0).getX() - sw.getControlPoint(sw.getControlPointCount() - 1).getX();
|
||||
break;
|
||||
case _90:
|
||||
o = Orientation._270;
|
||||
dx -= 2 * (sw.getControlPoint(0).getX() - sw.getControlPoint(1).getX());
|
||||
dy -= sw.getControlPoint(0).getY() - sw.getControlPoint(sw.getControlPointCount() - 1).getY();
|
||||
break;
|
||||
case _180:
|
||||
dx += sw.getControlPoint(0).getX() - sw.getControlPoint(sw.getControlPointCount() - 1).getX();
|
||||
break;
|
||||
case _270:
|
||||
dx -= 2 * (sw.getControlPoint(0).getX() - sw.getControlPoint(1).getX());
|
||||
dy -= sw.getControlPoint(0).getY() - sw.getControlPoint(sw.getControlPointCount() - 1).getY();
|
||||
o = Orientation._90;
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < sw.getControlPointCount(); i++) {
|
||||
Point2D p = sw.getControlPoint(i);
|
||||
sw.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
|
||||
}
|
||||
|
||||
sw.setOrientation(o);
|
||||
} else {
|
||||
double dx = 0;
|
||||
double dy = 2 * (center.getY() - sw.getControlPoint(1).getY());
|
||||
Orientation o = sw.getOrientation();
|
||||
switch (o) {
|
||||
case DEFAULT:
|
||||
dx -= sw.getControlPoint(0).getX() - sw.getControlPoint(sw.getControlPointCount() - 1).getX();
|
||||
dy -= 2 * (sw.getControlPoint(0).getY() - sw.getControlPoint(1).getY());
|
||||
o = Orientation._180;
|
||||
break;
|
||||
case _90:
|
||||
dy += sw.getControlPoint(0).getY() - sw.getControlPoint(sw.getControlPointCount() - 1).getY();
|
||||
break;
|
||||
case _180:
|
||||
dx -= sw.getControlPoint(0).getX() - sw.getControlPoint(sw.getControlPointCount() - 1).getX();
|
||||
dy -= 2 * (sw.getControlPoint(0).getY() - sw.getControlPoint(1).getY());
|
||||
o = Orientation.DEFAULT;
|
||||
break;
|
||||
case _270:
|
||||
dy += sw.getControlPoint(0).getY() - sw.getControlPoint(sw.getControlPointCount() - 1).getY();
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < sw.getControlPointCount(); i++) {
|
||||
Point2D p = sw.getControlPoint(i);
|
||||
sw.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
|
||||
}
|
||||
|
||||
sw.setOrientation(o);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,8 @@
|
||||
4P6T
|
||||
4PDT
|
||||
4PDT (On/Off/On)
|
||||
4PDT (On/On/On Type 1)
|
||||
4PDT (On/On/On Type 2)
|
||||
5 band
|
||||
5 throws / 5 positions
|
||||
5PDT
|
||||
@@ -45,11 +47,11 @@
|
||||
9 throws / 9 positions
|
||||
A-O-I REGULATOR
|
||||
AC
|
||||
ANSI
|
||||
AWG
|
||||
Alternate
|
||||
And
|
||||
Angle Offset
|
||||
Apply Model
|
||||
B-C-E BJT
|
||||
Background
|
||||
Box
|
||||
@@ -83,6 +85,7 @@ Dots (Gradual)
|
||||
Dots (Uniform)
|
||||
Double Rails
|
||||
Double Rods
|
||||
Draw Standard
|
||||
Drop
|
||||
E+
|
||||
E-B-C BJT
|
||||
@@ -93,6 +96,7 @@ Filament Voltage
|
||||
Français
|
||||
G-D-S JFET
|
||||
G-D-S MOSFET
|
||||
G-I-O REGULATOR
|
||||
G-O-I REGULATOR
|
||||
G-S-D JFET
|
||||
G-S-D MOSFET
|
||||
@@ -101,6 +105,7 @@ Generate DIYLC Netlist (incl. Switches)
|
||||
Gray
|
||||
Humbucking - 4 leads
|
||||
I-G-O REGULATOR
|
||||
IEC
|
||||
Italiano
|
||||
Lin
|
||||
Log
|
||||
@@ -126,10 +131,10 @@ Or
|
||||
PAF
|
||||
PCB
|
||||
PNP
|
||||
Pitch
|
||||
Poles
|
||||
Português
|
||||
RS
|
||||
RY1
|
||||
Rectangle
|
||||
Rev log
|
||||
S-G-D JFET
|
||||
@@ -139,6 +144,7 @@ SPDT
|
||||
SPDT (On/Off/On)
|
||||
SPDT (On/On)
|
||||
SPST
|
||||
Screw Position
|
||||
Shorting
|
||||
Show Project Explorer
|
||||
Single - North
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user