diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index a4cc5552..748526e8 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java new file mode 100644 index 00000000..bd36e2a5 --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java @@ -0,0 +1,169 @@ +/* + + 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; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Point; + +import org.diylc.common.ObjectCache; +import org.diylc.common.SimpleComponentTransformer; +import org.diylc.common.OrientationHV; +import org.diylc.components.AbstractComponent; +import org.diylc.components.AbstractTransparentComponent; +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.measures.Size; +import org.diylc.core.measures.SizeUnit; + +@ComponentDescriptor(name = "Cut Line", category = "Connectivity", author = "Branislav Stojkovic", description = "Cut line", instanceNamePrefix = "CL", stretchable = false, zOrder = IDIYComponent.COMPONENT, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, transformer = SimpleComponentTransformer.class) +public class CutLine extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + public static Size WIDTH = new Size(0.125d, SizeUnit.in); + public static Size LENGTH = new Size(3.125d, SizeUnit.in); + public static Color COLOR = Color.black; + + private Size width = WIDTH; + private Size length = LENGTH; + private Color color = COLOR; + private Point point = new Point(0, 0); + private OrientationHV orientation = OrientationHV.VERTICAL; + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } + int w = getClosestOdd((int) getWidth().convertToPixels()); + int l = getClosestOdd((int) getLength().convertToPixels()); + g2d.setColor(componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : color); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(w)); + + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); + } + + if (getOrientation() == OrientationHV.HORIZONTAL) + g2d.drawLine(point.x, point.y, point.x + l, point.y); + else + g2d.drawLine(point.x, point.y, point.x, point.y + l); + + g2d.setComposite(oldComposite); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); + g2d.setColor(COLOR); + g2d.drawLine(width / 2, height - 2, width / 2, 1); + } + + @EditableProperty + public Size getWidth() { + return width; + } + + public void setWidth(Size width) { + this.width = width; + } + + @EditableProperty + public Size getLength() { + return length; + } + + public void setLength(Size length) { + this.length = length; + } + + @EditableProperty + public OrientationHV getOrientation() { + return orientation; + } + + public void setOrientation(OrientationHV orientation) { + this.orientation = orientation; + } + + @Override + public String getName() { + return super.getName(); + } + + @Override + public int getControlPointCount() { + return 1; + } + + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @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 getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @Override + public Void getValue() { + return null; + } + + @Override + public void setValue(Void value) { + } +} diff --git a/diylc/diylc-library/src/org/diylc/components/transform/TrimmerTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/TrimmerTransformer.java new file mode 100644 index 00000000..0a182376 --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/transform/TrimmerTransformer.java @@ -0,0 +1,94 @@ +//package org.diylc.components.transform; +// +//import java.awt.Point; +//import java.awt.geom.AffineTransform; +// +//import org.diylc.common.IComponentTransformer; +//import org.diylc.common.Orientation; +//import org.diylc.components.passive.TrimmerPotentiometer; +//import org.diylc.core.IDIYComponent; +// +//public class TrimmerTransformer implements IComponentTransformer { +// +// @Override +// public boolean canRotate(IDIYComponent component) { +// return component.getClass().equals(TrimmerPotentiometer.class); +// } +// +// @Override +// public boolean canMirror(IDIYComponent component) { +// return component.getClass().equals(TrimmerPotentiometer.class); +// } +// +// @Override +// public boolean mirroringChangesCircuit() { +// return true; +// } +// +// @Override +// public void rotate(IDIYComponent component, Point center, int direction) { +// AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); +// for (int index = 0; index < component.getControlPointCount(); index++) { +// Point p = new Point(component.getControlPoint(index)); +// rotate.transform(p, p); +// component.setControlPoint(p, index); +// } +// +// TrimmerPotentiometer potentiometer = (TrimmerPotentiometer) component; +// Orientation o = potentiometer.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]; +// potentiometer.setOrientation(o); +// } +// +// @SuppressWarnings("incomplete-switch") +// @Override +// public void mirror(IDIYComponent component, Point center, int direction) { +// TrimmerPotentiometer potentiometer = (TrimmerPotentiometer) component; +// int dx = center.x - potentiometer.getControlPoint(1).x; +// int dy = center.y - potentiometer.getControlPoint(1).y; +// if (direction == IComponentTransformer.HORIZONTAL) { +// Orientation o = potentiometer.getOrientation(); +// switch (o) { +// case _90: +// o = Orientation._270; +// break; +// case _270: +// o = Orientation._90; +// } +// +// for (int i = 0; i < potentiometer.getControlPointCount(); i++) { +// Point p = potentiometer.getControlPoint(i); +// potentiometer +// .setControlPoint( +// new Point(p.x + 2 * dx, p.y + (potentiometer.getControlPoint(2).y - potentiometer.getControlPoint(0).y)), +// i); +// } +// +// potentiometer.setOrientation(o); +// } else { +// Orientation o = potentiometer.getOrientation(); +// switch (o) { +// case DEFAULT: +// o = Orientation._180; +// break; +// case _180: +// o = Orientation.DEFAULT; +// } +// +// for (int i = 0; i < potentiometer.getControlPointCount(); i++) { +// Point p = potentiometer.getControlPoint(i); +// potentiometer +// .setControlPoint(new Point(p.x + (potentiometer.getControlPoint(2).x - potentiometer.getControlPoint(0).x), +// p.y + 2 * dy), i); +// } +// +// potentiometer.setOrientation(o); +// } +// } +//} diff --git a/diylc/diylc-swing/.classpath b/diylc/diylc-swing/.classpath index 925f1004..025315bc 100644 --- a/diylc/diylc-swing/.classpath +++ b/diylc/diylc-swing/.classpath @@ -14,7 +14,7 @@ - + diff --git a/diylc/diylc-swing/DIYLCStarter.launch b/diylc/diylc-swing/DIYLCStarter.launch index 2d95bedf..6d1af050 100644 --- a/diylc/diylc-swing/DIYLCStarter.launch +++ b/diylc/diylc-swing/DIYLCStarter.launch @@ -9,7 +9,6 @@ - diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 004ee6f7..748526e8 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 12bac425..e6a597da 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 2ce39730..df812549 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1822,6 +1822,10 @@ NEW_FEATURE Using right click to draw a selection rectangle doesn't move objects under the cursor (useful for selecting multiple components that have a big board below) + + NEW_FEATURE + "Cut Line" component added to designate where a custom eyelet/turret boards needs to be cut + IMPROVEMENT Increased padding between schematic symbols and their labels