diff --git a/diylc/diylc-core/src/org/diylc/common/DefaultTransformer.java b/diylc/diylc-core/src/org/diylc/common/DefaultTransformer.java index dfd98f91..d75110a8 100644 --- a/diylc/diylc-core/src/org/diylc/common/DefaultTransformer.java +++ b/diylc/diylc-core/src/org/diylc/common/DefaultTransformer.java @@ -21,8 +21,8 @@ */ package org.diylc.common; -import java.awt.Point; - +import java.awt.geom.Point2D; + import org.diylc.core.IDIYComponent; public class DefaultTransformer implements IComponentTransformer { @@ -43,11 +43,11 @@ public class DefaultTransformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { + public void rotate(IDIYComponent component, Point2D center, int direction) { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { } } diff --git a/diylc/diylc-core/src/org/diylc/common/IComponentTransformer.java b/diylc/diylc-core/src/org/diylc/common/IComponentTransformer.java index 2d9d503d..e2cd78eb 100644 --- a/diylc/diylc-core/src/org/diylc/common/IComponentTransformer.java +++ b/diylc/diylc-core/src/org/diylc/common/IComponentTransformer.java @@ -21,8 +21,8 @@ */ package org.diylc.common; -import java.awt.Point; - +import java.awt.geom.Point2D; + import org.diylc.core.IDIYComponent; public interface IComponentTransformer { @@ -39,7 +39,7 @@ public interface IComponentTransformer { boolean mirroringChangesCircuit(); - void rotate(IDIYComponent component, Point center, int direction); + void rotate(IDIYComponent component, Point2D center, int direction); - void mirror(IDIYComponent component, Point center, int direction); + void mirror(IDIYComponent component, Point2D center, int direction); } diff --git a/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java b/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java index 8bab2c58..d3bce636 100644 --- a/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java +++ b/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java @@ -21,13 +21,13 @@ */ package org.diylc.common; -import java.awt.Point; -import java.awt.geom.Rectangle2D; -import java.util.Collection; -import java.util.List; - -import org.diylc.core.ExpansionMode; -import org.diylc.core.IDIYComponent; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.util.Collection; +import java.util.List; + +import org.diylc.core.ExpansionMode; +import org.diylc.core.IDIYComponent; import org.diylc.core.measures.Size; public interface ISelectionProcessor { @@ -55,7 +55,7 @@ public interface ISelectionProcessor { * @param includeLocked * @return */ - List> findComponentsAt(Point point, boolean includeLocked); + List> findComponentsAt(Point2D point, boolean includeLocked); /** * Expands the current selection to include surrounding components. Options are controlled with diff --git a/diylc/diylc-core/src/org/diylc/common/SimpleComponentTransformer.java b/diylc/diylc-core/src/org/diylc/common/SimpleComponentTransformer.java index d7ba55b3..899b8871 100644 --- a/diylc/diylc-core/src/org/diylc/common/SimpleComponentTransformer.java +++ b/diylc/diylc-core/src/org/diylc/common/SimpleComponentTransformer.java @@ -21,9 +21,10 @@ */ package org.diylc.common; -import java.awt.Point; -import java.awt.geom.AffineTransform; - +import java.awt.Point; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + import org.diylc.core.IDIYComponent; public class SimpleComponentTransformer implements IComponentTransformer { @@ -44,23 +45,23 @@ public class SimpleComponentTransformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + 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++) { - Point p = new Point(component.getControlPoint(index)); - rotate.transform(p, p); + Point2D p = new Point2D.Double(); + rotate.transform(component.getControlPoint(index), p); component.setControlPoint(p, index); } } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = component.getControlPoint(i); + Point2D p = component.getControlPoint(i); if (direction == IComponentTransformer.HORIZONTAL) { - component.setControlPoint(new Point(p.x - 2 * (p.x - center.x), p.y), i); + component.setControlPoint(new Point2D.Double(p.getX() - 2 * (p.getX() - center.getX()), p.getY()), i); } else { - component.setControlPoint(new Point(p.x, p.y - 2 * (p.y - center.y)), i); + component.setControlPoint(new Point.Double(p.getX(), p.getY() - 2 * (p.getY() - center.getY())), i); } } } diff --git a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java index 4dcd0afd..12797e8e 100644 --- a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -23,8 +23,8 @@ package org.diylc.components; import java.awt.Color; import java.awt.Font; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.lang.reflect.Array; import java.lang.reflect.Field; @@ -117,23 +117,23 @@ public abstract class AbstractComponent implements IDIYComponent { return false; } } - int minX = Integer.MAX_VALUE; - int minY = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int maxY = Integer.MIN_VALUE; + double minX = Integer.MAX_VALUE; + double minY = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double maxY = Integer.MIN_VALUE; for (int i = 0; i < getControlPointCount(); i++) { - Point p = getControlPoint(i); - if (minX > p.x) { - minX = p.x; + Point2D p = getControlPoint(i); + if (minX > p.getX()) { + minX = p.getX(); } - if (maxX < p.x) { - maxX = p.x; + if (maxX < p.getX()) { + maxX = p.getX(); } - if (minY > p.y) { - minY = p.y; + if (minY > p.getY()) { + minY = p.getY(); } - if (maxY < p.y) { - maxY = p.y; + if (maxY < p.getY()) { + maxY = p.getY(); } } Rectangle2D rect = new Rectangle2D.Double(minX, minY, maxX - minX, maxY - minY); @@ -160,18 +160,19 @@ public abstract class AbstractComponent implements IDIYComponent { // Deep copy point arrays. // TODO: something nicer if (value != null && value.getClass().isArray() - && value.getClass().getComponentType().isAssignableFrom(Point.class)) { + && value.getClass().getComponentType().isAssignableFrom(Point2D.class)) { Object newArray = Array.newInstance(value.getClass().getComponentType(), Array.getLength(value)); for (int i = 0; i < Array.getLength(value); i++) { - Point p = (Point) Array.get(value, i); - Array.set(newArray, i, new Point(p)); + Point2D p = (Point2D) Array.get(value, i); + Array.set(newArray, i, new Point2D.Double(p.getX(), p.getY())); } value = newArray; } // Deep copy points. // TODO: something nicer - if (value != null && value instanceof Point) { - value = new Point((Point) value); + if (value != null && value instanceof Point2D) { + Point2D p = (Point2D) value; + value = new Point2D.Double(p.getX(), p.getY()); } field.set(newInstance, value); diff --git a/diylc/diylc-core/src/org/diylc/components/AbstractCurvedComponent.java b/diylc/diylc-core/src/org/diylc/components/AbstractCurvedComponent.java index a80a001c..6245b19f 100644 --- a/diylc/diylc-core/src/org/diylc/components/AbstractCurvedComponent.java +++ b/diylc/diylc-core/src/org/diylc/components/AbstractCurvedComponent.java @@ -21,7 +21,6 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.geom.CubicCurve2D; import java.awt.geom.Path2D; import java.awt.geom.Point2D; @@ -53,12 +52,12 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp public static Size DEFAULT_SIZE = new Size(1d, SizeUnit.in); // for backward compatibility - protected Point[] controlPoints = null; + protected Point2D[] controlPoints = null; - protected Point[] controlPoints2 = new Point[] {new Point(0, 0), - new Point((int) (DEFAULT_SIZE.convertToPixels() / 2), 0), - new Point((int) (DEFAULT_SIZE.convertToPixels() / 2), (int) (DEFAULT_SIZE.convertToPixels())), - new Point((int) DEFAULT_SIZE.convertToPixels(), (int) DEFAULT_SIZE.convertToPixels())}; + protected Point2D[] controlPoints2 = new Point2D[] {new Point2D.Double(0, 0), + new Point2D.Double(DEFAULT_SIZE.convertToPixels() / 2, 0), + new Point2D.Double(DEFAULT_SIZE.convertToPixels() / 2, DEFAULT_SIZE.convertToPixels()), + new Point2D.Double(DEFAULT_SIZE.convertToPixels(), DEFAULT_SIZE.convertToPixels())}; protected Color color = getDefaultColor(); protected PointCount pointCount = PointCount.FOUR; @@ -102,7 +101,7 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp return; } - Point[] p = getControlPoints(); + Point2D[] p = getControlPoints(); // smoothen the curve if needed if (getSmooth() && lastUpdatePointIndex >= 0) { @@ -127,25 +126,25 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp g2d.setStroke(Constants.DASHED_STROKE); g2d.setColor(GUIDELINE_COLOR); for (int i = 0; i < p.length - 1; i++) { - g2d.drawLine(p[i].x, p[i].y, p[i + 1].x, p[i + 1].y); + g2d.drawLine((int)p[i].getX(), (int)p[i].getY(), (int)p[i + 1].getX(), (int)p[i + 1].getY()); } drawingObserver.startTracking(); } Path2D path = new Path2D.Double(); - path.moveTo(p[0].x, p[0].y); + path.moveTo(p[0].getX(), p[0].getY()); if (getPointCount() == PointCount.TWO) { - path.lineTo(p[1].x, p[1].y); + path.lineTo(p[1].getX(), p[1].getY()); } else if (getPointCount() == PointCount.THREE) { - path.curveTo(p[1].x, p[1].y, p[1].x, p[1].y, p[2].x, p[2].y); + path.curveTo(p[1].getX(), p[1].getY(), p[1].getX(), p[1].getY(), p[2].getX(), p[2].getY()); } else if (getPointCount() == PointCount.FOUR) { - path.curveTo(p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y); + path.curveTo(p[1].getX(), p[1].getY(), p[2].getX(), p[2].getY(), p[3].getX(), p[3].getY()); } else if (getPointCount() == PointCount.FIVE) { - path.quadTo(p[1].x, p[1].y, p[2].x, p[2].y); - path.quadTo(p[3].x, p[3].y, p[4].x, p[4].y); + path.quadTo(p[1].getX(), p[1].getY(), p[2].getX(), p[2].getY()); + path.quadTo(p[3].getX(), p[3].getY(), p[4].getX(), p[4].getY()); } else if (getPointCount() == PointCount.SEVEN) { - path.curveTo(p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y); - path.curveTo(p[4].x, p[4].y, p[5].x, p[5].y, p[6].x, p[6].y); + path.curveTo(p[1].getX(), p[1].getY(), p[2].getX(), p[2].getY(), p[3].getX(), p[3].getY()); + path.curveTo(p[4].getX(), p[4].getY(), p[5].getX(), p[5].getY(), p[6].getX(), p[6].getY()); } Composite oldComposite = g2d.getComposite(); @@ -166,23 +165,23 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp return pointCount; } - protected Point[] getControlPoints() { + protected Point2D[] getControlPoints() { if (this.controlPoints != null) { // ensure backward compatibility by copying points from the old structure to the new one switch (getPointCount()) { case TWO: - this.controlPoints2 = new Point[2]; + this.controlPoints2 = new Point2D[2]; this.controlPoints2[0] = this.controlPoints[0]; this.controlPoints2[1] = this.controlPoints[3]; break; case THREE: - this.controlPoints2 = new Point[3]; + this.controlPoints2 = new Point2D[3]; this.controlPoints2[0] = this.controlPoints[0]; this.controlPoints2[1] = this.controlPoints[1]; this.controlPoints2[2] = this.controlPoints[3]; break; case FOUR: - this.controlPoints2 = new Point[4]; + this.controlPoints2 = new Point2D[4]; this.controlPoints2[0] = this.controlPoints[0]; this.controlPoints2[1] = this.controlPoints[1]; this.controlPoints2[2] = this.controlPoints[2]; @@ -198,42 +197,42 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp } public void setPointCount(PointCount pointCount) { - Point[] p = getControlPoints(); - Point[] newPoints = new Point[pointCount.count]; + Point2D[] p = getControlPoints(); + Point2D[] newPoints = new Point2D[pointCount.count]; newPoints[0] = p[0]; newPoints[pointCount.count - 1] = p[p.length - 1]; if (pointCount == PointCount.THREE) { newPoints[1] = - new Point((newPoints[pointCount.count - 1].x + newPoints[0].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[0].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[0].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[0].getY()) / 2); } else if (pointCount == PointCount.FOUR) { newPoints[1] = - new Point((newPoints[pointCount.count - 1].x + newPoints[0].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[0].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[0].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[0].getY()) / 2); newPoints[2] = - new Point((newPoints[pointCount.count - 1].x + newPoints[0].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[0].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[0].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[0].getY()) / 2); } else if (pointCount == PointCount.FIVE) { newPoints[2] = - new Point((newPoints[pointCount.count - 1].x + newPoints[0].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[0].y) / 2); - newPoints[1] = new Point((newPoints[2].x + newPoints[0].x) / 2, (newPoints[2].y + newPoints[0].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[0].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[0].getY()) / 2); + newPoints[1] = new Point2D.Double((newPoints[2].getX() + newPoints[0].getX()) / 2, (newPoints[2].getY() + newPoints[0].getY()) / 2); newPoints[3] = - new Point((newPoints[pointCount.count - 1].x + newPoints[2].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[2].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[2].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[2].getY()) / 2); } else if (pointCount == PointCount.SEVEN) { newPoints[3] = - new Point((newPoints[pointCount.count - 1].x + newPoints[0].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[0].y) / 2); - newPoints[2] = new Point((newPoints[3].x + newPoints[0].x) / 2, (newPoints[3].y + newPoints[0].y) / 2); - newPoints[1] = new Point((newPoints[3].x + newPoints[0].x) / 2, (newPoints[3].y + newPoints[0].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[0].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[0].getY()) / 2); + newPoints[2] = new Point2D.Double((newPoints[3].getX() + newPoints[0].getX()) / 2, (newPoints[3].getY() + newPoints[0].getY()) / 2); + newPoints[1] = new Point2D.Double((newPoints[3].getX() + newPoints[0].getX()) / 2, (newPoints[3].getY() + newPoints[0].getY()) / 2); newPoints[4] = - new Point((newPoints[pointCount.count - 1].x + newPoints[3].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[3].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[3].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[3].getY()) / 2); newPoints[5] = - new Point((newPoints[pointCount.count - 1].x + newPoints[3].x) / 2, - (newPoints[pointCount.count - 1].y + newPoints[3].y) / 2); + new Point2D.Double((newPoints[pointCount.count - 1].getX() + newPoints[3].getX()) / 2, + (newPoints[pointCount.count - 1].getY() + newPoints[3].getY()) / 2); } this.controlPoints2 = newPoints; @@ -261,13 +260,13 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return getControlPoints()[index]; } @Override - public void setControlPoint(Point point, int index) { - Point[] p = getControlPoints(); + public void setControlPoint(Point2D point, int index) { + Point2D[] p = getControlPoints(); p[index].setLocation(point); this.lastUpdatePointIndex = index; // if (getSmooth()) { @@ -286,8 +285,8 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp // } } - private Point findThirdPoint(Point p0, Point p) { - return new Point(2 * p0.x - p.x, 2 * p0.y - p.y); + private Point2D findThirdPoint(Point2D p0, Point2D p) { + return new Point2D.Double(2 * p0.getX() - p.getX(), 2 * p0.getY() - p.getY()); } @EditableProperty(name = "Color") @@ -335,7 +334,7 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp public Size getLength() { double d = 0; try { - Point[] p = getControlPoints(); + Point2D[] p = getControlPoints(); if (getPointCount() == PointCount.TWO) { d = p[0].distance(p[1]); } else if (getPointCount() == PointCount.THREE) { @@ -364,21 +363,21 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp @Override public Rectangle2D getCachingBounds() { - int minX = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int minY = Integer.MAX_VALUE; - int maxY = Integer.MIN_VALUE; - int margin = 50; // hard coded, replace with something meaningful + double minX = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double minY = Integer.MAX_VALUE; + double maxY = Integer.MIN_VALUE; + double margin = 50; // hard coded, replace with something meaningful for (int i = 0; i < getControlPointCount(); i++) { - Point p = getControlPoint(i); - if (p.x < minX) - minX = p.x; - if (p.x > maxX) - maxX = p.x; - if (p.y < minY) - minY = p.y; - if (p.y > maxY) - maxY = p.y; + Point2D p = getControlPoint(i); + if (p.getX() < minX) + minX = p.getX(); + if (p.getX() > maxX) + maxX = p.getX(); + if (p.getY() < minY) + minY = p.getY(); + if (p.getY() > maxY) + maxY = p.getY(); } return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin); diff --git a/diylc/diylc-core/src/org/diylc/components/transform/DefaultTransformer.java b/diylc/diylc-core/src/org/diylc/components/transform/DefaultTransformer.java index 4afb8acc..28f931d7 100644 --- a/diylc/diylc-core/src/org/diylc/components/transform/DefaultTransformer.java +++ b/diylc/diylc-core/src/org/diylc/components/transform/DefaultTransformer.java @@ -21,9 +21,9 @@ */ package org.diylc.components.transform; -import java.awt.Point; - -import org.diylc.common.IComponentTransformer; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; import org.diylc.core.IDIYComponent; public class DefaultTransformer implements IComponentTransformer { @@ -44,11 +44,11 @@ public class DefaultTransformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { + public void rotate(IDIYComponent component, Point2D center, int direction) { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { } } diff --git a/diylc/diylc-core/src/org/diylc/components/transform/LeadedComponentTransformer.java b/diylc/diylc-core/src/org/diylc/components/transform/LeadedComponentTransformer.java index c1c3d4cb..ca6b7e71 100644 --- a/diylc/diylc-core/src/org/diylc/components/transform/LeadedComponentTransformer.java +++ b/diylc/diylc-core/src/org/diylc/components/transform/LeadedComponentTransformer.java @@ -21,10 +21,10 @@ */ package org.diylc.components.transform; -import java.awt.Point; -import java.awt.geom.AffineTransform; - -import org.diylc.common.IComponentTransformer; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; import org.diylc.core.IDIYComponent; public class LeadedComponentTransformer implements IComponentTransformer { @@ -45,23 +45,23 @@ public class LeadedComponentTransformer implements IComponentTransformer { } @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); + 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); } } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = component.getControlPoint(i); + Point2D p = component.getControlPoint(i); if (direction == IComponentTransformer.HORIZONTAL) { - component.setControlPoint(new Point(p.x - 2 * (p.x - center.x), p.y), i); + component.setControlPoint(new Point2D.Double(p.getX() - 2 * (p.getX() - center.getX()), p.getY()), i); } else { - component.setControlPoint(new Point(p.x, p.y - 2 * (p.y - center.y)), i); + component.setControlPoint(new Point2D.Double(p.getX(), p.getY() - 2 * (p.getY() - center.getY())), i); } } } diff --git a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java index 7bb4b5a3..af552ad9 100644 --- a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java +++ b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java @@ -21,12 +21,12 @@ */ package org.diylc.core; -import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.Graphics2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; -import java.io.Serializable; +import java.io.Serializable; -import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; /** @@ -89,7 +89,7 @@ public interface IDIYComponent extends Serializable, Cloneable { * @param index * @return control point at the specified index. */ - Point getControlPoint(int index); + Point2D getControlPoint(int index); /** * Updates the control point at the specified index. @@ -97,7 +97,7 @@ public interface IDIYComponent extends Serializable, Cloneable { * @param point * @param index */ - void setControlPoint(Point point, int index); + void setControlPoint(Point2D point, int index); /** * @param index diff --git a/diylc/diylc-core/src/org/diylc/core/Template.java b/diylc/diylc-core/src/org/diylc/core/Template.java index a6fd837d..1ce520ac 100644 --- a/diylc/diylc-core/src/org/diylc/core/Template.java +++ b/diylc/diylc-core/src/org/diylc/core/Template.java @@ -20,16 +20,16 @@ */ package org.diylc.core; - -import java.awt.Point; -import java.util.List; + +import java.awt.geom.Point2D; +import java.util.List; import java.util.Map; public class Template { private String name; private Map values; - private List points; + private List points; @SuppressWarnings("unused") @Deprecated private boolean defaultFlag; @@ -37,7 +37,7 @@ public class Template { public Template() { } - public Template(String name, Map values, List points) { + public Template(String name, Map values, List points) { this.name = name; this.values = values; this.points = points; @@ -59,11 +59,11 @@ public class Template { this.values = values; } - public List getPoints() { + public List getPoints() { return points; } - public void setPoints(List points) { + public void setPoints(List points) { this.points = points; } diff --git a/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java b/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java index cfd7c6aa..6a4f10c3 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java +++ b/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java @@ -21,7 +21,7 @@ */ package org.diylc.presenter; -import java.awt.Point; +import java.awt.geom.Point2D; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -37,18 +37,18 @@ public class CalcUtils { * @param x * @return */ - public static int roundToGrid(double x, Size gridSpacing) { + public static double roundToGrid(double x, Size gridSpacing) { double grid = gridSpacing.convertToPixels(); - return (int) Math.round((Math.round(1f * x / grid) * grid)); + return (Math.round(1f * x / grid) * grid); } - public static void snapPointToGrid(Point point, Size gridSpacing) { - int x = roundToGrid(point.x, gridSpacing); - int y = roundToGrid(point.y, gridSpacing); + public static void snapPointToGrid(Point2D point, Size gridSpacing) { + double x = roundToGrid(point.getX(), gridSpacing); + double y = roundToGrid(point.getY(), gridSpacing); point.setLocation(x, y); } - public static void snapPointToObjects(Point point, Size gridSpacing, IDIYComponent component, List> components) { + public static void snapPointToObjects(Point2D point, Size gridSpacing, IDIYComponent component, List> components) { for (IDIYComponent c : components) { if (c == component) continue; diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java index 598f4bcb..71f92aa0 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java @@ -18,8 +18,8 @@ package org.diylc.presenter; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.geom.Area; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.util.HashMap; @@ -93,7 +93,7 @@ public class DrawingCache { if (type != null && type.getEnableCache()) { // if we need to apply caching - Point firstPoint = component.getControlPoint(0); + Point2D firstPoint = component.getControlPoint(0); CacheValue value = renderAndCache(component, g2d, componentState, outlineMode, project, zoom); @@ -107,8 +107,8 @@ public class DrawingCache { } try { // draw cached image - g2d.getCanvasGraphics().drawImage(value.getImage(), (int) ((firstPoint.x - value.getDx()) * zoom), - (int) ((firstPoint.y - value.getDy())* zoom), null); + g2d.getCanvasGraphics().drawImage(value.getImage(), (int) ((firstPoint.getX() - value.getDx()) * zoom), + (int) ((firstPoint.getY() - value.getDy())* zoom), null); } finally { if (Math.abs(1.0 - zoom) > 1e-4) { g2d.getCanvasGraphics().scale(zoom, zoom); @@ -157,7 +157,7 @@ public class DrawingCache { private CacheValue renderAndCache(IDIYComponent component, G2DWrapper g2d, ComponentState componentState, boolean outlineMode, Project project, double zoom) { // if we need to apply caching - Point firstPoint = component.getControlPoint(0); + Point2D firstPoint = component.getControlPoint(0); // cache hit! CacheValue value = null; @@ -172,8 +172,8 @@ public class DrawingCache { int width = (int)Math.round(rect.getWidth() * zoom); int height = (int)Math.round(rect.getHeight() * zoom); // calculate the position of the first point relative to the caching bounds - int dx = (int) (firstPoint.x - rect.getX()); - int dy = (int) (firstPoint.y - rect.getY()); + int dx = (int) (firstPoint.getX() - rect.getX()); + int dy = (int) (firstPoint.getY() - rect.getY()); // create image BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); @@ -191,7 +191,7 @@ public class DrawingCache { cg2d.scale(zoom, zoom); } // translate to make the top-left corner of the component match (0, 0) - cg2d.translate(-firstPoint.x + dx, -firstPoint.y + dy); + cg2d.translate(-firstPoint.getX() + dx, -firstPoint.getY() + dy); // wrap the graphics so we can track G2DWrapper wrapper = new G2DWrapper(cg2d, zoom); diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java index 16894028..723eb1dd 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java @@ -29,6 +29,7 @@ import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Line2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.Collection; @@ -155,7 +156,7 @@ public class DrawingManager { */ public List> drawProject(Graphics2D g2d, Project project, Set drawOptions, IComponentFilter filter, Rectangle selectionRect, Collection> selectedComponents, - Set> lockedComponents, Set> groupedComponents, List controlPointSlot, + Set> lockedComponents, Set> groupedComponents, List controlPointSlot, List> componentSlot, boolean dragInProgress, Double externalZoom, Rectangle2D visibleRect) { long totalStartTime = System.nanoTime(); failedComponents.clear(); @@ -370,9 +371,9 @@ public class DrawingManager { .contains(component) && !selectedComponents.contains(component) && component .getControlPointVisibilityPolicy(i) == VisibilityPolicy.ALWAYS))) { g2dWrapper.setColor(CONTROL_POINT_COLOR); - Point controlPoint = component.getControlPoint(i); + Point2D controlPoint = component.getControlPoint(i); int pointSize = CONTROL_POINT_SIZE - 2; - g2dWrapper.fillOval(controlPoint.x - pointSize / 2, controlPoint.y - pointSize / 2, pointSize, pointSize); + g2dWrapper.fillOval((int)(controlPoint.getX() - pointSize / 2), (int)(controlPoint.getY() - pointSize / 2), pointSize, pointSize); } } } @@ -384,14 +385,14 @@ public class DrawingManager { && (component.getControlPointVisibilityPolicy(i) == VisibilityPolicy.WHEN_SELECTED || component .getControlPointVisibilityPolicy(i) == VisibilityPolicy.ALWAYS)) { - Point controlPoint = component.getControlPoint(i); + Point2D controlPoint = component.getControlPoint(i); int pointSize = CONTROL_POINT_SIZE; g2dWrapper.setColor(SELECTED_CONTROL_POINT_COLOR.darker()); - g2dWrapper.fillOval(controlPoint.x - pointSize / 2, controlPoint.y - pointSize / 2, pointSize, pointSize); + g2dWrapper.fillOval((int)(controlPoint.getX() - pointSize / 2), (int)(controlPoint.getY() - pointSize / 2), pointSize, pointSize); g2dWrapper.setColor(SELECTED_CONTROL_POINT_COLOR); - g2dWrapper.fillOval(controlPoint.x - CONTROL_POINT_SIZE / 2 + 1, controlPoint.y - CONTROL_POINT_SIZE / 2 - + 1, CONTROL_POINT_SIZE - 2, CONTROL_POINT_SIZE - 2); + g2dWrapper.fillOval((int)(controlPoint.getX() - CONTROL_POINT_SIZE / 2 + 1), (int)(controlPoint.getY() - CONTROL_POINT_SIZE / 2 + + 1), CONTROL_POINT_SIZE - 2, CONTROL_POINT_SIZE - 2); } } } @@ -417,13 +418,13 @@ public class DrawingManager { // Draw control points of the component in the slot. if (controlPointSlot != null) { - for (Point point : controlPointSlot) { + for (Point2D point : controlPointSlot) { if (point != null) { g2dWrapper.setColor(SELECTED_CONTROL_POINT_COLOR.darker()); - g2dWrapper.fillOval(point.x - CONTROL_POINT_SIZE / 2, point.y - CONTROL_POINT_SIZE / 2, CONTROL_POINT_SIZE, + g2dWrapper.fillOval((int)(point.getX() - CONTROL_POINT_SIZE / 2), (int)(point.getY() - CONTROL_POINT_SIZE / 2), CONTROL_POINT_SIZE, CONTROL_POINT_SIZE); g2dWrapper.setColor(SELECTED_CONTROL_POINT_COLOR); - g2dWrapper.fillOval(point.x - CONTROL_POINT_SIZE / 2 + 1, point.y - CONTROL_POINT_SIZE / 2 + 1, + g2dWrapper.fillOval((int)(point.getX() - CONTROL_POINT_SIZE / 2 + 1), (int)(point.getY() - CONTROL_POINT_SIZE / 2 + 1), CONTROL_POINT_SIZE - 2, CONTROL_POINT_SIZE - 2); } } @@ -539,7 +540,7 @@ public class DrawingManager { continuityAreaCache = null; } - public List> findComponentsAt(Point point, Project project) { + public List> findComponentsAt(Point2D point, Project project) { List> components = new ArrayList>(); for (int i = 0; i < project.getComponents().size(); i++) { ComponentArea area = componentAreaMap.get(project.getComponents().get(i)); @@ -588,7 +589,7 @@ public class DrawingManager { messageDispatcher.dispatchMessage(EventType.REPAINT); } - public void findContinuityAreaAtPoint(Project project, Point p) { + public void findContinuityAreaAtPoint(Project project, Point2D p) { if (continuityAreaCache == null) continuityAreaCache = getContinuityAreas(project); diff --git a/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java b/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java index a7b91fb6..7b0e0970 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java @@ -21,29 +21,29 @@ */ package org.diylc.presenter; -import java.awt.Point; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; +import java.awt.geom.Point2D; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; -import java.util.List; -import java.util.Map; +import java.util.List; +import java.util.Map; import java.util.Set; -import org.apache.log4j.Logger; -import org.diylc.appframework.miscutils.ConfigurationManager; -import org.diylc.common.ComponentType; -import org.diylc.common.IPlugInPort; -import org.diylc.common.Orientation; -import org.diylc.common.OrientationHV; -import org.diylc.common.PropertyWrapper; -import org.diylc.core.CreationMethod; -import org.diylc.core.IDIYComponent; -import org.diylc.core.Project; -import org.diylc.core.Template; -import org.diylc.core.annotations.KeywordPolicy; +import org.apache.log4j.Logger; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.ComponentType; +import org.diylc.common.IPlugInPort; +import org.diylc.common.Orientation; +import org.diylc.common.OrientationHV; +import org.diylc.common.PropertyWrapper; +import org.diylc.core.CreationMethod; +import org.diylc.core.IDIYComponent; +import org.diylc.core.Project; +import org.diylc.core.Template; +import org.diylc.core.annotations.KeywordPolicy; import org.diylc.core.measures.Size; /** @@ -60,8 +60,8 @@ public class InstantiationManager { private ComponentType componentTypeSlot; private Template template; private List> componentSlot; - private Point firstControlPoint; - private Point potentialControlPoint; + private Point2D firstControlPoint; + private Point2D potentialControlPoint; public static final ComponentType clipboardType = new ComponentType("Clipboard contents", "Components from the clipboard", CreationMethod.SINGLE_CLICK, "Multi", "", "", null, null, 0, false, null, @@ -84,15 +84,15 @@ public class InstantiationManager { return componentSlot; } - public Point getFirstControlPoint() { + public Point2D getFirstControlPoint() { return firstControlPoint; } - public Point getPotentialControlPoint() { + public Point2D getPotentialControlPoint() { return potentialControlPoint; } - public void setPotentialControlPoint(Point potentialControlPoint) { + public void setPotentialControlPoint(Point2D potentialControlPoint) { this.potentialControlPoint = potentialControlPoint; } @@ -105,10 +105,10 @@ public class InstantiationManager { } else { switch (componentTypeSlot.getCreationMethod()) { case POINT_BY_POINT: - this.componentSlot = forceInstatiate ? instantiateComponent(componentTypeSlot, template, new Point(0, 0), currentProject) : null; + this.componentSlot = forceInstatiate ? instantiateComponent(componentTypeSlot, template, new Point2D.Double(0, 0), currentProject) : null; break; case SINGLE_CLICK: - this.componentSlot = instantiateComponent(componentTypeSlot, template, new Point(0, 0), currentProject); + this.componentSlot = instantiateComponent(componentTypeSlot, template, new Point2D.Double(0, 0), currentProject); break; } } @@ -116,7 +116,7 @@ public class InstantiationManager { this.potentialControlPoint = null; } - public void instatiatePointByPoint(Point scaledPoint, Project currentProject) throws Exception { + public void instatiatePointByPoint(Point2D scaledPoint, Project currentProject) throws Exception { firstControlPoint = scaledPoint; componentSlot = instantiateComponent(componentTypeSlot, template, firstControlPoint, currentProject); @@ -132,7 +132,7 @@ public class InstantiationManager { * @param scaledPoint * @return true, if any change is made */ - public boolean updatePointByPoint(Point scaledPoint) { + public boolean updatePointByPoint(Point2D scaledPoint) { boolean changeMade = !scaledPoint.equals(potentialControlPoint); potentialControlPoint = scaledPoint; if (componentSlot != null && !componentSlot.isEmpty()) { @@ -142,14 +142,14 @@ public class InstantiationManager { } @SuppressWarnings("unchecked") - public void pasteComponents(Collection> components, Point scaledPoint, boolean snapToGrid, + public void pasteComponents(Collection> components, Point2D scaledPoint, boolean snapToGrid, Size gridSpacing, boolean autoGroup, Project currentProject, boolean assignNewNames) { // Adjust location of components so they are centered under the mouse // cursor - int minX = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int minY = Integer.MAX_VALUE; - int maxY = Integer.MIN_VALUE; + double minX = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double minY = Integer.MAX_VALUE; + double maxY = Integer.MIN_VALUE; Set existingNames = new HashSet(); for (IDIYComponent c : currentProject.getComponents()) @@ -169,32 +169,32 @@ public class InstantiationManager { } for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = component.getControlPoint(i); - if (p.x > maxX) { - maxX = p.x; + Point2D p = component.getControlPoint(i); + if (p.getX() > maxX) { + maxX = p.getX(); } - if (p.x < minX) { - minX = p.x; + if (p.getX() < minX) { + minX = p.getX(); } - if (p.y > maxY) { - maxY = p.y; + if (p.getY() > maxY) { + maxY = p.getY(); } - if (p.y < minY) { - minY = p.y; + if (p.getY() < minY) { + minY = p.getY(); } } } - int x = minX; - int y = minY; + double x = minX; + double y = minY; if (snapToGrid) { x = CalcUtils.roundToGrid(x, gridSpacing); x = CalcUtils.roundToGrid(x, gridSpacing); } for (IDIYComponent component : components) { for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = component.getControlPoint(i); - p.translate(-x, -y); - component.setControlPoint(p, i); + Point2D p = component.getControlPoint(i); + Point2D newP = new Point2D.Double(p.getX() - x, p.getY() - y); + component.setControlPoint(newP, i); } } @@ -206,7 +206,7 @@ public class InstantiationManager { this.componentTypeSlot = autoGroup ? blockType : clipboardType; if (snapToGrid) { - scaledPoint = new Point(scaledPoint); + scaledPoint = new Point2D.Double(scaledPoint.getX(), scaledPoint.getY()); CalcUtils.snapPointToGrid(scaledPoint, gridSpacing); } // Update the location according to mouse location @@ -221,15 +221,15 @@ public class InstantiationManager { * @param gridSpacing * @return true if we need to refresh the canvas */ - public boolean updateSingleClick(Point scaledPoint, boolean snapToGrid, Size gridSpacing) { + public boolean updateSingleClick(Point2D scaledPoint, boolean snapToGrid, Size gridSpacing) { if (potentialControlPoint == null) { - potentialControlPoint = new Point(0, 0); + potentialControlPoint = new Point2D.Double(0, 0); } if (scaledPoint == null) { - scaledPoint = new Point(0, 0); + scaledPoint = new Point2D.Double(0, 0); } - int dx = scaledPoint.x - potentialControlPoint.x; - int dy = scaledPoint.y - potentialControlPoint.y; + double dx = scaledPoint.getX() - potentialControlPoint.getX(); + double dy = scaledPoint.getY() - potentialControlPoint.getY(); if (snapToGrid) { dx = CalcUtils.roundToGrid(dx, gridSpacing); dy = CalcUtils.roundToGrid(dy, gridSpacing); @@ -238,15 +238,15 @@ public class InstantiationManager { if (dx == 0 && dy == 0) { return false; } - potentialControlPoint.translate(dx, dy); + potentialControlPoint.setLocation(potentialControlPoint.getX() + dx, potentialControlPoint.getY() + dy); if (componentSlot == null) { LOG.error("Component slot should not be null!"); } else { - Point p = new Point(); + Point2D p = new Point2D.Double(); for (IDIYComponent component : componentSlot) { - for (int i = 0; i < component.getControlPointCount(); i++) { - p.setLocation(component.getControlPoint(i)); - p.translate(dx, dy); + for (int i = 0; i < component.getControlPointCount(); i++) { + Point2D oldP = component.getControlPoint(i); + p.setLocation(oldP.getX() + dx, oldP.getY() + dy); component.setControlPoint(p, i); } } @@ -255,7 +255,7 @@ public class InstantiationManager { } @SuppressWarnings("unchecked") - public List> instantiateComponent(ComponentType componentType, Template template, Point point, + public List> instantiateComponent(ComponentType componentType, Template template, Point2D point, Project currentProject) throws InstantiationException, IllegalAccessException { LOG.info("Instatiating component of type: " + componentType.getInstanceClass().getName()); @@ -266,9 +266,9 @@ public class InstantiationManager { // Translate them to the desired location. if (point != null) { - for (int j = 0; j < component.getControlPointCount(); j++) { - Point controlPoint = new Point(component.getControlPoint(j)); - controlPoint.translate(point.x, point.y); + for (int j = 0; j < component.getControlPointCount(); j++) { + Point2D p = component.getControlPoint(j); + Point2D controlPoint = new Point2D.Double(p.getX() + point.getX(), p.getY() + point.getY()); // snapPointToGrid(controlPoint); component.setControlPoint(controlPoint, j); } @@ -387,9 +387,9 @@ public class InstantiationManager { public void loadComponentShapeFromTemplate(IDIYComponent component, Template template) { if (template != null && template.getPoints() != null && template.getPoints().size() >= component.getControlPointCount()) { - for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = new Point(component.getControlPoint(0)); - p.translate(template.getPoints().get(i).x, template.getPoints().get(i).y); + for (int i = 0; i < component.getControlPointCount(); i++) { + Point2D oldP = component.getControlPoint(0); + Point2D p = new Point2D.Double(oldP.getX() + template.getPoints().get(i).getX(), oldP.getY() + template.getPoints().get(i).getY()); component.setControlPoint(p, i); } } diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index f8966c49..e189d791 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -202,10 +202,10 @@ public class Presenter implements IPlugInPort { // D&D private boolean dragInProgress = false; // Previous mouse location, not scaled for zoom factor. - private Point previousDragPoint = null; + private Point2D previousDragPoint = null; private Project preDragProject = null; private int dragAction; - private Point previousScaledPoint; + private Point2D previousScaledPoint; private DIYTest test = null; @@ -246,8 +246,8 @@ public class Presenter implements IPlugInPort { // IPlugInPort @Override - public Double[] getAvailableZoomLevels() { - return new Double[] {0.25d, 0.3333d, 0.5d, 0.6667d, 0.75d, 1d, 1.25d, 1.5d, 2d, 2.5d, 3d}; + public java.lang.Double[] getAvailableZoomLevels() { + return new java.lang.Double[] {0.25d, 0.3333d, 0.5d, 0.6667d, 0.75d, 1d, 1.25d, 1.5d, 2d, 2.5d, 3d}; } @Override @@ -502,7 +502,7 @@ public class Presenter implements IPlugInPort { } @Override - public void draw(Graphics2D g2d, Set drawOptions, final IComponentFilter filter, Double externalZoom, Rectangle2D visibleRect) { + public void draw(Graphics2D g2d, Set drawOptions, final IComponentFilter filter, java.lang.Double externalZoom, Rectangle2D visibleRect) { if (currentProject == null) { return; } @@ -566,7 +566,7 @@ public class Presenter implements IPlugInPort { * * @return */ - public List> findComponentsAtScaled(Point point, boolean includeLocked) { + public List> findComponentsAtScaled(Point2D point, boolean includeLocked) { List> components = drawingManager.findComponentsAt(point, currentProject); Iterator> iterator = components.iterator(); while (iterator.hasNext()) { @@ -579,8 +579,8 @@ public class Presenter implements IPlugInPort { } @Override - public List> findComponentsAt(Point point, boolean includeLocked) { - Point scaledPoint = scalePoint(point); + public List> findComponentsAt(Point2D point, boolean includeLocked) { + Point2D scaledPoint = scalePoint(point); List> components = findComponentsAtScaled(scaledPoint, includeLocked); return components; } @@ -601,7 +601,7 @@ public class Presenter implements IPlugInPort { test.addStep(DIYTest.MOUSE_CLICKED, params); } - Point scaledPoint = scalePoint(point); + Point2D scaledPoint = scalePoint(point); if (clickCount >= 2) { editSelection(); } else { @@ -728,9 +728,9 @@ public class Presenter implements IPlugInPort { } } - private void addPendingComponentsToProject(Point scaledPoint, ComponentType componentTypeSlot, Template template) { + private void addPendingComponentsToProject(Point2D scaledPoint, ComponentType componentTypeSlot, Template template) { List> componentSlot = instantiationManager.getComponentSlot(); - Point firstPoint = componentSlot.get(0).getControlPoint(0); + Point2D firstPoint = componentSlot.get(0).getControlPoint(0); // don't allow to create component with the same points if (scaledPoint == null || scaledPoint.equals(firstPoint)) return; @@ -924,7 +924,7 @@ public class Presenter implements IPlugInPort { for (int i = currentProject.getComponents().size() - 1; i >= 0; i--) { IDIYComponent component = currentProject.getComponents().get(i); for (int pointIndex = 0; pointIndex < component.getControlPointCount(); pointIndex++) { - Point controlPoint = component.getControlPoint(pointIndex); + Point2D controlPoint = component.getControlPoint(pointIndex); // Only consider selected components that are not grouped. if (selectedComponents.contains(component) && component.canPointMoveFreely(pointIndex) && findAllGroupedComponents(component).size() == 1) { @@ -945,7 +945,7 @@ public class Presenter implements IPlugInPort { } Point2D inPoint = - new Point2D.Double(1.0d * previousScaledPoint.x / Constants.PIXELS_PER_INCH, 1.0d * previousScaledPoint.y + new Point2D.Double(1.0d * previousScaledPoint.getX() / Constants.PIXELS_PER_INCH, 1.0d * previousScaledPoint.getY() / Constants.PIXELS_PER_INCH); Point2D mmPoint = new Point2D.Double(inPoint.getX() * SizeUnit.in.getFactor() / SizeUnit.cm.getFactor() * 10d, inPoint.getY() @@ -1123,7 +1123,7 @@ public class Presenter implements IPlugInPort { this.dragInProgress = true; this.dragAction = dragAction; this.preDragProject = currentProject.clone(); - Point scaledPoint = scalePoint(point); + Point2D scaledPoint = scalePoint(point); this.previousDragPoint = scaledPoint; List> components = forceSelectionRect ? null : findComponentsAtScaled(scaledPoint, false); if (controlPointMap != null && !this.controlPointMap.isEmpty()) { @@ -1207,9 +1207,9 @@ public class Presenter implements IPlugInPort { break; } for (Integer j : entry.getValue()) { - Point firstPoint = component.getControlPoint(i); + Point2D firstPoint = component.getControlPoint(i); if (entry.getKey().isControlPointSticky(j)) { - Point secondPoint = entry.getKey().getControlPoint(j); + Point2D secondPoint = entry.getKey().getControlPoint(j); // If they are close enough we can consider // them matched. if (firstPoint.distance(secondPoint) < DrawingManager.CONTROL_POINT_SIZE) { @@ -1278,23 +1278,24 @@ public class Presenter implements IPlugInPort { if (point == null || configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false)) { return false; } - Point scaledPoint = scalePoint(point); + Point2D scaledPoint = scalePoint(point); if (controlPointMap != null && !controlPointMap.isEmpty()) { // We're dragging control point(s). - int dx = (scaledPoint.x - previousDragPoint.x); - int dy = (scaledPoint.y - previousDragPoint.y); + int dx = (int) (scaledPoint.getX() - previousDragPoint.getX()); + int dy = (int) (scaledPoint.getY() - previousDragPoint.getY()); - Point actualD = moveComponents(this.controlPointMap, dx, dy, isSnapToGrid(), isSnapToObjects()); + Point2D actualD = moveComponents(this.controlPointMap, dx, dy, isSnapToGrid(), isSnapToObjects()); if (actualD == null) return true; - previousDragPoint.translate(actualD.x, actualD.y); + previousDragPoint.setLocation(previousDragPoint.getX() + actualD.getX(), previousDragPoint.getY() + actualD.getY()); } else if (selectedComponents.isEmpty() && instantiationManager.getComponentTypeSlot() == null && previousDragPoint != null) { // If there's no selection, the only thing to do is update the // selection rectangle and refresh. Rectangle oldSelectionRect = selectionRect == null ? null : new Rectangle(selectionRect); - this.selectionRect = Utils.createRectangle(scaledPoint, previousDragPoint); + this.selectionRect = Utils.createRectangle(new Point((int)scaledPoint.getX(), (int)scaledPoint.getY()), + new Point((int)previousDragPoint.getX(), (int)previousDragPoint.getY())); if (selectionRect.equals(oldSelectionRect)) { return true; } @@ -1308,11 +1309,11 @@ public class Presenter implements IPlugInPort { return true; } - private Point moveComponents(Map, Set> controlPointMap, int dx, int dy, boolean snapToGrid, boolean snapToObjects) { + private Point2D moveComponents(Map, Set> controlPointMap, int dx, int dy, boolean snapToGrid, boolean snapToObjects) { // After we make the transfer and snap to grid, calculate actual dx // and dy. We'll use them to translate the previous drag point. - int actualDx = 0; - int actualDy = 0; + double actualDx = 0; + double actualDy = 0; // For each component, do a simulation of the move to see if any of // them will overlap or go out of bounds. @@ -1323,17 +1324,16 @@ public class Presenter implements IPlugInPort { if (controlPointMap.size() == 1) { Map.Entry, Set> entry = controlPointMap.entrySet().iterator().next(); - Point firstPoint = entry.getKey().getControlPoint(entry.getValue().toArray(new Integer[] {})[0]); - Point testPoint = new Point(firstPoint); - testPoint.translate(dx, dy); + Point2D firstPoint = entry.getKey().getControlPoint(entry.getValue().toArray(new Integer[] {})[0]); + Point2D testPoint = new Point2D.Double(firstPoint.getX() + dx, firstPoint.getY() + dy); if (snapToGrid) { CalcUtils.snapPointToGrid(testPoint, currentProject.getGridSpacing()); } else if (snapToObjects) { CalcUtils.snapPointToObjects(testPoint, currentProject.getGridSpacing(), entry.getKey(), currentProject.getComponents()); } - actualDx = testPoint.x - firstPoint.x; - actualDy = testPoint.y - firstPoint.y; + actualDx = testPoint.getX() - firstPoint.getX(); + actualDy = testPoint.getY() - firstPoint.getY(); } else if (snapToGrid) { actualDx = CalcUtils.roundToGrid(dx, currentProject.getGridSpacing()); actualDy = CalcUtils.roundToGrid(dy, currentProject.getGridSpacing()); @@ -1350,16 +1350,16 @@ public class Presenter implements IPlugInPort { // Validate if moving can be done. for (Map.Entry, Set> entry : controlPointMap.entrySet()) { IDIYComponent component = entry.getKey(); - Point[] controlPoints = new Point[component.getControlPointCount()]; + Point2D[] controlPoints = new Point2D[component.getControlPointCount()]; for (int index = 0; index < component.getControlPointCount(); index++) { - controlPoints[index] = new Point(component.getControlPoint(index)); + Point2D p = component.getControlPoint(index); + controlPoints[index] = new Point2D.Double(p.getX(), p.getY()); // When the first point is moved, calculate how much it // actually moved after snapping. if (entry.getValue().contains(index)) { - controlPoints[index].translate(actualDx, actualDy); - controlPoints[index].translate((int) extraSpace, (int) extraSpace); - if (controlPoints[index].x < 0 || controlPoints[index].y < 0 || controlPoints[index].x > d.width - || controlPoints[index].y > d.height) { + controlPoints[index].setLocation(controlPoints[index].getX() + actualDx + extraSpace, controlPoints[index].getY() + actualDy + extraSpace); + if (controlPoints[index].getX() < 0 || controlPoints[index].getY() < 0 || controlPoints[index].getX() > d.width + || controlPoints[index].getY() > d.height) { // At least one control point went out of bounds. return null; } @@ -1386,8 +1386,8 @@ public class Presenter implements IPlugInPort { for (Map.Entry, Set> entry : controlPointMap.entrySet()) { IDIYComponent c = entry.getKey(); for (Integer index : entry.getValue()) { - Point p = new Point(c.getControlPoint(index)); - p.translate(actualDx, actualDy); + Point2D oldP = c.getControlPoint(index); + Point2D p = new Point2D.Double(oldP.getX() + actualDx, oldP.getY() + actualDy); c.setControlPoint(p, index); } } @@ -1396,7 +1396,7 @@ public class Presenter implements IPlugInPort { drawingManager.clearComponentAreaMap(); drawingManager.clearContinuityArea(); - return new Point(actualDx, actualDy); + return new Point2D.Double(actualDx, actualDy); } @Override @@ -1418,7 +1418,7 @@ public class Presenter implements IPlugInPort { */ @SuppressWarnings("unchecked") private void rotateComponents(Collection> components, int direction, boolean snapToGrid) { - Point center = getCenterOf(components, snapToGrid); + Point2D center = getCenterOf(components, snapToGrid); boolean canRotate = true; for (IDIYComponent component : selectedComponents) { @@ -1527,7 +1527,7 @@ public class Presenter implements IPlugInPort { @SuppressWarnings("unchecked") private void mirrorComponents(Collection> components, int direction, boolean snapToGrid) { - Point center = getCenterOf(components, snapToGrid); + Point2D center = getCenterOf(components, snapToGrid); boolean canMirror = true; boolean changesCircuit = false; @@ -1567,38 +1567,38 @@ public class Presenter implements IPlugInPort { drawingManager.clearContinuityArea(); } - private Point getCenterOf(Collection> components, boolean snapToGrid) { + private Point2D getCenterOf(Collection> components, boolean snapToGrid) { // Determine center of rotation - int minX = Integer.MAX_VALUE; - int minY = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int maxY = Integer.MIN_VALUE; + double minX = Integer.MAX_VALUE; + double minY = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double maxY = Integer.MIN_VALUE; for (IDIYComponent component : components) { for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = component.getControlPoint(i); - if (minX > p.x) { - minX = p.x; + Point2D p = component.getControlPoint(i); + if (minX > p.getX()) { + minX = p.getX(); } - if (maxX < p.x) { - maxX = p.x; + if (maxX < p.getX()) { + maxX = p.getX(); } - if (minY > p.y) { - minY = p.y; + if (minY > p.getY()) { + minY = p.getY(); } - if (maxY < p.y) { - maxY = p.y; + if (maxY < p.getY()) { + maxY = p.getY(); } } } - int centerX = (maxX + minX) / 2; - int centerY = (maxY + minY) / 2; + double centerX = (maxX + minX) / 2; + double centerY = (maxY + minY) / 2; if (snapToGrid) { CalcUtils.roundToGrid(centerX, this.currentProject.getGridSpacing()); CalcUtils.roundToGrid(centerY, this.currentProject.getGridSpacing()); } - return new Point(centerX, centerY); + return new Point2D.Double(centerX, centerY); } @Override @@ -1613,7 +1613,7 @@ public class Presenter implements IPlugInPort { test.addStep(DIYTest.DRAG_END, params); } - Point scaledPoint = scalePoint(point); + Point2D scaledPoint = scalePoint(point); if (!dragInProgress && instantiationManager.getComponentSlot() == null) { return; @@ -1623,7 +1623,8 @@ public class Presenter implements IPlugInPort { // If there's no selection finalize selectionRect and see which // components intersect with it. if (scaledPoint != null) { - this.selectionRect = Utils.createRectangle(scaledPoint, previousDragPoint); + this.selectionRect = Utils.createRectangle(new Point((int)scaledPoint.getX(), (int)scaledPoint.getY()), + new Point((int)previousDragPoint.getX(), (int)previousDragPoint.getY()));; } List> newSelection = new ArrayList>(); if (!configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false)) @@ -1691,8 +1692,8 @@ public class Presenter implements IPlugInPort { cloned.setName(instantiationManager.createUniqueName(componentType, currentProject.getComponents())); newSelection.add(cloned); for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = component.getControlPoint(i); - Point newPoint = new Point(p.x + grid, p.y + grid); + Point2D p = component.getControlPoint(i); + Point2D newPoint = new Point2D.Double(p.getX() + grid, p.getY() + grid); cloned.setControlPoint(newPoint, i); } currentProject.getComponents().add(cloned); @@ -2500,16 +2501,17 @@ public class Presenter implements IPlugInPort { } catch (Exception e) { } } - List points = new ArrayList(); + List points = new ArrayList(); for (int i = 0; i < component.getControlPointCount(); i++) { - Point p = new Point(component.getControlPoint(i)); + Point2D oldP = component.getControlPoint(i); + Point2D p = new Point2D.Double(oldP.getX(), oldP.getY()); points.add(p); } - int x = points.iterator().next().x; - int y = points.iterator().next().y; - for (Point point : points) { - point.translate(-x, -y); + double x = points.iterator().next().getX(); + double y = points.iterator().next().getY(); + for (Point2D point : points) { + point.setLocation(point.getX() + x, point.getY() + y); } Template template = new Template(variantName, values, points); @@ -2853,14 +2855,14 @@ public class Presenter implements IPlugInPort { * @param point * @return */ - private Point scalePoint(Point point) { - Point p = - point == null ? null : new Point((int) (point.x / drawingManager.getZoomLevel()), - (int) (point.y / drawingManager.getZoomLevel())); + private Point2D scalePoint(Point2D point) { + Point2D p = + point == null ? null : new Point2D.Double(point.getX() / drawingManager.getZoomLevel(), + point.getY() / drawingManager.getZoomLevel()); if (p != null && configManager.readBoolean(EXTRA_SPACE_KEY, true)) { double extraSpace = drawingManager.getExtraSpace(currentProject); - p.translate((int) (-extraSpace), (int) (-extraSpace)); + p.setLocation(p.getX() - extraSpace, p.getY() - extraSpace); } return p; } diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index bb4e0e06..a55f42f1 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3165,7 +3165,11 @@ 2020-09-04 00:00:00.000 CET - + + + IMPROVEMENT + Improved rendering precision, especially when using metric units + NEW_FEATURE On MacOS the app registers to open .DIY files diff --git a/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java b/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java index 569bb253..147171ab 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java +++ b/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java @@ -21,7 +21,6 @@ */ package org.diylc.serialization; -import java.awt.Point; import java.awt.geom.Area; import java.awt.geom.Path2D; import java.awt.geom.PathIterator; @@ -35,7 +34,7 @@ import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; /** - * Serializes {@link Point} objects by converting coordinates from pixels to inches, thus avoiding + * Serializes {@link Area} objects by converting coordinates from pixels to inches, thus avoiding * the resolution to affect point placement. * * @author Branislav Stojkovic diff --git a/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java b/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java index f7a186aa..c08ac51b 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java +++ b/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java @@ -20,19 +20,19 @@ */ package org.diylc.serialization; - -import java.awt.Point; - -import org.diylc.utils.Constants; - -import com.thoughtworks.xstream.converters.Converter; -import com.thoughtworks.xstream.converters.MarshallingContext; -import com.thoughtworks.xstream.converters.UnmarshallingContext; -import com.thoughtworks.xstream.io.HierarchicalStreamReader; + +import java.awt.geom.Point2D; + +import org.diylc.utils.Constants; + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; /** - * Serializes {@link Point} objects by converting coordinates from pixels to inches, thus avoiding + * Serializes {@link Point2D} objects by converting coordinates from pixels to inches, thus avoiding * the resolution to affect point placement. * * @author Branislav Stojkovic @@ -41,21 +41,21 @@ public class PointConverter implements Converter { @Override public void marshal(Object object, HierarchicalStreamWriter writer, MarshallingContext context) { - Point point = (Point) object; - writer.addAttribute("x", Double.toString(1d * point.x / Constants.PIXELS_PER_INCH)); - writer.addAttribute("y", Double.toString(1d * point.y / Constants.PIXELS_PER_INCH)); + Point2D point = (Point2D) object; + writer.addAttribute("x", Double.toString(1d * point.getX() / Constants.PIXELS_PER_INCH)); + writer.addAttribute("y", Double.toString(1d * point.getY() / Constants.PIXELS_PER_INCH)); } @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { double x = Double.parseDouble(reader.getAttribute("x")); double y = Double.parseDouble(reader.getAttribute("y")); - return new Point((int) Math.round(x * Constants.PIXELS_PER_INCH), (int) Math.round(y * Constants.PIXELS_PER_INCH)); + return new Point2D.Double(x * Constants.PIXELS_PER_INCH, y * Constants.PIXELS_PER_INCH); } @SuppressWarnings("rawtypes") @Override public boolean canConvert(Class clazz) { - return Point.class.isAssignableFrom(clazz); + return Point2D.class.isAssignableFrom(clazz); } } diff --git a/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java b/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java index 067dcc83..a4df56d4 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java +++ b/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java @@ -97,7 +97,7 @@ public class ProjectFileManager { } }; xStream.autodetectAnnotations(true); - xStream.alias("point", java.awt.Point.class); + xStream.alias("point", java.awt.geom.Point2D.class); xStream.alias("font", java.awt.Font.class); xStream.alias("project", Project.class); xStream.aliasPackage("diylc", "org.diylc.components"); @@ -107,7 +107,7 @@ public class ProjectFileManager { xStream.registerConverter(new MeasureConverter()); xStream.registerConverter(new AreaConverter()); xStream.addImmutableType(Color.class); - xStream.addImmutableType(java.awt.Point.class); + xStream.addImmutableType(java.awt.geom.Point2D.class); xStream.addImmutableType(org.diylc.core.measures.Voltage.class); xStream.addImmutableType(org.diylc.core.measures.Resistance.class); xStream.addImmutableType(org.diylc.core.measures.Capacitance.class); diff --git a/diylc/diylc-core/test/org/diylc/presenter/CalcUtilsTest.java b/diylc/diylc-core/test/org/diylc/presenter/CalcUtilsTest.java new file mode 100644 index 00000000..9a868739 --- /dev/null +++ b/diylc/diylc-core/test/org/diylc/presenter/CalcUtilsTest.java @@ -0,0 +1,25 @@ +package org.diylc.presenter; + +import static org.junit.Assert.assertTrue; + +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.junit.Test; + +public class CalcUtilsTest { + + @Test + public void TestRoundToGrid() { + Size spacing = new Size(1d, SizeUnit.mm); + int value = 5; + double s = spacing.convertToPixels(); + double targetPrev = (value - 1) * s; + double target = value * s; + double targetNext = (value + 1) * s; + for (int i = -100; i <= 100; i++) { + double rounded = CalcUtils.roundToGrid(target + i / 100.0 * s, spacing); + double expected = i < -50 ? targetPrev : (i >= 50 ? targetNext : target); + assertTrue("Failed at " + i + " rounded = " + rounded + "; expected = " + expected, Math.abs(rounded - expected) < 1e-10); + } + } +} diff --git a/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java b/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java index c5733499..22e06c01 100644 --- a/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java +++ b/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java @@ -21,23 +21,24 @@ */ package org.diylc.testcomponents; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Point; - -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.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; -import org.diylc.core.measures.Capacitance; -import org.diylc.core.measures.CapacitanceUnit; -import org.diylc.core.measures.Resistance; -import org.diylc.core.measures.ResistanceUnit; -import org.diylc.core.measures.Size; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.geom.Point2D; + +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.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Capacitance; +import org.diylc.core.measures.CapacitanceUnit; +import org.diylc.core.measures.Resistance; +import org.diylc.core.measures.ResistanceUnit; +import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @ComponentDescriptor(name = "Mock", author = "bancika", category = "Sample", instanceNamePrefix = "M", @@ -51,7 +52,7 @@ public class MockDIYComponent extends AbstractComponent { private Resistance r = new Resistance(123d, ResistanceUnit.K); private Size s = new Size(1d, SizeUnit.cm); private Color color = Color.green; - private Point leftTopCorner = new Point(0, 0); + private Point2D leftTopCorner = new Point(0, 0); private String name = "something"; public MockDIYComponent(String testField, Capacitance c, Resistance r, Size s, Color color, Point leftTopCorner) { @@ -98,12 +99,12 @@ public class MockDIYComponent extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return leftTopCorner; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { leftTopCorner.setLocation(point); } @@ -157,7 +158,7 @@ public class MockDIYComponent extends AbstractComponent { public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { g2d.setColor(componentState.equals(ComponentState.SELECTED) ? color : color.darker()); - g2d.fillRect(leftTopCorner.x, leftTopCorner.y, 200, 50); + g2d.fillRect((int)leftTopCorner.getX(), (int)leftTopCorner.getY(), 200, 50); } @Override diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 12cccbe8..f864f5db 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/awt/StringUtils.java b/diylc/diylc-library/src/org/diylc/awt/StringUtils.java index c3822b6c..bc44924b 100644 --- a/diylc/diylc-library/src/org/diylc/awt/StringUtils.java +++ b/diylc/diylc-library/src/org/diylc/awt/StringUtils.java @@ -195,7 +195,7 @@ public class StringUtils { return strings; } - public static void drawCenteredText(Graphics2D g2d, String text, int x, int y, HorizontalAlignment horizontalAlignment, + public static void drawCenteredText(Graphics2D g2d, String text, double x, double y, HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment) { String[] parts = text.split("\n"); if (parts.length > 1) { @@ -214,7 +214,7 @@ public class StringUtils { GlyphVector glyphVector = font.createGlyphVector(renderContext, text); Rectangle visualBounds = glyphVector.getVisualBounds().getBounds(); - int textX = 0; + double textX = 0; switch (horizontalAlignment) { case CENTER: textX = x - stringBounds.width / 2; @@ -227,7 +227,7 @@ public class StringUtils { break; } - int textY = 0; + double textY = 0; switch (verticalAlignment) { case TOP: textY = y; @@ -240,6 +240,6 @@ public class StringUtils { break; } - g2d.drawString(text, textX, textY); + g2d.drawString(text, (int)Math.round(textX), (int)Math.round(textY)); } } diff --git a/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java b/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java index ca916839..119d52c2 100644 --- a/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java @@ -24,10 +24,10 @@ package org.diylc.components; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -57,7 +57,7 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { public static Color COLOR = Color.black; protected String value = ""; - protected Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + protected Point2D[] controlPoints = new Point2D[] { new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0) }; protected Color color = COLOR; protected SymbolFlipping flip = SymbolFlipping.NONE; protected Display display = Display.NAME; @@ -71,17 +71,17 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { controlPoints[3] = getDefaultLabelPosition(controlPoints); } - public Point[] getControlPoints() { + public Point2D[] getControlPoints() { if (controlPoints.length == 3) { - controlPoints = new Point[] { controlPoints[0], controlPoints[1], controlPoints[2], getDefaultLabelPosition(controlPoints) }; + controlPoints = new Point2D[] { controlPoints[0], controlPoints[1], controlPoints[2], getDefaultLabelPosition(controlPoints) }; } return controlPoints; } - protected Point getDefaultLabelPosition(Point[] oldControlPoints) { + protected Point2D getDefaultLabelPosition(Point2D[] oldControlPoints) { int f = flip == SymbolFlipping.X ? -1 : 1; int d = flip == SymbolFlipping.X ? (int) PIN_SPACING.convertToPixels() / 2 : 0; - return new Point(oldControlPoints[0].x + f * (int) (PIN_SPACING.convertToPixels() * 1.5 + d), oldControlPoints[0].y); + return new Point2D.Double(oldControlPoints[0].getX() + f * (PIN_SPACING.convertToPixels() * 1.5 + d), oldControlPoints[0].getY()); } @Override @@ -110,16 +110,16 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { AffineTransform old = g2d.getTransform(); - Point[] controlPoints = getControlPoints(); + Point2D[] controlPoints = getControlPoints(); if (this.flip == SymbolFlipping.Y) { - g2d.translate(0, controlPoints[0].y); + g2d.translate(0, controlPoints[0].getY()); g2d.scale(1, -1); - g2d.translate(0, -1 * controlPoints[0].y); + g2d.translate(0, -1 * controlPoints[0].getY()); } else if (this.flip == SymbolFlipping.X) { - g2d.translate(controlPoints[0].x, 0); + g2d.translate(controlPoints[0].getX(), 0); g2d.scale(-1, 1); - g2d.translate(-1 * controlPoints[0].x, 0); + g2d.translate(-1 * controlPoints[0].getX(), 0); } g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); @@ -160,7 +160,7 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { Rectangle shapeRect = body[0].getBounds().union(body[1].getBounds()).union(body[2].getBounds()); if (getMoveLabel()) { - StringUtils.drawCenteredText(g2d, label, controlPoints[3].x, controlPoints[3].y, flip == SymbolFlipping.X ? HorizontalAlignment.RIGHT + StringUtils.drawCenteredText(g2d, label, controlPoints[3].getX(), controlPoints[3].getY(), flip == SymbolFlipping.X ? HorizontalAlignment.RIGHT : HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } else { StringUtils.drawCenteredText(g2d, label, getLabelX(shapeRect, textRect, fontMetrics, outlineMode), @@ -170,7 +170,7 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return getControlPoints()[index]; } @@ -179,39 +179,36 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { return getControlPoints().length; } - protected int getLabelX(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { + protected double getLabelX(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { int f = flip == SymbolFlipping.X ? -1 : 1; int d = flip == SymbolFlipping.X ? (int) PIN_SPACING.convertToPixels() / 2 : 0; - return getControlPoints()[0].x + f * (int) (PIN_SPACING.convertToPixels() * 1.5 + d); + return getControlPoints()[0].getX() + f * (int) (PIN_SPACING.convertToPixels() * 1.5 + d); } - protected int getLabelY(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { - return getControlPoints()[0].y; + protected double getLabelY(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { + return getControlPoints()[0].getY(); } protected void updateControlPoints() { int pinSpacing = (int) PIN_SPACING.convertToPixels(); - Point[] controlPoints = getControlPoints(); + Point2D[] controlPoints = getControlPoints(); - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); - // set default point positions - controlPoints[1].x = x + pinSpacing * 2; - controlPoints[1].y = y - pinSpacing * 2; + // set default point positions + controlPoints[1].setLocation(x + pinSpacing * 2, y - pinSpacing * 2); - controlPoints[2].x = x + pinSpacing * 2; - controlPoints[2].y = y + pinSpacing * 2; + controlPoints[2].setLocation(x + pinSpacing * 2, y + pinSpacing * 2); - controlPoints[3].x = x + (int) (PIN_SPACING.convertToPixels() * 2); - controlPoints[3].y = y; + controlPoints[3].setLocation(x + PIN_SPACING.convertToPixels() * 2, y); // apply rotation if needed if (getOrientation() != Orientation.DEFAULT) { - Point first = controlPoints[0]; + Point2D first = controlPoints[0]; double angle = Double.parseDouble(getOrientation().name().replace("_", "")); - AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.x, first.y); + AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.getX(), first.getY()); for (int i = 1; i < controlPoints.length; i++) { rotate.transform(controlPoints[i], controlPoints[i]); } @@ -219,14 +216,14 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { // flip at the end if (flip == SymbolFlipping.X) { - controlPoints[1].x = controlPoints[0].x - (controlPoints[1].x - controlPoints[0].x); - controlPoints[2].x = controlPoints[0].x - (controlPoints[2].x - controlPoints[0].x); - controlPoints[3].x = controlPoints[0].x - (controlPoints[3].x - controlPoints[0].x); + controlPoints[1].setLocation(controlPoints[0].getX() - (controlPoints[1].getX() - controlPoints[0].getX()), controlPoints[1].getY()); + controlPoints[2].setLocation(controlPoints[0].getX() - (controlPoints[2].getX() - controlPoints[0].getX()), controlPoints[2].getY()); + controlPoints[3].setLocation(controlPoints[0].getX() - (controlPoints[3].getX() - controlPoints[0].getX()), controlPoints[3].getY()); } if (flip == SymbolFlipping.Y) { - controlPoints[1].y = controlPoints[0].y - (controlPoints[1].y - controlPoints[0].y); - controlPoints[2].y = controlPoints[0].y - (controlPoints[2].y - controlPoints[0].y); - controlPoints[3].y = controlPoints[0].y - (controlPoints[3].y - controlPoints[0].y); + controlPoints[1].setLocation(controlPoints[1].getX(), controlPoints[0].getY() - (controlPoints[1].getY() - controlPoints[0].getY())); + controlPoints[2].setLocation(controlPoints[2].getX(), controlPoints[0].getY() - (controlPoints[2].getY() - controlPoints[0].getY())); + controlPoints[3].setLocation(controlPoints[3].getX(), controlPoints[0].getY() - (controlPoints[3].getY() - controlPoints[0].getY())); } } @@ -252,7 +249,7 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { getControlPoints()[index].setLocation(point); // make sure we have a new drawing @@ -329,9 +326,9 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { if (getOrientation() == Orientation.DEFAULT) return; - Point first = getControlPoints()[0]; + Point2D first = getControlPoints()[0]; double angle = Double.parseDouble(getOrientation().name().replace("_", "")); - AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.x, first.y); + AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.getX(), first.getY()); if (body != null) { for (int i = 0; i < body.length; i++) { diff --git a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java index a7115119..292d6f14 100644 --- a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java +++ b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java @@ -32,6 +32,7 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -73,8 +74,8 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp protected Size length; protected Size width; - protected Point[] points = new Point[] {new Point((int) (-DEFAULT_SIZE.convertToPixels() / 2), 0), - new Point((int) (DEFAULT_SIZE.convertToPixels() / 2), 0), new Point(0, 0)}; + protected Point2D[] points = new Point2D[] {new Point2D.Double(-DEFAULT_SIZE.convertToPixels() / 2, 0), + new Point2D.Double(DEFAULT_SIZE.convertToPixels() / 2, 0), new Point2D.Double(0, 0)}; protected Color bodyColor = Color.white; protected Color borderColor = Color.black; protected Color labelColor = LABEL_COLOR; @@ -85,8 +86,8 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp protected boolean moveLabel = false; // parameters for adjusting the label control point - protected transient Double gamma = null; - protected transient Double r = null; + protected transient java.lang.Double gamma = null; + protected transient java.lang.Double r = null; private Boolean hideShortLeads = false; @@ -107,10 +108,10 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp return false; } - protected Point[] getPoints() { + protected Point2D[] getPoints() { // convert old points to new if (points.length == 2) { - points = new Point[] { points[0], points[1], calculateLabelPosition(points[0], points[1]) }; + points = new Point2D[] { points[0], points[1], calculateLabelPosition(points[0], points[1]) }; // to make standing components backward compatible and not show a label until the user switches the display to something else if (isStanding()) display = Display.NONE; @@ -118,10 +119,10 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp return points; } - protected Point calculateLabelPosition(Point point1, Point point2) { - double x = (point1.x + point2.x) / 2.0; - double y = (point1.y + point2.y) / 2.0; - return new Point((int) x, (int) y); + protected Point2D calculateLabelPosition(Point2D point1, Point2D point2) { + double x = (point1.getX() + point2.getX()) / 2.0; + double y = (point1.getY() + point2.getY()) / 2.0; + return new Point2D.Double(x, y); } @Override @@ -129,9 +130,9 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp IDrawingObserver drawingObserver) { if (gamma != null) { // recalculate center position and theta, then adjust label point accordingly, while preserving alpha and p - double x = (getPoints()[1].x + getPoints()[0].x) / 2.0; - double y = (getPoints()[1].y + getPoints()[0].y) / 2.0; - double theta = Math.atan2(getPoints()[1].y - getPoints()[0].y, getPoints()[1].x - getPoints()[0].x); + double x = (getPoints()[1].getX() + getPoints()[0].getX()) / 2.0; + double y = (getPoints()[1].getY() + getPoints()[0].getY()) / 2.0; + double theta = Math.atan2(getPoints()[1].getY() - getPoints()[0].getY(), getPoints()[1].getX() - getPoints()[0].getX()); double beta = gamma - (Math.PI / 2 - theta); getPoints()[2].setLocation(x + Math.cos(beta) * r, y + Math.sin(beta) * r); gamma = null; @@ -150,15 +151,15 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp double width; double length; Rectangle shapeRect; - double theta = Math.atan2(getPoints()[1].y - getPoints()[0].y, getPoints()[1].x - getPoints()[0].x); + double theta = Math.atan2(getPoints()[1].getY() - getPoints()[0].getY(), getPoints()[1].getX() - getPoints()[0].getX()); if (isStanding()) { // When ending points are too close draw the component in standing // mode. width = length = getClosestOdd(this.width.convertToPixels()); Shape body = - new Ellipse2D.Double((getFlipStanding() ? getPoints()[1] : getPoints()[0]).x - width / 2, - (getFlipStanding() ? getPoints()[1] : getPoints()[0]).y - width / 2, width, width); + new Ellipse2D.Double((getFlipStanding() ? getPoints()[1] : getPoints()[0]).getX() - width / 2, + (getFlipStanding() ? getPoints()[1] : getPoints()[0]).getY() - width / 2, width, width); shapeRect = body.getBounds(); Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { @@ -214,14 +215,14 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp Area leadArea = new Area(); - int endX = (int) (getPoints()[0].x + Math.cos(theta) * leadLength); - int endY = (int) (getPoints()[0].y + Math.sin(theta) * leadLength); - Line2D line = new Line2D.Double(getPoints()[0].x, getPoints()[0].y, endX, endY); + int endX = (int) (getPoints()[0].getX() + Math.cos(theta) * leadLength); + int endY = (int) (getPoints()[0].getY() + Math.sin(theta) * leadLength); + Line2D line = new Line2D.Double(getPoints()[0].getX(), getPoints()[0].getY(), endX, endY); leadArea.add(new Area(leadStroke.createStrokedShape(line))); - endX = (int) (getPoints()[1].x + Math.cos(theta - Math.PI) * leadLength); - endY = (int) (getPoints()[1].y + Math.sin(theta - Math.PI) * leadLength); - line = new Line2D.Double(getPoints()[1].x, getPoints()[1].y, endX, endY); + endX = (int) (getPoints()[1].getX() + Math.cos(theta - Math.PI) * leadLength); + endY = (int) (getPoints()[1].getY() + Math.sin(theta - Math.PI) * leadLength); + line = new Line2D.Double(getPoints()[1].getX(), getPoints()[1].getY(), endX, endY); leadArea.add(new Area(leadStroke.createStrokedShape(line))); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); @@ -247,7 +248,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp width = getWidth().convertToPixels(); length = getLength().convertToPixels(); } - g2d.translate((getPoints()[0].x + getPoints()[1].x - length) / 2, (getPoints()[0].y + getPoints()[1].y - width) / 2); + g2d.translate((getPoints()[0].getX() + getPoints()[1].getX() - length) / 2, (getPoints()[0].getY() + getPoints()[1].getY() - width) / 2); g2d.rotate(theta, length / 2, width / 2); // Draw body. Composite oldComposite = g2d.getComposite(); @@ -317,7 +318,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp // Draw label. g2d.setFont(project.getFont()); if (useShapeRectAsPosition()) { - g2d.translate(shapeRect.x, shapeRect.y); + g2d.translate(shapeRect.getX(), shapeRect.getY()); } Color finalLabelColor; if (outlineMode) { @@ -356,7 +357,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp if (getMoveLabel()) { g2d.setTransform(oldTransform); - g2d.translate(getPoints()[2].x, getPoints()[2].y); + g2d.translate(getPoints()[2].getX(), getPoints()[2].getY()); if (getLabelOriantation() != LabelOriantation.Horizontal) { g2d.rotate(theta); } @@ -365,8 +366,8 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } else { if (isStanding() || getLabelOriantation() == LabelOriantation.Horizontal) { g2d.setTransform(oldTransform); - double x = (getPoints()[0].x + getPoints()[1].x - length) / 2.0; - double y = (getPoints()[0].y + getPoints()[1].y - width) / 2.0; + double x = (getPoints()[0].getX() + getPoints()[1].getX() - length) / 2.0; + double y = (getPoints()[0].getY() + getPoints()[1].getY() - width) / 2.0; g2d.drawString(label, (int) (x + (length - textRect.getWidth()) / 2 + offset), (int)(y + calculateLabelYOffset(shapeRect, textRect, fontMetrics))); } else { @@ -377,7 +378,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } // if (getLabelOriantation() == LabelOriantation.Horizontal) { // -// drawCenteredText(g2d, label, getNewPoints()[2].x, getNewPoints()[2].x, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); +// drawCenteredText(g2d, label, getNewPoints()[2].getX(), getNewPoints()[2].getX(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); // g2d.drawString(label, (int) (x + (length - textRect.getWidth()) / 2 + offset), // (int)(y + calculateLabelYCoordinate(shapeRect, textRect, fontMetrics))); // } else { @@ -392,13 +393,13 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } private void drawLeads(Graphics2D g2d, double theta, double leadLength) { - double endX = getPoints()[0].x + Math.cos(theta) * leadLength; - double endY = getPoints()[0].y + Math.sin(theta) * leadLength; - g2d.draw(new Line2D.Double(getPoints()[0].x, getPoints()[0].y, endX, endY)); + double endX = getPoints()[0].getX() + Math.cos(theta) * leadLength; + double endY = getPoints()[0].getY() + Math.sin(theta) * leadLength; + g2d.draw(new Line2D.Double(getPoints()[0].getX(), getPoints()[0].getY(), endX, endY)); - endX = getPoints()[1].x + Math.cos(theta - Math.PI) * leadLength; - endY = getPoints()[1].y + Math.sin(theta - Math.PI) * leadLength; - g2d.draw(new Line2D.Double(getPoints()[1].x, getPoints()[1].y, endX, endY)); + endX = getPoints()[1].getX() + Math.cos(theta - Math.PI) * leadLength; + endY = getPoints()[1].getY() + Math.sin(theta - Math.PI) * leadLength; + g2d.draw(new Line2D.Double(getPoints()[1].getX(), getPoints()[1].getY(), endX, endY)); } private void drawLead(Graphics2D g2d, ComponentState componentState, IDrawingObserver observer, boolean isCopperArea) { @@ -407,7 +408,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp float thickness = getLeadThickness(); - Line2D line = new Line2D.Double(getPoints()[0].x, getPoints()[0].y, getPoints()[1].x, getPoints()[1].y); + Line2D line = new Line2D.Double(getPoints()[0].getX(), getPoints()[0].getY(), getPoints()[1].getX(), getPoints()[1].getY()); if (shouldShadeLeads()) { // for some reason the stroked line gets approx 1px thicker when converted to shape @@ -548,8 +549,8 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } @Override - public Point getControlPoint(int index) { - return (Point) getPoints()[index]; + public Point2D getControlPoint(int index) { + return (Point2D) getPoints()[index]; } @Override @@ -568,14 +569,14 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { // when moving one of the ending points, try to retain the angle and distance from the center point to label point if (index < 2) { if (gamma == null) { - double x = (getPoints()[1].x + getPoints()[0].x) / 2.0; - double y = (getPoints()[1].y + getPoints()[0].y) / 2.0; - double theta = Math.atan2(getPoints()[1].y - getPoints()[0].y, getPoints()[1].x - getPoints()[0].x); - double beta = Math.atan2(getPoints()[2].y - y, getPoints()[2].x - x); + double x = (getPoints()[1].getX() + getPoints()[0].getX()) / 2.0; + double y = (getPoints()[1].getY() + getPoints()[0].getY()) / 2.0; + double theta = Math.atan2(getPoints()[1].getY() - getPoints()[0].getY(), getPoints()[1].getX() - getPoints()[0].getX()); + double beta = Math.atan2(getPoints()[2].getY() - y, getPoints()[2].getX() - x); gamma = beta + (Math.PI / 2 - theta); r = getPoints()[2].distance(x, y); } @@ -699,21 +700,21 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp @Override public Rectangle2D getCachingBounds() { - int minX = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int minY = Integer.MAX_VALUE; - int maxY = Integer.MIN_VALUE; - int margin = (int) Math.max(Math.max(getWidth().convertToPixels(), getLength().convertToPixels()), getLeadThickness()); + double minX = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double minY = Integer.MAX_VALUE; + double maxY = Integer.MIN_VALUE; + double margin = (int) Math.max(Math.max(getWidth().convertToPixels(), getLength().convertToPixels()), getLeadThickness()); for (int i = 0; i < getControlPointCount(); i++) { - Point p = getControlPoint(i); - if (p.x < minX) - minX = p.x; - if (p.x > maxX) - maxX = p.x; - if (p.y < minY) - minY = p.y; - if (p.y > maxY) - maxY = p.y; + Point2D p = getControlPoint(i); + if (p.getX() < minX) + minX = p.getX(); + if (p.getX() > maxX) + maxX = p.getX(); + if (p.getY() < minY) + minY = p.getY(); + if (p.getY() > maxY) + maxY = p.getY(); } return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin); diff --git a/diylc/diylc-library/src/org/diylc/components/AbstractSchematicLeadedSymbol.java b/diylc/diylc-library/src/org/diylc/components/AbstractSchematicLeadedSymbol.java index f5fd05e5..9699fe07 100644 --- a/diylc/diylc-library/src/org/diylc/components/AbstractSchematicLeadedSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/AbstractSchematicLeadedSymbol.java @@ -24,6 +24,7 @@ package org.diylc.components; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Point; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.LabelPosition; @@ -72,10 +73,10 @@ public abstract class AbstractSchematicLeadedSymbol extends AbstractLeadedCom } @Override - protected Point calculateLabelPosition(Point point1, Point point2) { - double x = (point1.x + point2.x) / 2.0; - double y = (point1.y + point2.y) / 2.0; - double theta = Math.atan2(point2.y - point1.y, point2.x - point2.x) - Math.PI / 2; + protected Point2D calculateLabelPosition(Point2D point1, Point2D point2) { + double x = (point1.getX() + point2.getX()) / 2.0; + double y = (point1.getY() + point2.getY()) / 2.0; + double theta = Math.atan2(point2.getY() - point1.getY(), point2.getX() - point2.getX()) - Math.PI / 2; double r = width.convertToPixels() / 2 + LABEL_FONT.getSize() / 2; return new Point((int) (x + Math.cos(theta) * r), (int) (y + Math.sin(theta) * r)); } diff --git a/diylc/diylc-library/src/org/diylc/components/RoundedPolygon.java b/diylc/diylc-library/src/org/diylc/components/RoundedPolygon.java index 18e6adca..5bd2355e 100644 --- a/diylc/diylc-library/src/org/diylc/components/RoundedPolygon.java +++ b/diylc/diylc-library/src/org/diylc/components/RoundedPolygon.java @@ -21,31 +21,31 @@ */ package org.diylc.components; -import java.awt.Point; import java.awt.geom.Path2D; +import java.awt.geom.Point2D; public class RoundedPolygon extends Path2D.Double { private static final long serialVersionUID = 1L; - public RoundedPolygon(Point[] points, double[] radiuses) { + public RoundedPolygon(Point2D[] points, double[] radiuses) { super(); - moveTo(points[0].x, points[0].y); + moveTo(points[0].getX(), points[0].getY()); for (int i = 0; i < points.length - 1; i++) { - Point first = points[i]; - Point second = points[i + 1 >= points.length ? i + 1 - points.length : i + 1]; - Point third = points[i + 2 >= points.length ? i + 2 - points.length : i + 2]; + Point2D first = points[i]; + Point2D second = points[i + 1 >= points.length ? i + 1 - points.length : i + 1]; + Point2D third = points[i + 2 >= points.length ? i + 2 - points.length : i + 2]; - Point p1 = new Point(0, 0); - Point p2 = new Point(0, 0); + Point2D p1 = new Point2D.Double(0, 0); + Point2D p2 = new Point2D.Double(0, 0); locateTwoPoints(first, second, third, radiuses.length <= i ? radiuses[radiuses.length - 1] : radiuses[i], p1, p2); - lineTo(p1.x, p1.y); - quadTo(second.x, second.y, p2.x, p2.y); + lineTo(p1.getX(), p1.getY()); + quadTo(second.getX(), second.getY(), p2.getX(), p2.getY()); } closePath(); } - private void locateTwoPoints(Point first, Point second, Point third, double radius, Point p1, Point p2) { + private void locateTwoPoints(Point2D first, Point2D second, Point2D third, double radius, Point2D p1, Point2D p2) { double d1 = distance(first, second); double d2 = distance(second, third); double t1 = 1 - radius / d1; @@ -54,11 +54,11 @@ public class RoundedPolygon extends Path2D.Double { interpolate(second, third, t2, p2); } - private void interpolate(Point p1, Point p2, double t, Point p) { - p.setLocation((int)Math.round(p1.x * (1-t) + p2.x * t), (int)Math.round(p1.y * (1-t) + p2.y * t)); + private void interpolate(Point2D p1, Point2D p2, double t, Point2D p) { + p.setLocation((int)Math.round(p1.getX() * (1-t) + p2.getX() * t), (int)Math.round(p1.getY() * (1-t) + p2.getY() * t)); } - private double distance(Point p1, Point p2) { - return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); + private double distance(Point2D p1, Point2D p2) { + return Math.sqrt((p1.getX() - p2.getX()) * (p1.getX() - p2.getX()) + (p1.getY() - p2.getY()) * (p1.getY() - p2.getY())); } } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/AbstractBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/AbstractBoard.java index de9724c7..7d34e27c 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/AbstractBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/AbstractBoard.java @@ -26,6 +26,7 @@ import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Point; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.awt.StringUtils; @@ -53,10 +54,10 @@ public abstract class AbstractBoard extends AbstractTransparentComponent public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in); protected String value = ""; - protected Point[] controlPoints = new Point[] {new Point(0, 0), - new Point((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels())}; - protected Point firstPoint = new Point(); - protected Point secondPoint = new Point(); + protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), + new Point2D.Double(DEFAULT_WIDTH.convertToPixels(), DEFAULT_HEIGHT.convertToPixels())}; + protected Point2D firstPoint = new Point2D.Double(); + protected Point2D secondPoint = new Point.Double(); protected Color boardColor = BOARD_COLOR; protected Color borderColor = BORDER_COLOR; @@ -76,7 +77,7 @@ public abstract class AbstractBoard extends AbstractTransparentComponent IDrawingObserver drawingObserver) { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Composite oldComposite = g2d.getComposite(); // render as transparent when dragging @@ -85,7 +86,7 @@ public abstract class AbstractBoard extends AbstractTransparentComponent g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } g2d.setColor(boardColor); - g2d.fillRect(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, finalSecondPoint.y - firstPoint.y); + g2d.fillRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), (int)(finalSecondPoint.getY() - firstPoint.getY())); g2d.setComposite(oldComposite); // Do not track any changes that follow because the whole board has been @@ -93,55 +94,56 @@ public abstract class AbstractBoard extends AbstractTransparentComponent drawingObserver.stopTracking(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); - g2d.drawRect(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, finalSecondPoint.y - firstPoint.y); + g2d.drawRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), (int)(finalSecondPoint.getY() - firstPoint.getY())); } - protected Point getFinalSecondPoint() { - Point finalSecondPoint; + protected Point2D getFinalSecondPoint() { + Point2D finalSecondPoint; if (getMode() == BoardSizingMode.TwoPoints) finalSecondPoint = secondPoint; else - finalSecondPoint = new Point((int)(firstPoint.x + getLength().convertToPixels()), - (int)(firstPoint.y + getWidth().convertToPixels())); + finalSecondPoint = new Point2D.Double(firstPoint.getX() + getLength().convertToPixels(), + firstPoint.getY() + getWidth().convertToPixels()); return finalSecondPoint; } - protected void drawCoordinates(Graphics2D g2d, int spacing, Project project) { + protected void drawCoordinates(Graphics2D g2d, double spacing, Project project) { g2d.setColor(coordinateColor); g2d.setFont(project.getFont().deriveFont(COORDINATE_FONT_SIZE)); // The half space is used to do rounding when calculating the range. - int halfSpace = spacing / 2; + double halfSpace = spacing / 2; CoordinateOrigin origin = getCoordinateOrigin(); - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); if (getCoordinateDisplay() != CoordinateDisplay.None) { int range; - int yOffset; + double yOffset; CoordinateType yType = getyType(); - Point drawPoint = new Point(firstPoint); - + double y = firstPoint.getY(); + if (origin == CoordinateOrigin.Top_Left || origin == CoordinateOrigin.Top_Right) { - range = (int) ((finalSecondPoint.y - firstPoint.y + halfSpace) / spacing); + range = (int) ((finalSecondPoint.getY() - firstPoint.getY() + halfSpace) / spacing); yOffset = spacing; } else { - range = (int) ((finalSecondPoint.y - firstPoint.y + halfSpace) / spacing); + range = (int) ((finalSecondPoint.getY() - firstPoint.getY() + halfSpace) / spacing); yOffset = -spacing; - drawPoint.y = finalSecondPoint.y; + y = finalSecondPoint.getY(); } for (int c = 1; c < range; c++) { int xOffset = (yType == CoordinateType.Numbers && c >= 10) || (yType == CoordinateType.Letters && c >= 27) ? 0 : 2; String label = yType == CoordinateType.Letters ? getCoordinateLabel(c) : Integer.toString(c); - drawPoint.y += yOffset; + y += yOffset; + StringUtils.drawCenteredText(g2d, label, - firstPoint.x + xOffset, drawPoint.y, + firstPoint.getX() + xOffset, y, HorizontalAlignment.LEFT, VerticalAlignment.CENTER); if (getCoordinateDisplay() == CoordinateDisplay.Both_Sides) { StringUtils.drawCenteredText(g2d, label, - finalSecondPoint.x - xOffset, drawPoint.y, + finalSecondPoint.getX() - xOffset, y, HorizontalAlignment.RIGHT, VerticalAlignment.CENTER); } } @@ -149,29 +151,30 @@ public abstract class AbstractBoard extends AbstractTransparentComponent if (getCoordinateDisplay() != CoordinateDisplay.None) { int range; - int xOffset; + double xOffset; CoordinateType xType = getxType(); - Point drawPoint = new Point(firstPoint); + double x = firstPoint.getX(); if (origin == CoordinateOrigin.Top_Left || origin == CoordinateOrigin.Bottom_Left) { - range = (int) ((finalSecondPoint.x - firstPoint.x + halfSpace) / spacing); + range = (int) ((finalSecondPoint.getX() - firstPoint.getX() + halfSpace) / spacing); xOffset = spacing; } else { - range = (int) ((finalSecondPoint.x - firstPoint.x + halfSpace) / spacing); + range = (int) ((finalSecondPoint.getX() - firstPoint.getX() + halfSpace) / spacing); xOffset = -spacing; - drawPoint.x = finalSecondPoint.x; + x = finalSecondPoint.getX(); } for (int c = 1; c < range; c++) { String label = xType == CoordinateType.Letters ? getCoordinateLabel(c) : Integer.toString(c); - drawPoint.x += xOffset; + x += xOffset; + StringUtils.drawCenteredText(g2d, label, - drawPoint.x, firstPoint.y + 2, + x, firstPoint.getY() + 2, HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM); if (getCoordinateDisplay() == CoordinateDisplay.Both_Sides) { StringUtils.drawCenteredText(g2d, label, - drawPoint.x, (int) (finalSecondPoint.y - COORDINATE_FONT_SIZE), + x, (int) (finalSecondPoint.getY() - COORDINATE_FONT_SIZE), HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM); } } @@ -271,7 +274,7 @@ public abstract class AbstractBoard extends AbstractTransparentComponent } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -286,12 +289,12 @@ public abstract class AbstractBoard extends AbstractTransparentComponent } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); - firstPoint.setLocation(Math.min(controlPoints[0].x, controlPoints[1].x), - Math.min(controlPoints[0].y, controlPoints[1].y)); - secondPoint.setLocation(Math.max(controlPoints[0].x, controlPoints[1].x), - Math.max(controlPoints[0].y, controlPoints[1].y)); + firstPoint.setLocation(Math.min(controlPoints[0].getX(), controlPoints[1].getX()), + Math.min(controlPoints[0].getY(), controlPoints[1].getY())); + secondPoint.setLocation(Math.max(controlPoints[0].getX(), controlPoints[1].getX()), + Math.max(controlPoints[0].getY(), controlPoints[1].getY())); } @EditableProperty @@ -336,9 +339,9 @@ public abstract class AbstractBoard extends AbstractTransparentComponent @Override public Rectangle2D getCachingBounds() { - Point finalSecondPoint = getFinalSecondPoint(); - return new Rectangle2D.Double(Math.min(firstPoint.x, finalSecondPoint.x), Math.min(firstPoint.y, finalSecondPoint.y), - Math.abs(finalSecondPoint.x - firstPoint.x) + 2, Math.abs(finalSecondPoint.y - firstPoint.y) + 2); + Point2D finalSecondPoint = getFinalSecondPoint(); + return new Rectangle2D.Double(Math.min(firstPoint.getX(), finalSecondPoint.getX()), Math.min(firstPoint.getY(), finalSecondPoint.getY()), + Math.abs(finalSecondPoint.getX() - firstPoint.getX()) + 2, Math.abs(finalSecondPoint.getY() - firstPoint.getY()) + 2); } public static enum CoordinateType { diff --git a/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java index 14138937..0e2b228c 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java @@ -25,8 +25,8 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import org.diylc.common.ObjectCache; import org.diylc.common.SimpleComponentTransformer; @@ -59,11 +59,11 @@ public class BlankBoard extends AbstractBoard { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, finalSecondPoint.y) - && !clip.contains(finalSecondPoint.x, firstPoint.y)) { + if (checkPointsClipped(clip) && !clip.contains(firstPoint.getX(), finalSecondPoint.getY()) + && !clip.contains(finalSecondPoint.getX(), firstPoint.getY())) { return; } @@ -75,9 +75,9 @@ public class BlankBoard extends AbstractBoard { } g2d.setColor(boardColor); if (getType() == Type.SQUARE) - g2d.fillRect(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, finalSecondPoint.y - firstPoint.y); + g2d.fillRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), (int)(finalSecondPoint.getY() - firstPoint.getY())); else - g2d.fillOval(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, finalSecondPoint.y - firstPoint.y); + g2d.fillOval((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), (int)(finalSecondPoint.getY() - firstPoint.getY())); g2d.setComposite(oldComposite); } // Do not track any changes that follow because the whole board has been @@ -86,9 +86,9 @@ public class BlankBoard extends AbstractBoard { g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); if (getType() == Type.SQUARE) - g2d.drawRect(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, finalSecondPoint.y - firstPoint.y); + g2d.drawRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), (int)(finalSecondPoint.getY() - firstPoint.getY())); else - g2d.drawOval(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, finalSecondPoint.y - firstPoint.y); + g2d.drawOval((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), (int)(finalSecondPoint.getY() - firstPoint.getY())); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java b/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java index 292247c4..7898a4bc 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java @@ -27,6 +27,7 @@ import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.awt.StringUtils; @@ -361,7 +362,7 @@ public class Breadboard extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { if (index == 0) this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java index b000f070..8196abbd 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java @@ -24,8 +24,8 @@ package org.diylc.components.boards; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import org.diylc.common.SimpleComponentTransformer; import org.diylc.core.ComponentState; @@ -69,11 +69,11 @@ public class EyeletBoard extends AbstractBoard { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, finalSecondPoint.y) - && !clip.contains(finalSecondPoint.x, firstPoint.y)) { + if (checkPointsClipped(clip) && !clip.contains(firstPoint.getX(), finalSecondPoint.getY()) + && !clip.contains(finalSecondPoint.getX(), firstPoint.getY())) { return; } super.draw(g2d, componentState, outlineMode, project, drawingObserver); @@ -81,24 +81,25 @@ public class EyeletBoard extends AbstractBoard { if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - Point p = new Point(firstPoint); + double x = firstPoint.getX(); + double y = finalSecondPoint.getY(); int diameter = getClosestOdd((int) EYELET_SIZE.convertToPixels()); int holeDiameter = getClosestOdd((int) HOLE_SIZE.convertToPixels()); int spacing = (int) this.spacing.convertToPixels(); - while (p.y < finalSecondPoint.y - spacing) { - p.x = firstPoint.x; - p.y += spacing; - while (p.x < finalSecondPoint.x - spacing - diameter) { - p.x += spacing; + while (y < finalSecondPoint.getY() - spacing) { + x = firstPoint.getX(); + y += spacing; + while (x < finalSecondPoint.getX() - spacing - diameter) { + x += spacing; g2d.setColor(eyeletColor); - g2d.fillOval(p.x - diameter / 2, p.y - diameter / 2, diameter, diameter); + g2d.fillOval((int)(x - diameter / 2), (int)(y - diameter / 2), diameter, diameter); g2d.setColor(eyeletColor.darker()); - g2d.drawOval(p.x - diameter / 2, p.y - diameter / 2, diameter, diameter); + g2d.drawOval((int)(x - diameter / 2), (int)(y - diameter / 2), diameter, diameter); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.fillOval((int)(x - holeDiameter / 2), (int)(y - holeDiameter / 2), holeDiameter, holeDiameter); g2d.setColor(eyeletColor.darker()); - g2d.drawOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.drawOval((int)(x - holeDiameter / 2), (int)(y - holeDiameter / 2), holeDiameter, holeDiameter); } } super.drawCoordinates(g2d, spacing, project); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java index 6a74a0bc..3404b146 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java @@ -24,8 +24,8 @@ package org.diylc.components.boards; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import org.diylc.common.SimpleComponentTransformer; import org.diylc.core.ComponentState; @@ -67,11 +67,11 @@ public class MarshallPerfBoard extends AbstractBoard { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, finalSecondPoint.y) - && !clip.contains(finalSecondPoint.x, firstPoint.y)) { + if (checkPointsClipped(clip) && !clip.contains(firstPoint.getX(), finalSecondPoint.getY()) + && !clip.contains(finalSecondPoint.getX(), firstPoint.getY())) { return; } super.draw(g2d, componentState, outlineMode, project, drawingObserver); @@ -79,19 +79,20 @@ public class MarshallPerfBoard extends AbstractBoard { if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - Point p = new Point(firstPoint); + double x = firstPoint.getX(); + double y = firstPoint.getY(); int holeDiameter = getClosestOdd((int) HOLE_SIZE.convertToPixels()); - int spacing = (int) this.spacing.convertToPixels(); + double spacing = this.spacing.convertToPixels(); - while (p.y < finalSecondPoint.y - spacing) { - p.x = firstPoint.x; - p.y += spacing; - while (p.x < finalSecondPoint.x - spacing - holeDiameter) { - p.x += spacing; + while (y < finalSecondPoint.getY() - spacing) { + x = firstPoint.getX(); + y += spacing; + while (x < finalSecondPoint.getX() - spacing - holeDiameter) { + x += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.fillOval((int)(x - holeDiameter / 2), (int)(y - holeDiameter / 2), holeDiameter, holeDiameter); g2d.setColor(borderColor); - g2d.drawOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.drawOval((int)(x - holeDiameter / 2), (int)(y - holeDiameter / 2), holeDiameter, holeDiameter); } } super.drawCoordinates(g2d, spacing, project); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java index 85e9d34b..69805b7a 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java @@ -24,8 +24,8 @@ package org.diylc.components.boards; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import org.diylc.common.SimpleComponentTransformer; import org.diylc.core.ComponentState; @@ -62,11 +62,11 @@ public class PerfBoard extends AbstractBoard { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, finalSecondPoint.y) - && !clip.contains(finalSecondPoint.x, firstPoint.y)) { + if (checkPointsClipped(clip) && !clip.contains(firstPoint.getX(), finalSecondPoint.getY()) + && !clip.contains(finalSecondPoint.getX(), firstPoint.getY())) { return; } super.draw(g2d, componentState, outlineMode, project, drawingObserver); @@ -74,24 +74,25 @@ public class PerfBoard extends AbstractBoard { if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - Point p = new Point(firstPoint); + double x = firstPoint.getX(); + double y = firstPoint.getY(); int diameter = getClosestOdd((int) PAD_SIZE.convertToPixels()); int holeDiameter = getClosestOdd((int) HOLE_SIZE.convertToPixels()); - int spacing = (int) this.spacing.convertToPixels(); + double spacing = this.spacing.convertToPixels(); - while (p.y < finalSecondPoint.y - spacing) { - p.x = firstPoint.x; - p.y += spacing; - while (p.x < finalSecondPoint.x - spacing - diameter) { - p.x += spacing; + while (y < finalSecondPoint.getY() - spacing) { + x = firstPoint.getX(); + y += spacing; + while (x < finalSecondPoint.getX() - spacing - diameter) { + x += spacing; g2d.setColor(padColor); - g2d.fillOval(p.x - diameter / 2, p.y - diameter / 2, diameter, diameter); + g2d.fillOval((int)(x - diameter / 2), (int)(y - diameter / 2), diameter, diameter); g2d.setColor(padColor.darker()); - g2d.drawOval(p.x - diameter / 2, p.y - diameter / 2, diameter, diameter); + g2d.drawOval((int)(x - diameter / 2), (int)(y - diameter / 2), diameter, diameter); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.fillOval((int)(x - holeDiameter / 2), (int)(y - holeDiameter / 2), holeDiameter, holeDiameter); g2d.setColor(padColor.darker()); - g2d.drawOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.drawOval((int)(x - holeDiameter / 2), (int)(y - holeDiameter / 2), holeDiameter, holeDiameter); } } super.drawCoordinates(g2d, spacing, project); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java index c6d176d9..39ec562a 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java @@ -25,6 +25,7 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.awt.StringUtils; @@ -679,7 +680,7 @@ public class ProtoBoard extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { if (index == 0) this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java b/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java index 32b1af9a..7f7ec4c1 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java @@ -28,6 +28,7 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -149,7 +150,7 @@ public class TagStrip extends AbstractTransparentComponent implements IC } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java b/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java index 8e5dac54..07658b91 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java @@ -28,6 +28,7 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.RoundRectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -186,7 +187,7 @@ public class TerminalStrip extends AbstractTransparentComponent implemen } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java index 612909c8..a95ae7e4 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java @@ -25,8 +25,8 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import org.diylc.common.OrientationHV; import org.diylc.common.SimpleComponentTransformer; @@ -65,11 +65,11 @@ public class TriPadBoard extends AbstractBoard { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, finalSecondPoint.y) - && !clip.contains(finalSecondPoint.x, firstPoint.y)) { + if (checkPointsClipped(clip) && !clip.contains(firstPoint.getX(), finalSecondPoint.getY()) + && !clip.contains(finalSecondPoint.getX(), firstPoint.getY())) { return; } super.draw(g2d, componentState, outlineMode, project, drawingObserver); @@ -78,20 +78,21 @@ public class TriPadBoard extends AbstractBoard { if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - Point p = new Point(firstPoint); + double x = firstPoint.getX(); + double y = firstPoint.getY(); int stripSize = getClosestOdd((int) STRIP_SIZE.convertToPixels()); int holeSize = getClosestOdd((int) HOLE_SIZE.convertToPixels()); - int spacing = (int) this.spacing.convertToPixels(); + double spacing = this.spacing.convertToPixels(); if (orientation == OrientationHV.HORIZONTAL) { - while (p.y < finalSecondPoint.y - spacing) { - p.x = firstPoint.x; - p.y += spacing; + while (y < finalSecondPoint.getY() - spacing) { + x = firstPoint.getX(); + y += spacing; - while (p.x + spacing < finalSecondPoint.x) { + while (x + spacing < finalSecondPoint.getX()) { - int remainingSpace = finalSecondPoint.x - p.x; - int spacesToDraw = stripSpan; + double remainingSpace = finalSecondPoint.getX() - x; + double spacesToDraw = stripSpan; if (remainingSpace < (stripSize + (stripSpan * spacing))) { spacesToDraw = (remainingSpace - stripSize) / spacing; @@ -99,37 +100,37 @@ public class TriPadBoard extends AbstractBoard { g2d.setColor(stripColor); drawingObserver.startTrackingContinuityArea(true); - g2d.fillRect(p.x + spacing - stripSize / 2, p.y - stripSize / 2, spacing * (spacesToDraw - 1) + stripSize, + g2d.fillRect((int)(x + spacing - stripSize / 2), (int)(y - stripSize / 2), (int)(spacing * (spacesToDraw - 1) + stripSize), stripSize); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(stripColor.darker()); - g2d.drawRect(p.x + spacing - stripSize / 2, p.y - stripSize / 2, spacing * (spacesToDraw - 1) + stripSize, + g2d.drawRect((int)(x + spacing - stripSize / 2), (int)(y - stripSize / 2), (int)(spacing * (spacesToDraw - 1) + stripSize), stripSize); - p.x += spacing * spacesToDraw; + x += spacing * spacesToDraw; } // draw holes - p.x = firstPoint.x; + x = firstPoint.getX(); - while (p.x < finalSecondPoint.x - spacing - holeSize) { - p.x += spacing; + while (x < finalSecondPoint.getX() - spacing - holeSize) { + x += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.fillOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); g2d.setColor(stripColor.darker()); - g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.drawOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); } } } else { - while (p.x < finalSecondPoint.x - spacing) { - p.x += spacing; - p.y = firstPoint.y; + while (x < finalSecondPoint.getX() - spacing) { + x += spacing; + y = firstPoint.getY(); - while (p.y + spacing < finalSecondPoint.y) { + while (y + spacing < finalSecondPoint.getY()) { - int remainingSpace = finalSecondPoint.y - p.y; - int spacesToDraw = stripSpan; + double remainingSpace = finalSecondPoint.getY() - y; + double spacesToDraw = stripSpan; if (remainingSpace < (stripSize + (stripSpan * spacing))) { spacesToDraw = (remainingSpace - stripSize) / spacing; @@ -137,25 +138,25 @@ public class TriPadBoard extends AbstractBoard { g2d.setColor(stripColor); drawingObserver.startTrackingContinuityArea(true); - g2d.fillRect(p.x - stripSize / 2, p.y + spacing - stripSize / 2, stripSize, spacing * (spacesToDraw - 1) - + stripSize); + g2d.fillRect((int)(x - stripSize / 2), (int)(y + spacing - stripSize / 2), stripSize, (int)(spacing * (spacesToDraw - 1) + + stripSize)); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(stripColor.darker()); - g2d.drawRect(p.x - stripSize / 2, p.y + spacing - stripSize / 2, stripSize, spacing * (spacesToDraw - 1) - + stripSize); + g2d.drawRect((int)(x - stripSize / 2), (int)(y + spacing - stripSize / 2), stripSize, (int)(spacing * (spacesToDraw - 1) + + stripSize)); - p.y += spacing * spacesToDraw; + y += spacing * spacesToDraw; } // draw holes - p.y = firstPoint.y; + y = firstPoint.getY(); - while (p.y < finalSecondPoint.y - spacing - holeSize) { - p.y += spacing; + while (y < finalSecondPoint.getY() - spacing - holeSize) { + y += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.fillOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); g2d.setColor(stripColor.darker()); - g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.drawOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); } } } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java index a87019d7..d17a4dc3 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java @@ -25,8 +25,8 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import org.diylc.common.OrientationHV; import org.diylc.common.SimpleComponentTransformer; @@ -65,11 +65,11 @@ public class VeroBoard extends AbstractBoard { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, finalSecondPoint.y) - && !clip.contains(finalSecondPoint.x, firstPoint.y)) { + if (checkPointsClipped(clip) && !clip.contains(firstPoint.getX(), finalSecondPoint.getY()) + && !clip.contains(finalSecondPoint.getX(), firstPoint.getY())) { return; } super.draw(g2d, componentState, outlineMode, project, drawingObserver); @@ -78,45 +78,46 @@ public class VeroBoard extends AbstractBoard { if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - Point p = new Point(firstPoint); + double x = firstPoint.getX(); + double y = finalSecondPoint.getY(); int stripSize = getClosestOdd((int) STRIP_SIZE.convertToPixels()); int holeSize = getClosestOdd((int) HOLE_SIZE.convertToPixels()); int spacing = (int) this.spacing.convertToPixels(); if (orientation == OrientationHV.HORIZONTAL) { - while (p.y < finalSecondPoint.y - spacing) { - p.x = firstPoint.x; - p.y += spacing; + while (y < finalSecondPoint.getY() - spacing) { + x = firstPoint.getX(); + y += spacing; g2d.setColor(stripColor); drawingObserver.startTrackingContinuityArea(true); - g2d.fillRect(p.x + spacing / 2, p.y - stripSize / 2, finalSecondPoint.x - spacing - p.x, stripSize); + g2d.fillRect((int)(x + spacing / 2), (int)(y - stripSize / 2), (int)(finalSecondPoint.getX() - spacing - x), stripSize); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(stripColor.darker()); - g2d.drawRect(p.x + spacing / 2, p.y - stripSize / 2, finalSecondPoint.x - spacing - p.x, stripSize); - while (p.x < finalSecondPoint.x - spacing - holeSize) { - p.x += spacing; + g2d.drawRect((int)(x + spacing / 2), (int)(y - stripSize / 2), (int)(finalSecondPoint.getX() - spacing - x), stripSize); + while (x < finalSecondPoint.getX() - spacing - holeSize) { + x += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.fillOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); g2d.setColor(stripColor.darker()); - g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.drawOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); } } } else { - while (p.x < finalSecondPoint.x - spacing) { - p.x += spacing; - p.y = firstPoint.y; + while (x < finalSecondPoint.getX() - spacing) { + x += spacing; + y = firstPoint.getY(); g2d.setColor(stripColor); drawingObserver.startTrackingContinuityArea(true); - g2d.fillRect(p.x - stripSize / 2, p.y + spacing / 2, stripSize, finalSecondPoint.y - spacing - p.y); + g2d.fillRect((int)(x - stripSize / 2), (int)(y + spacing / 2), stripSize, (int)(finalSecondPoint.getY() - spacing - y)); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(stripColor.darker()); - g2d.drawRect(p.x - stripSize / 2, p.y + spacing / 2, stripSize, finalSecondPoint.y - spacing - p.y); - while (p.y < finalSecondPoint.y - spacing - holeSize) { - p.y += spacing; + g2d.drawRect((int)(x - stripSize / 2), (int)(y + spacing / 2), stripSize, (int)(finalSecondPoint.getY() - spacing - y)); + while (y < finalSecondPoint.getY() - spacing - holeSize) { + y += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.fillOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); g2d.setColor(stripColor.darker()); - g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.drawOval((int)(x - holeSize / 2), (int)(y - holeSize / 2), holeSize, holeSize); } } } diff --git a/diylc/diylc-library/src/org/diylc/components/chassis/ChassisPanel.java b/diylc/diylc-library/src/org/diylc/components/chassis/ChassisPanel.java index bf351d5e..a3d1a199 100644 --- a/diylc/diylc-library/src/org/diylc/components/chassis/ChassisPanel.java +++ b/diylc/diylc-library/src/org/diylc/components/chassis/ChassisPanel.java @@ -64,7 +64,7 @@ public class ChassisPanel extends AbstractShape { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } g2d.setColor(color); - g2d.fillRoundRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y, radius, + g2d.fillRoundRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY()), radius, radius); g2d.setComposite(oldComposite); } @@ -73,7 +73,7 @@ public class ChassisPanel extends AbstractShape { drawingObserver.stopTracking(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); - g2d.drawRoundRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y, radius, + g2d.drawRoundRect((int)(firstPoint.getX()), (int)(firstPoint.getY()), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY()), radius, radius); } diff --git a/diylc/diylc-library/src/org/diylc/components/chassis/EllipticalCutout.java b/diylc/diylc-library/src/org/diylc/components/chassis/EllipticalCutout.java index c1ec859e..647185ac 100644 --- a/diylc/diylc-library/src/org/diylc/components/chassis/EllipticalCutout.java +++ b/diylc/diylc-library/src/org/diylc/components/chassis/EllipticalCutout.java @@ -53,7 +53,7 @@ public class EllipticalCutout extends AbstractShape { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } g2d.setColor(color); - g2d.fillOval(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y); + g2d.fillOval((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY())); g2d.setComposite(oldComposite); } // Do not track any changes that follow because the whole oval has been @@ -61,7 +61,7 @@ public class EllipticalCutout extends AbstractShape { drawingObserver.stopTracking(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); - g2d.drawOval(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y); + g2d.drawOval((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY())); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/chassis/PolygonalCutout.java b/diylc/diylc-library/src/org/diylc/components/chassis/PolygonalCutout.java index ea528b47..02f022ce 100644 --- a/diylc/diylc-library/src/org/diylc/components/chassis/PolygonalCutout.java +++ b/diylc/diylc-library/src/org/diylc/components/chassis/PolygonalCutout.java @@ -22,6 +22,7 @@ import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Point; +import java.awt.geom.Point2D; import java.util.Arrays; import org.diylc.common.ObjectCache; @@ -61,8 +62,8 @@ public class PolygonalCutout extends AbstractShape { int[] xPoints = new int[controlPoints.length]; int[] yPoints = new int[controlPoints.length]; for (int i = 0; i < controlPoints.length; i++) { - xPoints[i] = controlPoints[i].x; - yPoints[i] = controlPoints[i].y; + xPoints[i] = (int)controlPoints[i].getX(); + yPoints[i] = (int)controlPoints[i].getY(); } Composite oldComposite = g2d.getComposite(); @@ -97,8 +98,8 @@ public class PolygonalCutout extends AbstractShape { this.controlPoints[newPointCount - 1] = this.controlPoints[oldPointCount - 1]; for (int i = oldPointCount - 1; i < newPointCount - 1; i++) { this.controlPoints[i] = - new Point((this.controlPoints[i - 1].x + this.controlPoints[newPointCount - 1].x) / 2, - (this.controlPoints[i - 1].y + this.controlPoints[newPointCount - 1].y) / 2); + new Point2D.Double((this.controlPoints[i - 1].getX() + this.controlPoints[newPointCount - 1].getX()) / 2, + (this.controlPoints[i - 1].getY() + this.controlPoints[newPointCount - 1].getY()) / 2); } } this.pointCount = pointCount; diff --git a/diylc/diylc-library/src/org/diylc/components/chassis/RectangularCutout.java b/diylc/diylc-library/src/org/diylc/components/chassis/RectangularCutout.java index 2901f55a..fffd9e99 100644 --- a/diylc/diylc-library/src/org/diylc/components/chassis/RectangularCutout.java +++ b/diylc/diylc-library/src/org/diylc/components/chassis/RectangularCutout.java @@ -59,7 +59,7 @@ public class RectangularCutout extends AbstractShape { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } g2d.setColor(color); - g2d.fillRoundRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y, radius, + g2d.fillRoundRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY()), radius, radius); g2d.setComposite(oldComposite); } @@ -68,7 +68,7 @@ public class RectangularCutout extends AbstractShape { drawingObserver.stopTracking(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); - g2d.drawRoundRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y, radius, + g2d.drawRoundRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY()), radius, radius); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java index 3cca31b5..a0499f3b 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java @@ -21,7 +21,7 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import org.diylc.common.ObjectCache; import org.diylc.common.OrientationHV; @@ -52,7 +52,7 @@ public class CutLine extends AbstractTransparentComponent { private Size width = WIDTH; private Size length = LENGTH; private Color color = COLOR; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private OrientationHV orientation = OrientationHV.VERTICAL; @Override @@ -70,9 +70,9 @@ public class CutLine extends AbstractTransparentComponent { } if (getOrientation() == OrientationHV.HORIZONTAL) - g2d.drawLine(point.x, point.y, point.x + l, point.y); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)point.getX() + l, (int)point.getY()); else - g2d.drawLine(point.x, point.y, point.x, point.y + l); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)point.getX(), (int)point.getY() + l); g2d.setComposite(oldComposite); } @@ -132,12 +132,12 @@ public class CutLine extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java index eebc046c..7aa5a350 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java @@ -23,7 +23,7 @@ package org.diylc.components.connectivity; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import org.diylc.common.SimpleComponentTransformer; import org.diylc.components.AbstractComponent; @@ -51,7 +51,7 @@ public class Dot extends AbstractComponent { private Size size = SIZE; private Color color = COLOR; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, @@ -62,7 +62,7 @@ public class Dot extends AbstractComponent { int diameter = getClosestOdd((int) getSize().convertToPixels()); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color); - g2d.fillOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); + g2d.fillOval((int)(point.getX() - diameter / 2), (int)(point.getY() - diameter / 2), diameter, diameter); } @Override @@ -102,12 +102,12 @@ public class Dot extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java index 61b505b8..7762746e 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java @@ -23,7 +23,7 @@ package org.diylc.components.connectivity; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.ObjectCache; @@ -60,7 +60,7 @@ public class Eyelet extends AbstractComponent { private Size size = SIZE; private Size holeSize = HOLE_SIZE; private Color color = COLOR; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private String value = ""; @Override @@ -74,16 +74,16 @@ public class Eyelet extends AbstractComponent { g2d.setStroke(ObjectCache.getInstance().fetchZoomableStroke(1f)); g2d.setColor(color); drawingObserver.startTrackingContinuityArea(true); - g2d.fillOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); + g2d.fillOval((int)(point.getX() - diameter / 2), (int)(point.getY() - diameter / 2), diameter, diameter); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); - g2d.drawOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); + g2d.drawOval((int)(point.getX() - diameter / 2), (int)(point.getY() - diameter / 2), diameter, diameter); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.fillOval((int)(point.getX() - holeDiameter / 2), (int)(point.getY() - holeDiameter / 2), holeDiameter, holeDiameter); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); - g2d.drawOval(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.drawOval((int)(point.getX() - holeDiameter / 2), (int)(point.getY() - holeDiameter / 2), holeDiameter, holeDiameter); } @Override @@ -139,12 +139,12 @@ public class Eyelet extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java b/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java index 28609ae3..b5bebe31 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java @@ -23,7 +23,7 @@ package org.diylc.components.connectivity; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import java.util.Arrays; import org.diylc.common.ObjectCache; @@ -52,9 +52,9 @@ public class GroundFill extends AbstractComponent { public static Size DEFAULT_WIDTH = new Size(1.5d, SizeUnit.in); public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in); - protected Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, (int) DEFAULT_HEIGHT.convertToPixels()), - new Point((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels()), - new Point((int) DEFAULT_WIDTH.convertToPixels(), 0)}; + protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, (int) DEFAULT_HEIGHT.convertToPixels()), + new Point2D.Double((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels()), + new Point2D.Double((int) DEFAULT_WIDTH.convertToPixels(), 0)}; protected Color color = COLOR; protected PointCount pointCount = PointCount._4; @@ -71,8 +71,8 @@ public class GroundFill extends AbstractComponent { int[] xPoints = new int[controlPoints.length]; int[] yPoints = new int[controlPoints.length]; for (int i = 0; i < controlPoints.length; i++) { - xPoints[i] = controlPoints[i].x; - yPoints[i] = controlPoints[i].y; + xPoints[i] = (int)controlPoints[i].getX(); + yPoints[i] = (int)controlPoints[i].getY(); } drawingObserver.startTrackingContinuityArea(true); g2d.fillPolygon(xPoints, yPoints, controlPoints.length); @@ -97,7 +97,7 @@ public class GroundFill extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -112,7 +112,7 @@ public class GroundFill extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); } @@ -131,8 +131,8 @@ public class GroundFill extends AbstractComponent { this.controlPoints[newPointCount - 1] = this.controlPoints[oldPointCount - 1]; for (int i = oldPointCount - 1; i < newPointCount - 1; i++) { this.controlPoints[i] = - new Point((this.controlPoints[i - 1].x + this.controlPoints[newPointCount - 1].x) / 2, - (this.controlPoints[i - 1].y + this.controlPoints[newPointCount - 1].y) / 2); + new Point2D.Double((this.controlPoints[i - 1].getX() + this.controlPoints[newPointCount - 1].getX()) / 2, + (this.controlPoints[i - 1].getY() + this.controlPoints[newPointCount - 1].getY()) / 2); } } this.pointCount = pointCount; diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java index 9ebe1973..d34ef3df 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java @@ -24,11 +24,11 @@ package org.diylc.components.connectivity; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Polygon; import java.awt.Shape; import java.awt.Stroke; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import org.diylc.common.Display; import org.diylc.common.LineStyle; @@ -91,13 +91,15 @@ public class Line extends AbstractLeadedComponent { g2d.setStroke(stroke); g2d.setColor(componentState == ComponentState.SELECTED ? SELECTION_COLOR : color); - Point startPoint = new Point(getControlPoint(0)); - Point endPoint = new Point(getControlPoint(1)); + Point2D first = getControlPoint(0); + Point2D second = getControlPoint(1); + Point2D startPoint = new Point2D.Double(first.getX(), first.getY()); + Point2D endPoint = new Point2D.Double(second.getX(), second.getY()); if (arrowStart) { arrowTx.setToIdentity(); - double angle = Math.atan2(getControlPoint(1).y - getControlPoint(0).y, getControlPoint(1).x - getControlPoint(0).x); - arrowTx.translate(getControlPoint(0).x, getControlPoint(0).y); + double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX()); + arrowTx.translate(getControlPoint(0).getX(), getControlPoint(0).getY()); arrowTx.rotate((angle + Math.PI / 2d)); AffineTransform oldTx = g2d.getTransform(); g2d.transform(arrowTx); @@ -110,8 +112,8 @@ public class Line extends AbstractLeadedComponent { } if (arrowEnd) { arrowTx.setToIdentity(); - double angle = Math.atan2(getControlPoint(1).y - getControlPoint(0).y, getControlPoint(1).x - getControlPoint(0).x); - arrowTx.translate(getControlPoint(1).x, getControlPoint(1).y); + double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX()); + arrowTx.translate(getControlPoint(1).getX(), getControlPoint(1).getY()); arrowTx.rotate((angle - Math.PI / 2d)); AffineTransform oldTx = g2d.getTransform(); g2d.transform(arrowTx); @@ -123,15 +125,15 @@ public class Line extends AbstractLeadedComponent { interpolate(endPoint, startPoint, getArrowSize().convertToPixels() * 0.9 / distance, endPoint); } - g2d.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y); + g2d.drawLine((int)startPoint.getX(), (int)startPoint.getY(), (int)endPoint.getX(), (int)endPoint.getY()); } - private void interpolate(Point p1, Point p2, double t, Point p) { - p.setLocation((int)Math.round(p1.x * (1-t) + p2.x * t), (int)Math.round(p1.y * (1-t) + p2.y * t)); + private void interpolate(Point2D p1, Point2D p2, double t, Point2D p) { + p.setLocation((int)Math.round(p1.getX() * (1-t) + p2.getX() * t), (int)Math.round(p1.getY() * (1-t) + p2.getY() * t)); } - private double distance(Point p1, Point p2) { - return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); + private double distance(Point2D p1, Point2D p2) { + return Math.sqrt((p1.getX() - p2.getX()) * (p1.getX() - p2.getX()) + (p1.getY() - p2.getY()) * (p1.getY() - p2.getY())); } @Override 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 2d38158f..0c3a15d5 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java @@ -19,8 +19,8 @@ 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.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.PCBLayer; @@ -55,7 +55,7 @@ public class SolderPad extends AbstractComponent { private Size size = SIZE; private Color color = COLOR; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private Type type = Type.ROUND; private Size holeSize = HOLE_SIZE; private PCBLayer layer = PCBLayer._1; @@ -72,18 +72,18 @@ public class SolderPad extends AbstractComponent { : color); drawingObserver.startTrackingContinuityArea(true); if (type == Type.ROUND) { - g2d.fill(new Ellipse2D.Double(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter)); + g2d.fill(new Ellipse2D.Double(point.getX() - diameter / 2, point.getY() - 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)); + g2d.fill(new Ellipse2D.Double(point.getX() - diameter / 2, point.getY() - 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)); + g2d.fill(new Ellipse2D.Double(point.getX() - diameter * 3 / 8, point.getY() - diameter / 2, diameter * 3 / 4, diameter)); } else { - g2d.fill(new Rectangle2D.Double(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter)); + g2d.fill(new Rectangle2D.Double(point.getX() - diameter / 2, point.getY() - 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)); + g2d.fill(new Ellipse2D.Double(point.getX() - holeDiameter / 2, point.getY() - holeDiameter / 2, holeDiameter, holeDiameter)); } } @@ -151,12 +151,12 @@ public class SolderPad extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java b/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java index 08750409..ee8a8ee2 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java @@ -23,7 +23,7 @@ package org.diylc.components.connectivity; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.ObjectCache; @@ -70,7 +70,7 @@ public class TraceCut extends AbstractComponent { private OrientationHV orientation = OrientationHV.VERTICAL; private Size holeSpacing = VeroBoard.SPACING; - protected Point point = new Point(0, 0); + protected Point2D point = new Point2D.Double(0, 0); @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, @@ -87,22 +87,22 @@ public class TraceCut extends AbstractComponent { : getBoardColor()); drawingObserver.startTrackingContinuityArea(false); if (getOrientation() == OrientationHV.VERTICAL) - g2d.fillRect(point.x - holeSpacing / 2 - cutWidth / 2, point.y - size / 2 - 1, cutWidth, size + 2); + g2d.fillRect((int)(point.getX() - holeSpacing / 2 - cutWidth / 2), (int)(point.getY() - size / 2 - 1), cutWidth, size + 2); else - g2d.fillRect(point.x - size / 2 - 1, point.y - holeSpacing / 2 - cutWidth / 2, size + 2, cutWidth); + g2d.fillRect((int)(point.getX() - size / 2 - 1), (int)(point.getY() - holeSpacing / 2 - cutWidth / 2), size + 2, cutWidth); drawingObserver.stopTrackingContinuityArea(); } else { g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : getBoardColor()); drawingObserver.startTrackingContinuityArea(false); - g2d.fillRoundRect(point.x - size / 2, point.y - size / 2, size, size, size, size); + g2d.fillRoundRect((int)(point.getX() - size / 2), (int)(point.getY() - size / 2), size, size, size, size); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(Constants.CANVAS_COLOR); int holeSize = getClosestOdd((int) HOLE_SIZE.convertToPixels()); - g2d.fillOval(point.x - holeSize / 2, point.y - holeSize / 2, holeSize, holeSize); + g2d.fillOval((int)(point.getX() - holeSize / 2), (int)(point.getY() - holeSize / 2), holeSize, holeSize); g2d.setColor(getBoardColor().darker()); - g2d.drawOval(point.x - holeSize / 2, point.y - holeSize / 2, holeSize, holeSize); + g2d.drawOval((int)(point.getX() - holeSize / 2), (int)(point.getY() - holeSize / 2), holeSize, holeSize); } } @@ -145,7 +145,7 @@ public class TraceCut extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @@ -160,7 +160,7 @@ public class TraceCut extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java index 257e009c..ee49eda5 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java @@ -23,7 +23,7 @@ package org.diylc.components.connectivity; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.ObjectCache; @@ -58,7 +58,7 @@ public class Turret extends AbstractComponent { private Size size = SIZE; private Size holeSize = HOLE_SIZE; private Color color = COLOR; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private String value = ""; @Override @@ -72,16 +72,16 @@ public class Turret extends AbstractComponent { g2d.setColor(color); g2d.setStroke(ObjectCache.getInstance().fetchZoomableStroke(1f)); drawingObserver.startTrackingContinuityArea(true); - g2d.fillOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); + g2d.fillOval((int)(point.getX() - diameter / 2), (int)(point.getY() - diameter / 2), diameter, diameter); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); - g2d.drawOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); + g2d.drawOval((int)(point.getX() - diameter / 2), (int)(point.getY() - diameter / 2), diameter, diameter); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.fillOval((int)(point.getX() - holeDiameter / 2), (int)(point.getY() - holeDiameter / 2), holeDiameter, holeDiameter); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); - g2d.drawOval(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, holeDiameter); + g2d.drawOval((int)(point.getX() - holeDiameter / 2), (int)(point.getY() - holeDiameter / 2), holeDiameter, holeDiameter); } @Override @@ -137,12 +137,12 @@ public class Turret extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/TwistedWire.java b/diylc/diylc-library/src/org/diylc/components/connectivity/TwistedWire.java index f5f5922b..5565fcd5 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/TwistedWire.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/TwistedWire.java @@ -172,7 +172,7 @@ public class TwistedWire extends AbstractCurvedComponent implements IConti } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { super.setControlPoint(point, index); // invalidate cached areas diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java index ee4150ab..86442bc7 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java @@ -21,34 +21,35 @@ */ package org.diylc.components.electromechanical; -import java.awt.AlphaComposite; -import java.awt.Color; -import java.awt.Composite; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Polygon; -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 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.BatterySnapTransformer; -import org.diylc.core.ComponentState; -import org.diylc.core.IDIYComponent; -import org.diylc.core.IDrawingObserver; -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.measures.Size; -import org.diylc.core.measures.SizeUnit; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; + +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.BatterySnapTransformer; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +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.measures.Size; +import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; @ComponentDescriptor(name = "9V Battery Snap", category = "Electro-Mechanical", author = "Branislav Stojkovic", @@ -235,7 +236,7 @@ public class BatterySnap9V extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoint.setLocation(point); // Invalidate the body body = null; diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/CliffJack1_4.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/CliffJack1_4.java index e44b0a47..d0413e8d 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/CliffJack1_4.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/CliffJack1_4.java @@ -25,12 +25,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; -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.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -74,7 +73,7 @@ public class CliffJack1_4 extends AbstractMultiPartComponent { private static Size BODY_LENGTH = new Size(0.9d, SizeUnit.in); private static Size TAIL_LENGTH = new Size(0.1d, SizeUnit.in); - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; private JackType type = JackType.MONO; private Orientation orientation = Orientation.DEFAULT; transient private Area[] body; @@ -88,18 +87,18 @@ public class CliffJack1_4 extends AbstractMultiPartComponent { private void updateControlPoints() { // invalidate body shape body = null; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int spacing = (int) SPACING.convertToPixels(); - controlPoints = new Point[type == JackType.STEREO ? 6 : 4]; + controlPoints = new Point2D[type == JackType.STEREO ? 6 : 4]; - controlPoints[0] = new Point(x, y); - controlPoints[1] = new Point(x, y + 2 * spacing); - controlPoints[2] = new Point(x + 2 * spacing, y); - controlPoints[3] = new Point(x + 2 * spacing, y + 2 * spacing); + controlPoints[0] = new Point2D.Double(x, y); + controlPoints[1] = new Point2D.Double(x, y + 2 * spacing); + controlPoints[2] = new Point2D.Double(x + 2 * spacing, y); + controlPoints[3] = new Point2D.Double(x + 2 * spacing, y + 2 * spacing); if (type == JackType.STEREO) { - controlPoints[4] = new Point(x + spacing, y); - controlPoints[5] = new Point(x + spacing, y + 2 * spacing); + controlPoints[4] = new Point2D.Double(x + spacing, y); + controlPoints[5] = new Point2D.Double(x + spacing, y + 2 * spacing); } // Apply rotation if necessary @@ -139,9 +138,9 @@ public class CliffJack1_4 extends AbstractMultiPartComponent { // Create body. int bodyLength = (int) BODY_LENGTH.convertToPixels(); int bodyWidth = (int) BODY_WIDTH.convertToPixels(); - int centerX = (controlPoints[0].x + controlPoints[3].x) / 2; - int centerY = (controlPoints[0].y + controlPoints[3].y) / 2; - body[0] = new Area(new Rectangle(centerX - bodyLength / 2, centerY - bodyWidth / 2, bodyLength, bodyWidth)); + double centerX = (controlPoints[0].getX() + controlPoints[3].getX()) / 2; + double centerY = (controlPoints[0].getY() + controlPoints[3].getY()) / 2; + body[0] = new Area(new Rectangle2D.Double(centerX - bodyLength / 2, centerY - bodyWidth / 2, bodyLength, bodyWidth)); int tailLength = (int) TAIL_LENGTH.convertToPixels(); body[1] = new Area(new RoundRectangle2D.Double(centerX - bodyLength / 2 - tailLength, centerY - bodyWidth / 4, tailLength * 2, @@ -150,9 +149,9 @@ public class CliffJack1_4 extends AbstractMultiPartComponent { tailArea.subtract(new Area(body[0])); body[1] = tailArea; - body[2] = new Area(new Rectangle(centerX + bodyLength / 2, centerY - bodyWidth / 4, tailLength, bodyWidth / 2)); + body[2] = new Area(new Rectangle2D.Double(centerX + bodyLength / 2, centerY - bodyWidth / 4, tailLength, bodyWidth / 2)); - body[3] = new Area(new Rectangle(centerX + bodyLength / 2 + tailLength, centerY - bodyWidth / 4, tailLength, bodyWidth / 2)); + body[3] = new Area(new Rectangle2D.Double(centerX + bodyLength / 2 + tailLength, centerY - bodyWidth / 4, tailLength, bodyWidth / 2)); tailArea = new Area(body[3]); int radius = bodyLength / 2 + tailLength * 2; tailArea.intersect(new Area(new Ellipse2D.Double(centerX - radius, centerY - radius, radius * 2, radius * 2))); @@ -177,12 +176,12 @@ public class CliffJack1_4 extends AbstractMultiPartComponent { int pinWidth = (int) PIN_WIDTH.convertToPixels(); int pinThickness = (int) PIN_THICKNESS.convertToPixels(); for (int i = 0; i < getControlPointCount(); i++) { - Point point = getControlPoint(i); - Rectangle pin; + Point2D point = getControlPoint(i); + Rectangle2D pin; if (orientation == Orientation.DEFAULT || orientation == Orientation._180) { - pin = new Rectangle(point.x - pinWidth / 2, point.y - pinThickness / 2, pinWidth, pinThickness); + pin = new Rectangle2D.Double(point.getX() - pinWidth / 2, point.getY() - pinThickness / 2, pinWidth, pinThickness); } else { - pin = new Rectangle(point.x - pinThickness / 2, point.y - pinWidth / 2, pinThickness, pinWidth); + pin = new Rectangle2D.Double(point.getX() - pinThickness / 2, point.getY() - pinWidth / 2, pinThickness, pinWidth); } pins.add(new Area(pin)); } @@ -249,8 +248,8 @@ public class CliffJack1_4 extends AbstractMultiPartComponent { } g2d.setColor(finalLabelColor); g2d.setFont(project.getFont()); - int centerX = (controlPoints[0].x + controlPoints[3].x) / 2; - int centerY = (controlPoints[0].y + controlPoints[3].y) / 2; + double centerX = (controlPoints[0].getX() + controlPoints[3].getX()) / 2; + double centerY = (controlPoints[0].getY() + controlPoints[3].getY()) / 2; StringUtils.drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver); @@ -293,12 +292,12 @@ public class CliffJack1_4 extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/ClosedJack1_4.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/ClosedJack1_4.java index 21a1374e..1e9dec70 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/ClosedJack1_4.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/ClosedJack1_4.java @@ -25,13 +25,13 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; 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.GeneralPath; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -75,7 +75,7 @@ public class ClosedJack1_4 extends AbstractMultiPartComponent { private static Size BODY_WIDTH = new Size(0.65d, SizeUnit.in); private static Size BODY_LENGTH = new Size(0.8d, SizeUnit.in); - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; private JackType type = JackType.MONO; private Orientation orientation = Orientation.DEFAULT; transient private Shape[] body; @@ -89,16 +89,16 @@ public class ClosedJack1_4 extends AbstractMultiPartComponent { private void updateControlPoints() { // invalidate body shape body = null; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int spacing = (int) SPACING.convertToPixels(); int bodyLength = (int) BODY_LENGTH.convertToPixels(); - controlPoints = new Point[type == JackType.STEREO ? 3 : 2]; + controlPoints = new Point2D[type == JackType.STEREO ? 3 : 2]; - controlPoints[0] = new Point(x, y); - controlPoints[1] = new Point(x + bodyLength, y); + controlPoints[0] = new Point2D.Double(x, y); + controlPoints[1] = new Point2D.Double(x + bodyLength, y); if (type == JackType.STEREO) { - controlPoints[2] = new Point(x, y + 2 * spacing); + controlPoints[2] = new Point2D.Double(x, y + 2 * spacing); } // Apply rotation if necessary @@ -136,18 +136,18 @@ public class ClosedJack1_4 extends AbstractMultiPartComponent { body = new Shape[5]; // Create body. - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int lugWidth = (int) LUG_WIDTH.convertToPixels(); int lugLength = (int) LUG_LENGTH.convertToPixels(); int lugHoleSize = (int) LUG_HOLE_SIZE.convertToPixels(); int bodyLength = (int) BODY_LENGTH.convertToPixels(); int bodyWidth = (int) BODY_WIDTH.convertToPixels(); - body[0] = new Area(new Rectangle(x + lugLength, y - bodyWidth / 2, bodyLength, bodyWidth)); + body[0] = new Area(new Rectangle2D.Double(x + lugLength, y - bodyWidth / 2, bodyLength, bodyWidth)); int shaftLength = (int) SHAFT_LENGTH.convertToPixels(); int shaftWidth = (int) SHAFT_WIDTH.convertToPixels(); - Area shaft = new Area(new Rectangle(x + lugLength + bodyLength, y - shaftWidth / 2, shaftLength, shaftWidth)); + Area shaft = new Area(new Rectangle2D.Double(x + lugLength + bodyLength, y - shaftWidth / 2, shaftLength, shaftWidth)); body[1] = shaft; double angle = getAngle(); @@ -158,17 +158,17 @@ public class ClosedJack1_4 extends AbstractMultiPartComponent { GeneralPath path = new GeneralPath(); int step = 4; - for (int i = x + lugLength + bodyLength + step; i <= x + lugLength + bodyLength + shaftLength; i += step) { - Point p = new Point(i, y - shaftWidth / 2 + 1); + for (double i = x + lugLength + bodyLength + step; i <= x + lugLength + bodyLength + shaftLength; i += step) { + Point2D p = new Point2D.Double(i, y - shaftWidth / 2 + 1); if (rotation != null) { rotation.transform(p, p); } - path.moveTo(p.x, p.y); - p = new Point(i - step, y + shaftWidth / 2 - 1); + path.moveTo(p.getX(), p.getY()); + p = new Point2D.Double(i - step, y + shaftWidth / 2 - 1); if (rotation != null) { rotation.transform(p, p); } - path.lineTo(p.x, p.y); + path.lineTo(p.getX(), p.getY()); } // Area pathArea = new Area(path); // pathArea.intersect(shaft); @@ -178,19 +178,19 @@ public class ClosedJack1_4 extends AbstractMultiPartComponent { Area lugs = new Area(); int spacing = (int) SPACING.convertToPixels(); - Point[] untransformedControlPoints = new Point[type == JackType.STEREO ? 3 : 2]; + Point2D[] untransformedControlPoints = new Point2D[type == JackType.STEREO ? 3 : 2]; - untransformedControlPoints[0] = new Point(x, y); - untransformedControlPoints[1] = new Point(x + bodyLength, y); + untransformedControlPoints[0] = new Point2D.Double(x, y); + untransformedControlPoints[1] = new Point2D.Double(x + bodyLength, y); if (type == JackType.STEREO) { - untransformedControlPoints[2] = new Point(x, y + 2 * spacing); + untransformedControlPoints[2] = new Point2D.Double(x, y + 2 * spacing); } for (int i = 0; i < untransformedControlPoints.length; i++) { - Point point = untransformedControlPoints[i]; - Area lug = new Area(new Ellipse2D.Double(point.x - lugWidth / 2, point.y - lugWidth / 2, lugWidth, lugWidth)); - lug.add(new Area(new Rectangle(point.x, point.y - lugWidth / 2, lugLength, lugWidth))); - lug.subtract(new Area(new Ellipse2D.Double(point.x - lugHoleSize / 2, point.y - lugHoleSize / 2, lugHoleSize, + Point2D point = untransformedControlPoints[i]; + Area lug = new Area(new Ellipse2D.Double(point.getX() - lugWidth / 2, point.getY() - lugWidth / 2, lugWidth, lugWidth)); + lug.add(new Area(new Rectangle2D.Double(point.getX(), point.getY() - lugWidth / 2, lugLength, lugWidth))); + lug.subtract(new Area(new Ellipse2D.Double(point.getX() - lugHoleSize / 2, point.getY() - lugHoleSize / 2, lugHoleSize, lugHoleSize))); lugs.add(lug); } @@ -269,8 +269,8 @@ public class ClosedJack1_4 extends AbstractMultiPartComponent { g2d.setColor(finalLabelColor); g2d.setFont(project.getFont()); Rectangle bounds = body[0].getBounds(); - int centerX = bounds.x + bounds.width / 2; - int centerY = bounds.y + bounds.height / 2; + double centerX = bounds.getX() + bounds.width / 2; + double centerY = bounds.getY() + bounds.height / 2; StringUtils.drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver); @@ -303,12 +303,12 @@ public class ClosedJack1_4 extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java index 87e5295e..1f3bc212 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/DIPSwitch.java @@ -26,10 +26,10 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.geom.Area; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -79,7 +79,7 @@ public class DIPSwitch extends AbstractTransparentComponent implements I private SwitchCount switchCount = SwitchCount._8; private Size pinSpacing = new Size(0.1d, SizeUnit.in); private Size rowSpacing = new Size(0.3d, SizeUnit.in); - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; protected Display display = Display.NONE; private Color bodyColor = BODY_COLOR; private Color borderColor = BORDER_COLOR; @@ -179,7 +179,7 @@ public class DIPSwitch extends AbstractTransparentComponent implements I } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -194,14 +194,14 @@ public class DIPSwitch extends AbstractTransparentComponent implements I } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; - controlPoints = new Point[switchCount.getValue() * 2]; + Point2D firstPoint = controlPoints[0]; + controlPoints = new Point2D[switchCount.getValue() * 2]; controlPoints[0] = firstPoint; double pinSpacing = this.pinSpacing.convertToPixels(); double rowSpacing = this.rowSpacing.convertToPixels(); @@ -239,16 +239,16 @@ public class DIPSwitch extends AbstractTransparentComponent implements I default: throw new RuntimeException("Unexpected orientation: " + orientation); } - controlPoints[i] = new Point((int) (firstPoint.x + dx1), (int) (firstPoint.y + dy1)); - controlPoints[i + switchCount.getValue()] = new Point((int) (firstPoint.x + dx2), (int) (firstPoint.y + dy2)); + controlPoints[i] = new Point2D.Double(firstPoint.getX() + dx1, firstPoint.getY() + dy1); + controlPoints[i + switchCount.getValue()] = new Point2D.Double(firstPoint.getX() + dx2, firstPoint.getY() + dy2); } } public Area[] getBody() { if (body == null) { body = new Area[3]; - double x = controlPoints[0].x; - double y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); double width; double height; double pinSpacing = this.pinSpacing.convertToPixels(); @@ -265,8 +265,8 @@ public class DIPSwitch extends AbstractTransparentComponent implements I x -= (bodyWidth - rowSpacing) / 2; y -= pinSpacing / 2; for (int i = 0; i < getSwitchCount().getValue(); i++) { - tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x + (rowSpacing - tickHoleLength) / 2, controlPoints[i].y - tickSize / 2, tickHoleLength, tickSize))); - tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x + (rowSpacing - tickHoleLength) / 2, controlPoints[i].y - tickSize / 2, tickSize, tickSize))); + tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() + (rowSpacing - tickHoleLength) / 2, controlPoints[i].getY() - tickSize / 2, tickHoleLength, tickSize))); + tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() + (rowSpacing - tickHoleLength) / 2, controlPoints[i].getY() - tickSize / 2, tickSize, tickSize))); } break; case _90: @@ -275,8 +275,8 @@ public class DIPSwitch extends AbstractTransparentComponent implements I x -= (pinSpacing / 2) + width - pinSpacing; y -= (bodyWidth - rowSpacing) / 2; for (int i = 0; i < getSwitchCount().getValue(); i++) { - tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x - tickSize / 2, controlPoints[i].y + (rowSpacing - tickHoleLength) / 2, tickSize, tickHoleLength))); - tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x - tickSize / 2, controlPoints[i].y + (rowSpacing - tickHoleLength) / 2, tickSize, tickSize))); + tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() - tickSize / 2, controlPoints[i].getY() + (rowSpacing - tickHoleLength) / 2, tickSize, tickHoleLength))); + tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() - tickSize / 2, controlPoints[i].getY() + (rowSpacing - tickHoleLength) / 2, tickSize, tickSize))); } break; case _180: @@ -285,8 +285,8 @@ public class DIPSwitch extends AbstractTransparentComponent implements I x -= rowSpacing + (bodyWidth - rowSpacing) / 2; y -= (pinSpacing / 2) + height - pinSpacing; for (int i = getSwitchCount().getValue(); i < controlPoints.length; i++) { - tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x + (rowSpacing - tickHoleLength) / 2, controlPoints[i].y - tickSize / 2, tickHoleLength, tickSize))); - tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x + (rowSpacing + tickHoleLength) / 2 - tickSize, controlPoints[i].y - tickSize / 2, tickSize, tickSize))); + tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() + (rowSpacing - tickHoleLength) / 2, controlPoints[i].getY() - tickSize / 2, tickHoleLength, tickSize))); + tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() + (rowSpacing + tickHoleLength) / 2 - tickSize, controlPoints[i].getY() - tickSize / 2, tickSize, tickSize))); } break; case _270: @@ -295,8 +295,8 @@ public class DIPSwitch extends AbstractTransparentComponent implements I x -= pinSpacing / 2; y -= rowSpacing + (bodyWidth - rowSpacing) / 2; for (int i = getSwitchCount().getValue(); i < controlPoints.length; i++) { - tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x - tickSize / 2, controlPoints[i].y + (rowSpacing - tickHoleLength) / 2, tickSize, tickHoleLength))); - tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].x - tickSize / 2, controlPoints[i].y + (rowSpacing - tickHoleLength) / 2 + tickHoleLength - tickSize, tickSize, tickSize))); + tickHoleArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() - tickSize / 2, controlPoints[i].getY() + (rowSpacing - tickHoleLength) / 2, tickSize, tickHoleLength))); + tickArea.add(new Area(new Rectangle2D.Double(controlPoints[i].getX() - tickSize / 2, controlPoints[i].getY() + (rowSpacing - tickHoleLength) / 2 + tickHoleLength - tickSize, tickSize, tickSize))); } break; default: @@ -319,13 +319,13 @@ public class DIPSwitch extends AbstractTransparentComponent implements I Area mainArea = getBody()[0]; if (!outlineMode) { int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { g2d.setColor(PIN_COLOR); int pinWidth = getClosestOdd(pinSize / (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180 ? 2f : 1f)); int pinHeight = getClosestOdd(pinSize / (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180 ? 1f : 2f)); - g2d.fillRect(point.x - pinWidth / 2, point.y - pinHeight / 2, pinWidth, pinHeight); + g2d.fillRect((int)(point.getX() - pinWidth / 2), (int)(point.getY() - pinHeight / 2), pinWidth, pinHeight); g2d.setColor(PIN_BORDER_COLOR); - g2d.drawRect(point.x - pinWidth / 2, point.y - pinHeight / 2, pinWidth, pinHeight); + g2d.drawRect((int)(point.getX() - pinWidth / 2), (int)(point.getY() - pinHeight / 2), pinWidth, pinHeight); } } Composite oldComposite = g2d.getComposite(); @@ -407,14 +407,14 @@ public class DIPSwitch extends AbstractTransparentComponent implements I int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = mainArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + double x = bounds.getX() + (bounds.width - textWidth) / 2; + double y = bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); AffineTransform oldTransform = g2d.getTransform(); if (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180) { - int centerX = bounds.x + bounds.width / 2; - int centerY = bounds.y + bounds.height / 2; + double centerX = bounds.getX() + bounds.width / 2; + double centerY = bounds.getY() + bounds.height / 2; g2d.rotate(-Math.PI / 2, centerX, centerY); } @@ -425,7 +425,7 @@ public class DIPSwitch extends AbstractTransparentComponent implements I g2d.translate(0, textHeight / 2); } - g2d.drawString(l, x, y); + g2d.drawString(l, (int)x, (int)y); g2d.setTransform(oldTransform); } diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/FuseHolderPanel.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/FuseHolderPanel.java index 999a8091..d937ee85 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/FuseHolderPanel.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/FuseHolderPanel.java @@ -26,11 +26,11 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -69,7 +69,7 @@ public class FuseHolderPanel extends AbstractMultiPartComponent { private static Color BORDER_COLOR = BODY_COLOR.darker(); private static Color LABEL_COLOR = Color.white; - protected Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0) }; + protected Point2D[] controlPoints = new Point2D[] { new Point2D.Double(0, 0), new Point2D.Double(0, 0) }; transient protected Area[] body; protected String name; protected String value = ""; @@ -87,14 +87,14 @@ public class FuseHolderPanel extends AbstractMultiPartComponent { } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int spacing = (int) SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x + (orientation == OrientationHV.HORIZONTAL ? spacing : 0), firstPoint.y + (orientation == OrientationHV.HORIZONTAL ? 0 : spacing)); + controlPoints[1].setLocation(firstPoint.getX() + (orientation == OrientationHV.HORIZONTAL ? spacing : 0), firstPoint.getY() + (orientation == OrientationHV.HORIZONTAL ? 0 : spacing)); } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -114,7 +114,7 @@ public class FuseHolderPanel extends AbstractMultiPartComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); // Reset body shape. body = null; @@ -213,13 +213,13 @@ public class FuseHolderPanel extends AbstractMultiPartComponent { lugWidth = p; } - for (Point p : controlPoints) { + for (Point2D p : controlPoints) { if (outlineMode) { g2d.setColor(theme.getOutlineColor()); - g2d.drawRect(p.x - lugWidth / 2, p.y - lugHeight / 2, lugWidth, lugHeight); + g2d.drawRect((int)(p.getX() - lugWidth / 2), (int)(p.getY() - lugHeight / 2), lugWidth, lugHeight); } else { g2d.setColor(METAL_COLOR); - g2d.fillRect(p.x - lugWidth / 2, p.y - lugHeight / 2, lugWidth, lugHeight); + g2d.fillRect((int)(p.getX() - lugWidth / 2), (int)(p.getY() - lugHeight / 2), lugWidth, lugHeight); } } @@ -250,9 +250,9 @@ public class FuseHolderPanel extends AbstractMultiPartComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = body[0].getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); - g2d.drawString(label, x, y); + double x = bounds.getX() + (bounds.width - textWidth) / 2; + double y = bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + g2d.drawString(label, (int)x, (int)y); drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver); } @@ -260,7 +260,7 @@ public class FuseHolderPanel extends AbstractMultiPartComponent { @Override public Area[] getBody() { if (body == null) { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int spacing = (int) SPACING.convertToPixels(); int outerDiameter = (int) OUTER_DIAMETER.convertToPixels(); int innerDiameter = (int) INNER_DIAMETER.convertToPixels(); @@ -272,8 +272,8 @@ public class FuseHolderPanel extends AbstractMultiPartComponent { else dy = spacing / 2; body = new Area[2]; - body[0] = new Area(new Ellipse2D.Double(firstPoint.x + dx - outerDiameter / 2, firstPoint.y + dy - outerDiameter / 2, outerDiameter, outerDiameter)); - body[1] = new Area(new Ellipse2D.Double(firstPoint.x + dx - innerDiameter / 2, firstPoint.y + dy - innerDiameter / 2, innerDiameter, innerDiameter)); + body[0] = new Area(new Ellipse2D.Double(firstPoint.getX() + dx - outerDiameter / 2, firstPoint.getY() + dy - outerDiameter / 2, outerDiameter, outerDiameter)); + body[1] = new Area(new Ellipse2D.Double(firstPoint.getX() + dx - innerDiameter / 2, firstPoint.getY() + dy - innerDiameter / 2, innerDiameter, innerDiameter)); } return body; } diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/IECSocket.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/IECSocket.java index 6006cab5..82bf7026 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/IECSocket.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/IECSocket.java @@ -29,6 +29,7 @@ import java.awt.Point; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -79,7 +80,7 @@ public class IECSocket extends AbstractMultiPartComponent { private static Color BODY_COLOR = Color.decode("#555555"); private static Color BORDER_COLOR = BODY_COLOR.darker(); - protected Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; transient protected Area[] body; protected String name; protected String value; @@ -95,12 +96,12 @@ public class IECSocket extends AbstractMultiPartComponent { @SuppressWarnings("incomplete-switch") private void updateControlPoints() { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int hSpacing = (int) HORIZONTAL_SPACING.convertToPixels(); int vSpacing = (int) VERTICAL_SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x - hSpacing, firstPoint.y + vSpacing); - controlPoints[2].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + controlPoints[1].setLocation(firstPoint.getX() - hSpacing, firstPoint.getY() + vSpacing); + controlPoints[2].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY() + vSpacing); if (orientation != Orientation.DEFAULT) { double theta = 0; @@ -115,7 +116,7 @@ public class IECSocket extends AbstractMultiPartComponent { theta = Math.PI * 3 / 2; break; } - AffineTransform rotation = AffineTransform.getRotateInstance(theta, firstPoint.x, firstPoint.y); + AffineTransform rotation = AffineTransform.getRotateInstance(theta, firstPoint.getX(), firstPoint.getY()); for (int i = 1; i < controlPoints.length; i++) { rotation.transform(controlPoints[i], controlPoints[i]); @@ -124,7 +125,7 @@ public class IECSocket extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -144,7 +145,7 @@ public class IECSocket extends AbstractMultiPartComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); // Reset body shape. body = null; @@ -235,13 +236,13 @@ public class IECSocket extends AbstractMultiPartComponent { lugWidth = p; } - for (Point p : controlPoints) { + for (Point2D p : controlPoints) { if (outlineMode) { g2d.setColor(theme.getOutlineColor()); - g2d.drawRect(p.x - lugWidth / 2, p.y - lugHeight / 2, lugWidth, lugHeight); + g2d.drawRect((int)(p.getX() - lugWidth / 2), (int)(p.getY() - lugHeight / 2), lugWidth, lugHeight); } else { g2d.setColor(METAL_COLOR); - g2d.fillRect(p.x - lugWidth / 2, p.y - lugHeight / 2, lugWidth, lugHeight); + g2d.fillRect((int)(p.getX() - lugWidth / 2), (int)(p.getY() - lugHeight / 2), lugWidth, lugHeight); } } @@ -251,7 +252,7 @@ public class IECSocket extends AbstractMultiPartComponent { @SuppressWarnings("incomplete-switch") public Area[] getBody() { if (body == null) { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int vSpacing = (int) VERTICAL_SPACING.convertToPixels(); double cutoutRadius; @@ -278,13 +279,13 @@ public class IECSocket extends AbstractMultiPartComponent { outerRadius = SIMPLE_OUTER_RADIUS.convertToPixels(); Point[] outerPoints = new Point[] { - new Point((int) Math.round(firstPoint.x), (int) Math.round(firstPoint.y + vSpacing / 2 - baseWidth / 2)), - new Point((int) Math.round(firstPoint.x + baseLength / 2), (int) Math.round(firstPoint.y + vSpacing / 2 - baseWidth / 2)), - new Point((int) Math.round(firstPoint.x + length / 2), (int) Math.round(firstPoint.y + vSpacing / 2)), - new Point((int) Math.round(firstPoint.x + baseLength / 2), (int) Math.round(firstPoint.y + vSpacing / 2 + baseWidth / 2)), - new Point((int) Math.round(firstPoint.x - baseLength / 2), (int) Math.round(firstPoint.y + vSpacing / 2 + baseWidth / 2)), - new Point((int) Math.round(firstPoint.x - length / 2), (int) Math.round(firstPoint.y + vSpacing / 2)), - new Point((int) Math.round(firstPoint.x - baseLength / 2), (int) Math.round(firstPoint.y + vSpacing / 2 - baseWidth / 2)), + new Point((int) Math.round(firstPoint.getX()), (int) Math.round(firstPoint.getY() + vSpacing / 2 - baseWidth / 2)), + new Point((int) Math.round(firstPoint.getX() + baseLength / 2), (int) Math.round(firstPoint.getY() + vSpacing / 2 - baseWidth / 2)), + new Point((int) Math.round(firstPoint.getX() + length / 2), (int) Math.round(firstPoint.getY() + vSpacing / 2)), + new Point((int) Math.round(firstPoint.getX() + baseLength / 2), (int) Math.round(firstPoint.getY() + vSpacing / 2 + baseWidth / 2)), + new Point((int) Math.round(firstPoint.getX() - baseLength / 2), (int) Math.round(firstPoint.getY() + vSpacing / 2 + baseWidth / 2)), + new Point((int) Math.round(firstPoint.getX() - length / 2), (int) Math.round(firstPoint.getY() + vSpacing / 2)), + new Point((int) Math.round(firstPoint.getX() - baseLength / 2), (int) Math.round(firstPoint.getY() + vSpacing / 2 - baseWidth / 2)), }; double[] outerRadiuses = new double[] { @@ -297,19 +298,19 @@ public class IECSocket extends AbstractMultiPartComponent { }; body[0] = new Area(new RoundedPolygon(outerPoints, outerRadiuses)); - body[0].subtract(new Area(new Ellipse2D.Double(firstPoint.x - holeSpacing / 2 - holeDiameter / 2, firstPoint.y + vSpacing / 2 - holeDiameter / 2, holeDiameter, holeDiameter))); - body[0].subtract(new Area(new Ellipse2D.Double(firstPoint.x + holeSpacing / 2 - holeDiameter / 2, firstPoint.y + vSpacing / 2 - holeDiameter / 2, holeDiameter, holeDiameter))); + body[0].subtract(new Area(new Ellipse2D.Double(firstPoint.getX() - holeSpacing / 2 - holeDiameter / 2, firstPoint.getY() + vSpacing / 2 - holeDiameter / 2, holeDiameter, holeDiameter))); + body[0].subtract(new Area(new Ellipse2D.Double(firstPoint.getX() + holeSpacing / 2 - holeDiameter / 2, firstPoint.getY() + vSpacing / 2 - holeDiameter / 2, holeDiameter, holeDiameter))); - body[1] = new Area(new RoundRectangle2D.Double(firstPoint.x - baseLength / 2, firstPoint.y + vSpacing / 2 - baseWidth / 2, baseLength, baseWidth, baseRadius, baseRadius)); + body[1] = new Area(new RoundRectangle2D.Double(firstPoint.getX() - baseLength / 2, firstPoint.getY() + vSpacing / 2 - baseWidth / 2, baseLength, baseWidth, baseRadius, baseRadius)); - Point[] cutoutPoints = new Point[] { - new Point(firstPoint.x, (int) (firstPoint.y + vSpacing / 2 - cutoutWidth / 2)), - new Point((int) (firstPoint.x + cutoutLength / 2 - cutoutSlant), (int) (firstPoint.y + vSpacing / 2 - cutoutWidth / 2)), - new Point((int) (firstPoint.x + cutoutLength / 2), (int) (firstPoint.y + vSpacing / 2 - cutoutWidth / 2 + cutoutSlant)), - new Point((int) (firstPoint.x + cutoutLength / 2), (int) (firstPoint.y + vSpacing / 2 + cutoutWidth / 2)), - new Point((int) (firstPoint.x - cutoutLength / 2), (int) (firstPoint.y + vSpacing / 2 + cutoutWidth / 2)), - new Point((int) (firstPoint.x - cutoutLength / 2), (int) (firstPoint.y + vSpacing / 2 - cutoutWidth / 2 + cutoutSlant)), - new Point((int) (firstPoint.x - cutoutLength / 2 + cutoutSlant), (int) (firstPoint.y + vSpacing / 2 - cutoutWidth / 2)), + Point2D[] cutoutPoints = new Point2D[] { + new Point2D.Double(firstPoint.getX(), firstPoint.getY() + vSpacing / 2 - cutoutWidth / 2), + new Point2D.Double(firstPoint.getX() + cutoutLength / 2 - cutoutSlant, (int) (firstPoint.getY() + vSpacing / 2 - cutoutWidth / 2)), + new Point2D.Double(firstPoint.getX() + cutoutLength / 2, firstPoint.getY() + vSpacing / 2 - cutoutWidth / 2 + cutoutSlant), + new Point2D.Double(firstPoint.getX() + cutoutLength / 2, firstPoint.getY() + vSpacing / 2 + cutoutWidth / 2), + new Point2D.Double(firstPoint.getX() - cutoutLength / 2, firstPoint.getY() + vSpacing / 2 + cutoutWidth / 2), + new Point2D.Double(firstPoint.getX() - cutoutLength / 2, firstPoint.getY() + vSpacing / 2 - cutoutWidth / 2 + cutoutSlant), + new Point2D.Double(firstPoint.getX() - cutoutLength / 2 + cutoutSlant, firstPoint.getY() + vSpacing / 2 - cutoutWidth / 2), }; double[] cutoutRadiuses = new double[] { @@ -331,7 +332,7 @@ public class IECSocket extends AbstractMultiPartComponent { theta = Math.PI * 3 / 2; break; } - AffineTransform rotation = AffineTransform.getRotateInstance(theta, firstPoint.x, firstPoint.y); + AffineTransform rotation = AffineTransform.getRotateInstance(theta, firstPoint.getX(), firstPoint.getY()); for (Area a : body) if (a != null) a.transform(rotation); diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java index 8523a383..75730776 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java @@ -21,35 +21,35 @@ */ package org.diylc.components.electromechanical; -import java.awt.AlphaComposite; -import java.awt.Color; -import java.awt.Composite; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.geom.Area; -import java.awt.geom.Rectangle2D; -import java.awt.geom.RoundRectangle2D; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.geom.Area; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; -import org.diylc.appframework.miscutils.ConfigurationManager; -import org.diylc.common.Display; -import org.diylc.common.IPlugInPort; -import org.diylc.common.ObjectCache; -import org.diylc.common.Orientation; -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.Theme; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; -import org.diylc.core.measures.Size; -import org.diylc.core.measures.SizeUnit; -import org.diylc.core.measures.Voltage; -import org.diylc.core.measures.VoltageUnit; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.Display; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +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.Theme; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.core.measures.Voltage; +import org.diylc.core.measures.VoltageUnit; import org.diylc.utils.Constants; @ComponentDescriptor(name = "Mini Relay", author = "Branislav Stojkovic", category = "Electro-Mechanical", @@ -85,7 +85,7 @@ public class MiniRelay extends AbstractTransparentComponent { private String value = ""; private Orientation orientation = Orientation.DEFAULT; - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; protected Display display = Display.NAME; private RelayType type = RelayType.DPDT; private RelaySize size = RelaySize.Miniature; @@ -136,7 +136,7 @@ public class MiniRelay extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -151,13 +151,13 @@ public class MiniRelay extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int pinCount = 0; switch (type) { case DPDT: @@ -169,7 +169,7 @@ public class MiniRelay extends AbstractTransparentComponent { default: throw new RuntimeException("Unexpected type: " + type); } - controlPoints = new Point[pinCount]; + controlPoints = new Point2D[pinCount]; controlPoints[0] = firstPoint; int pinSpacing = size == RelaySize.Miniature ? (int) MINI_PIN_SPACING.convertToPixels() : (int) ULTRA_PIN_SPACING @@ -218,18 +218,18 @@ public class MiniRelay extends AbstractTransparentComponent { default: throw new RuntimeException("Unexpected orientation: " + orientation); } - controlPoints[i] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); - controlPoints[i + pinCount / 2] = new Point(firstPoint.x + dx2, firstPoint.y + dy2); + controlPoints[i] = new Point2D.Double(firstPoint.getX() + dx1, firstPoint.getY() + dy1); + controlPoints[i + pinCount / 2] = new Point2D.Double(firstPoint.getX() + dx2, firstPoint.getY() + dy2); } } public Area[] getBody() { if (body == null) { body = new Area[2]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; - int centerX = (controlPoints[0].x + controlPoints[controlPoints.length - 1].x) / 2; - int centerY = (controlPoints[0].y + controlPoints[controlPoints.length - 1].y) / 2; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); + double centerX = (controlPoints[0].getX() + controlPoints[controlPoints.length - 1].getX()) / 2; + double centerY = (controlPoints[0].getY() + controlPoints[controlPoints.length - 1].getY()) / 2; int bodyMargin = getClosestOdd(BODY_MARGIN.convertToPixels()); int width = 0; int height = 0; @@ -308,13 +308,13 @@ public class MiniRelay extends AbstractTransparentComponent { Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { if (!outlineMode) { g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } Color finalBorderColor; @@ -367,9 +367,9 @@ public class MiniRelay extends AbstractTransparentComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = mainArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); - g2d.drawString(label, x, y); + double x = bounds.getX() + (bounds.width - textWidth) / 2; + double y = bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + g2d.drawString(label, (int)x, (int)y); } @Override @@ -434,21 +434,21 @@ public class MiniRelay extends AbstractTransparentComponent { @Override public Rectangle2D getCachingBounds() { - int minX = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int minY = Integer.MAX_VALUE; - int maxY = Integer.MIN_VALUE; - int margin = 50; + double minX = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double minY = Integer.MAX_VALUE; + double maxY = Integer.MIN_VALUE; + double margin = 50; for (int i = 0; i < getControlPointCount(); i++) { - Point p = getControlPoint(i); - if (p.x < minX) - minX = p.x; - if (p.x > maxX) - maxX = p.x; - if (p.y < minY) - minY = p.y; - if (p.y > maxY) - maxY = p.y; + Point2D p = getControlPoint(i); + if (p.getX() < minX) + minX = p.getX(); + if (p.getX() > maxX) + maxX = p.getX(); + if (p.getY() < minY) + minY = p.getY(); + if (p.getY() > maxY) + maxY = p.getY(); } return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin); diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java index bccab91d..2708fb10 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -25,10 +25,10 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -68,7 +68,7 @@ public class MiniToggleSwitch extends AbstractTransparentComponent { private static Size HOLE_TO_EDGE = new Size(0.063d, SizeUnit.in); private String value = ""; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; transient Area[] body; @Deprecated private Orientation orientation = Orientation.DEFAULT; @@ -161,27 +162,27 @@ public class OpenJack1_4 extends AbstractMultiPartComponent { g2d.setFont(project.getFont().deriveFont(project.getFont().getSize2D() * 0.8f)); int springLength = (int) SPRING_LENGTH.convertToPixels(); int holeToEdge = (int) HOLE_TO_EDGE.convertToPixels(); - int centerY = controlPoints[0].y + springLength - holeToEdge; - Point tipLabel = new Point(controlPoints[0].x, (int) (controlPoints[0].y + holeToEdge * 1.25)); - AffineTransform ringTransform = AffineTransform.getRotateInstance(getType() == OpenJackType.SWITCHED ? SWITCH_THETA : RING_THETA, controlPoints[0].x, centerY); - AffineTransform sleeveTransform = AffineTransform.getRotateInstance(getType() == OpenJackType.SWITCHED ? SLEEVE_SWITCHED_THETA : SLEEVE_THETA, controlPoints[0].x, centerY); + double centerY = controlPoints[0].getY() + springLength - holeToEdge; + Point2D tipLabel = new Point2D.Double(controlPoints[0].getX(), (int) (controlPoints[0].getY() + holeToEdge * 1.25)); + AffineTransform ringTransform = AffineTransform.getRotateInstance(getType() == OpenJackType.SWITCHED ? SWITCH_THETA : RING_THETA, controlPoints[0].getX(), centerY); + AffineTransform sleeveTransform = AffineTransform.getRotateInstance(getType() == OpenJackType.SWITCHED ? SLEEVE_SWITCHED_THETA : SLEEVE_THETA, controlPoints[0].getX(), centerY); Point ringOrSwitchLabel = new Point(0, 0); Point sleeveLabel = new Point(0, 0); ringTransform.transform(tipLabel, ringOrSwitchLabel); sleeveTransform.transform(tipLabel, sleeveLabel); if (getTheta() != 0) { - AffineTransform rotation = AffineTransform.getRotateInstance(getTheta(), controlPoints[0].x, controlPoints[0].y); + AffineTransform rotation = AffineTransform.getRotateInstance(getTheta(), controlPoints[0].getX(), controlPoints[0].getY()); rotation.transform(tipLabel, tipLabel); rotation.transform(ringOrSwitchLabel, ringOrSwitchLabel); rotation.transform(sleeveLabel, sleeveLabel); } - StringUtils.drawCenteredText(g2d, "T", tipLabel.x, tipLabel.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); - StringUtils.drawCenteredText(g2d, "S", sleeveLabel.x, sleeveLabel.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "T", tipLabel.getX(), tipLabel.getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "S", sleeveLabel.getX(), sleeveLabel.getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); if (getType() == OpenJackType.STEREO) - StringUtils.drawCenteredText(g2d, "R", ringOrSwitchLabel.x, ringOrSwitchLabel.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "R", ringOrSwitchLabel.getX(), ringOrSwitchLabel.getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); if (getType() == OpenJackType.SWITCHED) - StringUtils.drawCenteredText(g2d, "Sw", ringOrSwitchLabel.x, ringOrSwitchLabel.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "Sw", ringOrSwitchLabel.getX(), ringOrSwitchLabel.getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver); @@ -191,8 +192,8 @@ public class OpenJack1_4 extends AbstractMultiPartComponent { if (body == null) { body = new Area[4]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int outerDiameter = getClosestOdd(OUTER_DIAMETER.convertToPixels()); int innerDiameter = getClosestOdd(INNER_DIAMETER.convertToPixels()); int ringDiameter = getClosestOdd(RING_DIAMETER.convertToPixels()); @@ -201,7 +202,7 @@ public class OpenJack1_4 extends AbstractMultiPartComponent { int holeDiameter = getClosestOdd(HOLE_DIAMETER.convertToPixels()); int holeToEdge = (int) HOLE_TO_EDGE.convertToPixels(); - int centerY = y + springLength - holeToEdge; + double centerY = y + springLength - holeToEdge; Area wafer = new Area(new Ellipse2D.Double(x - outerDiameter / 2, centerY - outerDiameter / 2, outerDiameter, @@ -264,13 +265,13 @@ public class OpenJack1_4 extends AbstractMultiPartComponent { } private void updateControlPoints() { - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int springLength = (int) SPRING_LENGTH.convertToPixels(); int holeToEdge = (int) HOLE_TO_EDGE.convertToPixels(); - int centerY = y + springLength - holeToEdge; + double centerY = y + springLength - holeToEdge; AffineTransform.getRotateInstance(getType() == OpenJackType.SWITCHED ? SLEEVE_SWITCHED_THETA : SLEEVE_THETA, x, centerY).transform(controlPoints[0], controlPoints[1]); AffineTransform.getRotateInstance(getType() == OpenJackType.SWITCHED ? SWITCH_THETA : RING_THETA, x, centerY).transform(controlPoints[0], controlPoints[2]); @@ -278,7 +279,7 @@ public class OpenJack1_4 extends AbstractMultiPartComponent { // Rotate if needed if (getTheta() != 0) { AffineTransform rotation = AffineTransform.getRotateInstance(getTheta(), x, y); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { rotation.transform(point, point); } } @@ -328,12 +329,12 @@ public class OpenJack1_4 extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoints[index].setLocation(point); // Invalidate the body body = null; diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java index 67b42e2d..f7fd2ccc 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java @@ -25,12 +25,12 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -76,7 +76,7 @@ public class PilotLampHolder extends AbstractMultiPartComponent { private static Size HOLE_SPACING = new Size(0.1d, SizeUnit.in); private String value = ""; - private Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + private Point2D[] controlPoints = new Point2D[] { new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0) }; transient Area[] body; @Deprecated private Orientation orientation = Orientation.DEFAULT; @@ -162,8 +162,8 @@ public class PilotLampHolder extends AbstractMultiPartComponent { if (body == null) { body = new Area[6]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int threadOuterDiameter = getClosestOdd(THREAD_OUTER_DIAMETER.convertToPixels()); int threadThickness = getClosestOdd(THREAD_THICKNESS.convertToPixels()); int nutDiameter = getClosestOdd(NUT_DIAMETER.convertToPixels()); @@ -175,7 +175,7 @@ public class PilotLampHolder extends AbstractMultiPartComponent { int holeDiameter = getClosestOdd(HOLE_DIAMETER.convertToPixels()); int holeToEdge = (int) HOLE_TO_EDGE.convertToPixels(); - int centerY = y + springLength - holeToEdge; + double centerY = y + springLength - holeToEdge; Area wafer = new Area(new Ellipse2D.Double(x - waferDiameter / 2, centerY - waferDiameter / 2, waferDiameter, @@ -244,34 +244,34 @@ public class PilotLampHolder extends AbstractMultiPartComponent { } for (int i = 1; i <= 2; i++) - for (Point p : controlPoints) - body[i].subtract(new Area(new Ellipse2D.Double(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, holeDiameter))); + for (Point2D p : controlPoints) + body[i].subtract(new Area(new Ellipse2D.Double(p.getX() - holeDiameter / 2, p.getY() - holeDiameter / 2, holeDiameter, holeDiameter))); } return body; } private void updateControlPoints() { - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int springLength = (int) SPRING_LENGTH.convertToPixels(); int holeToEdge = (int) HOLE_TO_EDGE.convertToPixels(); int holeSpacing = (int) HOLE_SPACING.convertToPixels(); - int centerY = y + springLength - holeToEdge; + double centerY = y + springLength - holeToEdge; AffineTransform rotation = AffineTransform.getRotateInstance(Math.PI * 0.295, x, centerY); rotation.transform(controlPoints[0], controlPoints[1]); - controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y + holeSpacing); + controlPoints[2].setLocation(controlPoints[0].getX(), controlPoints[0].getY() + holeSpacing); rotation.transform(controlPoints[2], controlPoints[3]); // Rotate if needed if (getTheta() != 0) { rotation = AffineTransform.getRotateInstance(getTheta(), x, y); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { rotation.transform(point, point); } } @@ -365,12 +365,12 @@ public class PilotLampHolder extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoints[index].setLocation(point); // Invalidate the body body = null; diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/PinHeader.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/PinHeader.java index bab9bb5b..c8ff1044 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/PinHeader.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/PinHeader.java @@ -29,6 +29,7 @@ import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -65,7 +66,7 @@ public class PinHeader extends AbstractTransparentComponent { private Orientation orientation = Orientation.DEFAULT; - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; private int rowCount = 2; private int columnCount = 5; private Size spacing = PIN_SPACING; @@ -99,7 +100,7 @@ public class PinHeader extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -114,26 +115,26 @@ public class PinHeader extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int pinCount = rowCount * columnCount; - controlPoints = new Point[pinCount]; + controlPoints = new Point2D[pinCount]; controlPoints[0] = firstPoint; double pinSpacing = spacing.convertToPixels(); for (int i = 0; i < columnCount; i++) for (int j = 0; j < rowCount; j++) - controlPoints[i + j * columnCount] = new Point((int)Math.round(firstPoint.x + j * pinSpacing), (int)Math.round(firstPoint.y + i * pinSpacing)); + controlPoints[i + j * columnCount] = new Point((int)Math.round(firstPoint.getX() + j * pinSpacing), (int)Math.round(firstPoint.getY() + i * pinSpacing)); // Apply rotation if necessary double angle = getAngle(); if (angle != 0) { - AffineTransform rotation = AffineTransform.getRotateInstance(angle, controlPoints[0].x, controlPoints[0].y); + AffineTransform rotation = AffineTransform.getRotateInstance(angle, controlPoints[0].getX(), controlPoints[0].getY()); for (int i = 1; i < controlPoints.length; i++) { rotation.transform(controlPoints[i], controlPoints[i]); } @@ -163,11 +164,11 @@ public class PinHeader extends AbstractTransparentComponent { public Area[] getBody() { if (body == null) { body = new Area[2]; - int centerX = (controlPoints[0].x + controlPoints[controlPoints.length - 1].x) / 2; - int centerY = (controlPoints[0].y + controlPoints[controlPoints.length - 1].y) / 2; + double centerX = (controlPoints[0].getX() + controlPoints[controlPoints.length - 1].getX()) / 2; + double centerY = (controlPoints[0].getY() + controlPoints[controlPoints.length - 1].getY()) / 2; double pinSpacing = spacing.convertToPixels(); - double width = Math.abs((controlPoints[0].x - controlPoints[controlPoints.length - 1].x)) + pinSpacing; - double height = Math.abs((controlPoints[0].y - controlPoints[controlPoints.length - 1].y)) + pinSpacing; + double width = Math.abs((controlPoints[0].getX() - controlPoints[controlPoints.length - 1].getX())) + pinSpacing; + double height = Math.abs((controlPoints[0].getY() - controlPoints[controlPoints.length - 1].getY())) + pinSpacing; if (shrouded) { if (orientation == Orientation.DEFAULT || orientation == Orientation._180) { height += 2 * pinSpacing; @@ -236,13 +237,13 @@ public class PinHeader extends AbstractTransparentComponent { Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { if (!outlineMode) { g2d.setColor(PIN_COLOR); - g2d.fillRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillRect((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawRect((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } Color finalBorderColor; @@ -358,21 +359,21 @@ public class PinHeader extends AbstractTransparentComponent { @Override public Rectangle2D getCachingBounds() { - int minX = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int minY = Integer.MAX_VALUE; - int maxY = Integer.MIN_VALUE; + double minX = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double minY = Integer.MAX_VALUE; + double maxY = Integer.MIN_VALUE; int margin = 50; for (int i = 0; i < getControlPointCount(); i++) { - Point p = getControlPoint(i); - if (p.x < minX) - minX = p.x; - if (p.x > maxX) - maxX = p.x; - if (p.y < minY) - minY = p.y; - if (p.y > maxY) - maxY = p.y; + Point2D p = getControlPoint(i); + if (p.getX() < minX) + minX = p.getX(); + if (p.getX() > maxX) + maxX = p.getX(); + if (p.getY() < minY) + minY = p.getY(); + if (p.getY() > maxY) + maxY = p.getY(); } return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin); diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/PlasticDCJack.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/PlasticDCJack.java index f593d4e2..6330abd1 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/PlasticDCJack.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/PlasticDCJack.java @@ -25,11 +25,10 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -67,7 +66,7 @@ public class PlasticDCJack extends AbstractMultiPartComponent { private static Color BORDER_COLOR = Color.black; private static Color MARKING_COLOR = Color.lightGray; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; private String value = ""; private DCPolarity polarity = DCPolarity.CENTER_NEGATIVE; transient private Area[] body; @@ -80,12 +79,12 @@ public class PlasticDCJack extends AbstractMultiPartComponent { // invalidate body shape body = null; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int spacing = (int) SPACING.convertToPixels(); - controlPoints[1] = new Point(x + spacing, y + spacing); - controlPoints[2] = new Point(x - spacing, y + spacing * 2); + controlPoints[1] = new Point2D.Double(x + spacing, y + spacing); + controlPoints[2] = new Point2D.Double(x - spacing, y + spacing * 2); } @Override @@ -93,36 +92,36 @@ public class PlasticDCJack extends AbstractMultiPartComponent { if (body == null) { body = new Area[4]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int spacing = (int) SPACING.convertToPixels(); int diameter = getClosestOdd(DIAMETER.convertToPixels()); body[0] = new Area(new Ellipse2D.Double(x - diameter / 2, y + spacing - diameter / 2, diameter, diameter)); int rectWidth = (int) (diameter / Math.sqrt(2)) - 2; - body[1] = new Area(new Rectangle(x - rectWidth / 2, y + spacing - rectWidth / 2, rectWidth, rectWidth)); + body[1] = new Area(new Rectangle2D.Double(x - rectWidth / 2, y + spacing - rectWidth / 2, rectWidth, rectWidth)); int lugWidth = getClosestOdd(LUG_WIDTH.convertToPixels()); int lugThickness = getClosestOdd(LUG_THICKNESS.convertToPixels()); - Point groundPoint = controlPoints[controlPoints.length - 1]; + Point2D groundPoint = controlPoints[controlPoints.length - 1]; Area groundLug = - new Area(new Ellipse2D.Double(groundPoint.x + spacing - lugWidth / 2, groundPoint.y - lugWidth / 2, lugWidth, + new Area(new Ellipse2D.Double(groundPoint.getX() + spacing - lugWidth / 2, groundPoint.getY() - lugWidth / 2, lugWidth, lugWidth)); - groundLug.add(new Area(new Rectangle(groundPoint.x, groundPoint.y - lugWidth / 2, spacing, lugWidth))); - groundLug.subtract(new Area(new Ellipse2D.Double(groundPoint.x + spacing - lugWidth / 6, groundPoint.y - lugWidth + groundLug.add(new Area(new Rectangle2D.Double(groundPoint.getX(), groundPoint.getY() - lugWidth / 2, spacing, lugWidth))); + groundLug.subtract(new Area(new Ellipse2D.Double(groundPoint.getX() + spacing - lugWidth / 6, groundPoint.getY() - lugWidth / 6, lugWidth / 3, lugWidth / 3))); body[2] = groundLug; Area lugArea = new Area(); for (int i = 0; i < controlPoints.length; i++) { - Point point = controlPoints[i]; + Point2D point = controlPoints[i]; if (i == getControlPointCount() - 1) { lugArea.add(new Area( - new Rectangle(point.x - lugThickness / 2, point.y - lugWidth / 2, lugThickness, lugWidth))); + new Rectangle2D.Double(point.getX() - lugThickness / 2, point.getY() - lugWidth / 2, lugThickness, lugWidth))); } else { lugArea.add(new Area( - new Rectangle(point.x - lugWidth / 2, point.y - lugThickness / 2, lugWidth, lugThickness))); + new Rectangle2D.Double(point.getX() - lugWidth / 2, point.getY() - lugThickness / 2, lugWidth, lugThickness))); } } body[3] = lugArea; @@ -184,10 +183,10 @@ public class PlasticDCJack extends AbstractMultiPartComponent { int spacing = (int) SPACING.convertToPixels(); g2d.setColor(MARKING_COLOR); g2d.setFont(project.getFont().deriveFont(12f)); - StringUtils.drawCenteredText(g2d, getPolarity() == DCPolarity.CENTER_NEGATIVE ? "+" : "-", controlPoints[0].x, - controlPoints[0].y - spacing * 7 / 16, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); - StringUtils.drawCenteredText(g2d, getPolarity() == DCPolarity.CENTER_NEGATIVE ? "_" : "+", controlPoints[2].x, - controlPoints[2].y - spacing * 3 / 4, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, getPolarity() == DCPolarity.CENTER_NEGATIVE ? "+" : "-", controlPoints[0].getX(), + controlPoints[0].getY() - spacing * 7 / 16, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, getPolarity() == DCPolarity.CENTER_NEGATIVE ? "_" : "+", controlPoints[2].getX(), + controlPoints[2].getY() - spacing * 3 / 4, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver); @@ -222,12 +221,12 @@ public class PlasticDCJack extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); this.body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java index 68ae0876..6ac6a1a9 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java @@ -25,7 +25,6 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; @@ -71,7 +70,7 @@ public class RCAJack extends AbstractMultiPartComponent { private static Size HOLE_TO_EDGE = new Size(0.063d, SizeUnit.in); private String value = ""; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0) }; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0) }; transient Area[] body; private Orientation orientation = Orientation.DEFAULT; @@ -147,10 +146,10 @@ public class RCAJack extends AbstractMultiPartComponent { if (body == null) { body = new Area[4]; - int x0 = controlPoints[0].x; - int y0 = controlPoints[0].y; - int x1 = controlPoints[1].x; - int y1 = controlPoints[1].y; + double x0 = controlPoints[0].getX(); + double y0 = controlPoints[0].getY(); + double x1 = controlPoints[1].getX(); + double y1 = controlPoints[1].getY(); int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels()); int waferDiameter = getClosestOdd(WAFER_DIAMETER.convertToPixels()); int springWidth = (int) SPRING_WIDTH.convertToPixels(); @@ -202,13 +201,13 @@ public class RCAJack extends AbstractMultiPartComponent { @SuppressWarnings("incomplete-switch") private void updateControlPoints() { - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int springLength = (int) SPRING_LENGTH.convertToPixels(); int holeToEdge = (int) HOLE_TO_EDGE.convertToPixels(); - int centerY = y + springLength - holeToEdge; + double centerY = y + springLength - holeToEdge; controlPoints[1].setLocation(x, centerY); @@ -284,12 +283,12 @@ public class RCAJack extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoints[index].setLocation(point); // Invalidate the body body = null; diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java index 7b80e327..3f7a8148 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java @@ -22,11 +22,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -73,8 +73,8 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { private static Size HOLE_DIAMETER = new Size(2.5d, SizeUnit.mm); private String value = ""; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), - new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), + new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; transient Area[] body; private Orientation orientation = Orientation.DEFAULT; private boolean showLabels = true; @@ -154,8 +154,8 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { g2d.setFont(project.getFont().deriveFont(project.getFont().getSize2D() * 0.8f)); for (int i = 2; i < body.length; i++) { Rectangle2D bounds = body[i].getBounds2D(); - int x = (int) ((bounds.getCenterX() + controlPoints[i - 2].x) / 2); - int y = (int) ((bounds.getCenterY() + controlPoints[i - 2].y) / 2); + double x = (int) ((bounds.getCenterX() + controlPoints[i - 2].getX()) / 2); + double y = (int) ((bounds.getCenterY() + controlPoints[i - 2].getY()) / 2); StringUtils.drawCenteredText(g2d, i == 2 ? "C" : String.valueOf(i - 2), x, y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } @@ -168,8 +168,8 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { if (body == null) { body = new Area[3 + getPositionCount().getCount()]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int outerDiameter = getClosestOdd(OUTER_DIAMETER.convertToPixels()); int innerDiameter = getClosestOdd(INNER_DIAMETER.convertToPixels()); int springLength = (int) TERMINAL_LENGTH.convertToPixels(); @@ -177,7 +177,7 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { int holeDiameter = getClosestOdd(HOLE_DIAMETER.convertToPixels()); int holeDistance = (int) HOLE_DISTANCE.convertToPixels(); - int centerY = y - holeDistance; + double centerY = y - holeDistance; Area main = new Area(new Ellipse2D.Double(x - outerDiameter / 2, centerY - outerDiameter / 2, outerDiameter, outerDiameter)); @@ -218,12 +218,12 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { } private void updateControlPoints() { - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int holeDistance = (int) HOLE_DISTANCE.convertToPixels(); - int centerY = y - holeDistance; + double centerY = y - holeDistance; for (int i = 1; i < controlPoints.length; i++) { double theta = -i * Math.PI / 4; @@ -236,7 +236,7 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { // Rotate if needed if (theta != 0) { AffineTransform rotation = AffineTransform.getRotateInstance(theta, x, y); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { rotation.transform(point, point); } } @@ -292,12 +292,12 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoints[index].setLocation(point); // Invalidate the body body = null; diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/AbstractGuitarPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/AbstractGuitarPickup.java index b1087501..152b2af9 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/AbstractGuitarPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/AbstractGuitarPickup.java @@ -20,11 +20,11 @@ package org.diylc.components.guitar; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -56,8 +56,8 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< protected Orientation orientation = Orientation.DEFAULT; protected transient Shape[] body; - protected Point controlPoint = new Point(0, 0); - protected Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + protected Point2D controlPoint = new Point2D.Double(0, 0); + protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; protected Polarity polarity = Polarity.North; @@ -68,7 +68,7 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< } protected void drawlTerminalLabels(Graphics2D g2d, Color color, Project project) { - Point[] points = getControlPoints(); + Point2D[] points = getControlPoints(); g2d.setColor(color); g2d.setFont(project.getFont().deriveFont(TERMINAL_FONT_SIZE * 1f)); @@ -93,8 +93,8 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< break; } - StringUtils.drawCenteredText(g2d, "N", (points[0].x + points[1].x) / 2 + dx, (points[0].y + points[1].y) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); - StringUtils.drawCenteredText(g2d, "S", (points[2].x + points[3].x) / 2 + dx, (points[2].y + points[3].y) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "N", (points[0].getX() + points[1].getX()) / 2 + dx, (points[0].getY() + points[1].getY()) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "S", (points[2].getX() + points[3].getX()) / 2 + dx, (points[2].getY() + points[3].getY()) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } protected void drawMainLabel(Graphics2D g2d, Project project, boolean outlineMode, ComponentState componentState) { @@ -115,7 +115,7 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< Rectangle bounds = getBody()[0].getBounds(); AffineTransform originalTx = g2d.getTransform(); - g2d.translate(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2); + g2d.translate(bounds.getX() + bounds.width / 2, bounds.getY() + bounds.height / 2); if (orientation == Orientation._90) g2d.rotate(Math.PI / 2); else if (orientation == Orientation._270){ @@ -159,11 +159,11 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< updateControlPoints(); } - protected Point[] getControlPoints() { + protected Point2D[] getControlPoints() { if (controlPoints == null) { controlPoints = - new Point[] {controlPoint, new Point(controlPoint.x, controlPoint.y), - new Point(controlPoint.x, controlPoint.y), new Point(controlPoint.x, controlPoint.y)}; + new Point2D[] {controlPoint, new Point2D.Double(controlPoint.getX(), controlPoint.getY()), + new Point2D.Double(controlPoint.getX(), controlPoint.getY()), new Point2D.Double(controlPoint.getX(), controlPoint.getY())}; updateControlPoints(); } return controlPoints; @@ -181,12 +181,12 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return getControlPoints()[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { getControlPoints()[index].setLocation(point); // Invalidate the body body = null; @@ -225,7 +225,7 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< @SuppressWarnings("incomplete-switch") protected void updateControlPoints() { - Point[] points = getControlPoints(); + Point2D[] points = getControlPoints(); int pointSpacing = (int) POINT_SPACING.convertToPixels(); int dx = getControlPointDirection() == OrientationHV.HORIZONTAL ? 1 : 0; int dy = getControlPointDirection() == OrientationHV.HORIZONTAL ? 0 : 1; @@ -245,11 +245,11 @@ public abstract class AbstractGuitarPickup extends AbstractTransparentComponent< break; } } - points[1].setLocation(points[0].x + dx * pointSpacing, points[0].y + dy * pointSpacing); + points[1].setLocation(points[0].getX() + dx * pointSpacing, points[0].getY() + dy * pointSpacing); points[2] - .setLocation(points[0].x + 2 * dx * pointSpacing, points[0].y + 2 * dy * pointSpacing); + .setLocation(points[0].getX() + 2 * dx * pointSpacing, points[0].getY() + 2 * dy * pointSpacing); points[3] - .setLocation(points[0].x + 3 * dx * pointSpacing, points[0].y + 3 * dy * pointSpacing); + .setLocation(points[0].getX() + 3 * dx * pointSpacing, points[0].getY() + 3 * dy * pointSpacing); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/AbstractSingleOrHumbuckerPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/AbstractSingleOrHumbuckerPickup.java index 5e1b7c87..17595347 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/AbstractSingleOrHumbuckerPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/AbstractSingleOrHumbuckerPickup.java @@ -19,7 +19,7 @@ package org.diylc.components.guitar; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import org.diylc.awt.StringUtils; import org.diylc.common.HorizontalAlignment; @@ -35,7 +35,7 @@ public abstract class AbstractSingleOrHumbuckerPickup extends AbstractGuitarPick @Override protected void drawlTerminalLabels(Graphics2D g2d, Color color, Project project) { - Point[] points = getControlPoints(); + Point2D[] points = getControlPoints(); g2d.setColor(color); g2d.setFont(project.getFont().deriveFont(TERMINAL_FONT_SIZE * 1f)); @@ -61,11 +61,11 @@ public abstract class AbstractSingleOrHumbuckerPickup extends AbstractGuitarPick } if (getPolarity() == Polarity.North || getPolarity() == Polarity.South) { - StringUtils.drawCenteredText(g2d, getPolarity().name().substring(0, 1), (points[1].x + points[2].x) / 2 + dx, (points[1].y + points[2].y) / 2 + dy, HorizontalAlignment.CENTER, + StringUtils.drawCenteredText(g2d, getPolarity().name().substring(0, 1), (points[1].getX() + points[2].getX()) / 2 + dx, (points[1].getY() + points[2].getY()) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } else { - StringUtils.drawCenteredText(g2d, "N", (points[0].x + points[1].x) / 2 + dx, (points[0].y + points[1].y) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); - StringUtils.drawCenteredText(g2d, "S", (points[2].x + points[3].x) / 2 + dx, (points[2].y + points[3].y) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "N", (points[0].getX() + points[1].getX()) / 2 + dx, (points[0].getY() + points[1].getY()) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "S", (points[2].getX() + points[3].getX()) / 2 + dx, (points[2].getY() + points[3].getY()) / 2 + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } } diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java index 8c0801a2..052f7191 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java @@ -21,13 +21,13 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.Stroke; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -187,9 +187,9 @@ public class HumbuckerPickup extends AbstractGuitarPickup { if (body == null) { body = new Shape[7]; - Point[] points = getControlPoints(); - int x = points[0].x; - int y = points[0].y; + Point2D[] points = getControlPoints(); + double x = points[0].getX(); + double y = points[0].getY(); int width = (int) getType().getWidth().convertToPixels(); int length = (int) getType().getLength().convertToPixels(); int lipWidth = (int) LIP_WIDTH.convertToPixels(); diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java index 2056b92c..a20d0be0 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java @@ -25,11 +25,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.RoundRectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -144,9 +144,9 @@ public class JazzBassPickup extends AbstractSingleOrHumbuckerPickup { if (body == null) { body = new Shape[4]; - Point[] points = getControlPoints(); - int x = points[0].x; - int y = points[0].y; + Point2D[] points = getControlPoints(); + double x = points[0].getX(); + double y = points[0].getY(); int width = (int) WIDTH.convertToPixels(); int length = (int) LENGTH.convertToPixels(); int edgeRadius = (int) EDGE_RADIUS.convertToPixels(); diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java b/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java index 73097b04..b94f23e4 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java @@ -21,33 +21,33 @@ */ package org.diylc.components.guitar; -import java.awt.AlphaComposite; -import java.awt.Color; -import java.awt.Composite; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Shape; -import java.awt.geom.AffineTransform; -import java.awt.geom.Area; -import java.awt.geom.GeneralPath; -import java.awt.geom.Rectangle2D; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; -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.core.ComponentState; -import org.diylc.core.IDIYComponent; -import org.diylc.core.IDrawingObserver; +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.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.measures.Size; -import org.diylc.core.measures.SizeUnit; +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.measures.Size; +import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; @ComponentDescriptor(name = "LP Toggle Switch", category = "Guitar", author = "Branislav Stojkovic", @@ -66,7 +66,7 @@ public class LPSwitch extends AbstractTransparentComponent implements IS private static Size TERMINAL_SPACING = new Size(0.2d, SizeUnit.in); private String value = ""; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; transient Shape[] body; private Orientation orientation = Orientation.DEFAULT; @@ -135,8 +135,8 @@ public class LPSwitch extends AbstractTransparentComponent implements IS if (body == null) { body = new Shape[3]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int baseLength = (int) BASE_LENGTH.convertToPixels(); int length = (int) LENGTH.convertToPixels(); int waferThickness = getClosestOdd(WAFER_THICKNESS.convertToPixels()); @@ -145,7 +145,7 @@ public class LPSwitch extends AbstractTransparentComponent implements IS new Rectangle2D.Double(x - waferThickness / 2, y, waferThickness - 1, baseLength + (length - baseLength) / 2); body[0] = new Area(ground); - int bodyY = y + (length - baseLength) / 2; + double bodyY = y + (length - baseLength) / 2; Area waferArea = new Area();//new Area(new Rectangle2D.Double(x - waferThickness * 3 / 2, bodyY, waferThickness, baseLength)); waferArea.add(new Area(new Rectangle2D.Double(x + waferThickness / 2, bodyY, waferThickness *3, baseLength))); @@ -215,8 +215,8 @@ public class LPSwitch extends AbstractTransparentComponent implements IS @SuppressWarnings("incomplete-switch") private void updateControlPoints() { - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int terminalSpacing = (int) TERMINAL_SPACING.convertToPixels(); int length = (int) LENGTH.convertToPixels(); @@ -239,7 +239,7 @@ public class LPSwitch extends AbstractTransparentComponent implements IS break; } AffineTransform rotation = AffineTransform.getRotateInstance(theta, x, y); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { rotation.transform(point, point); } } @@ -290,12 +290,12 @@ public class LPSwitch extends AbstractTransparentComponent implements IS } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoints[index].setLocation(point); // Invalidate the body body = null; diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java b/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java index d30c730d..312a7fd9 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java @@ -25,11 +25,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -77,7 +77,7 @@ public class LeverSwitch extends AbstractTransparentComponent implements private static Size TERMINAL_SPACING = new Size(0.1d, SizeUnit.in); private String value = ""; - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; transient Shape[] body; private Orientation orientation = Orientation.DEFAULT; private LeverSwitchType type = LeverSwitchType.DP3T; @@ -147,7 +147,7 @@ public class LeverSwitch extends AbstractTransparentComponent implements // g2d.setColor(Color.black); // for(int i = 0; i < getControlPointCount(); i++) { -// g2d.drawString(i + "", controlPoints[i].x, controlPoints[i].y); +// g2d.drawString(i + "", controlPoints[i].getX(), controlPoints[i].getY()); // } } @@ -156,8 +156,8 @@ public class LeverSwitch extends AbstractTransparentComponent implements if (body == null) { body = new Shape[4]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int baseWidth = (int) BASE_WIDTH.convertToPixels(); int baseLength = (int) BASE_LENGTH.convertToPixels(); int holeSize = getClosestOdd(HOLE_SIZE.convertToPixels()); @@ -177,8 +177,8 @@ public class LeverSwitch extends AbstractTransparentComponent implements yOffset = 12; } - int baseX = x - terminalLength / 2 - waferSpacing; - int baseY = y - (baseLength - terminalSpacing * yOffset) / 2; + double baseX = x - terminalLength / 2 - waferSpacing; + double baseY = y - (baseLength - terminalSpacing * yOffset) / 2; Area baseArea = new Area(new Rectangle2D.Double(baseX, baseY, baseWidth, baseLength)); baseArea.subtract(new Area(new Ellipse2D.Double(baseX + baseWidth / 2 - holeSize / 2, baseY + (baseLength - holeSpacing) / 2 - holeSize / 2, holeSize, holeSize))); @@ -217,15 +217,15 @@ public class LeverSwitch extends AbstractTransparentComponent implements Area terminalArea = new Area(); Area commonTerminalArea = new Area(); for (int i = 0; i < controlPoints.length; i++) { - Point point = controlPoints[i]; + Point2D point = controlPoints[i]; Area terminal = - new Area(new RoundRectangle2D.Double(point.x - terminalLength / 2, point.y - terminalWidth / 2, + new Area(new RoundRectangle2D.Double(point.getX() - terminalLength / 2, point.getY() - terminalWidth / 2, terminalLength, terminalWidth, terminalWidth / 2, terminalWidth / 2)); - terminal.subtract(new Area(new RoundRectangle2D.Double(point.x - terminalLength / 4, point.y - terminalWidth + terminal.subtract(new Area(new RoundRectangle2D.Double(point.getX() - terminalLength / 4, point.getY() - terminalWidth / 4, terminalLength / 2, terminalWidth / 2, terminalWidth / 2, terminalWidth / 2))); // Rotate the terminal if needed if (theta != 0) { - AffineTransform rotation = AffineTransform.getRotateInstance(theta, point.x, point.y); + AffineTransform rotation = AffineTransform.getRotateInstance(theta, point.getX(), point.getY()); terminal.transform(rotation); } terminalArea.add(terminal); @@ -242,7 +242,7 @@ public class LeverSwitch extends AbstractTransparentComponent implements // Rotate if needed if (theta != 0) { - AffineTransform rotation = AffineTransform.getRotateInstance(theta, controlPoints[0].x, controlPoints[0].y); + AffineTransform rotation = AffineTransform.getRotateInstance(theta, controlPoints[0].getX(), controlPoints[0].getY()); // Skip the last two because terminals are already rotated for (int i = 0; i < body.length - 2; i++) { Shape shape = body[i]; @@ -256,8 +256,8 @@ public class LeverSwitch extends AbstractTransparentComponent implements @SuppressWarnings("incomplete-switch") private void updateControlPoints() { - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int waferSpacing = (int) WAFER_SPACING.convertToPixels(); int terminalSpacing = (int) TERMINAL_SPACING.convertToPixels(); int terminalLength = (int) TERMINAL_LENGTH.convertToPixels(); @@ -265,28 +265,28 @@ public class LeverSwitch extends AbstractTransparentComponent implements switch (type) { case DP3T: case DP3T_5pos: - controlPoints = new Point[8]; + controlPoints = new Point2D[8]; for (int i = 0; i < 8; i++) { - controlPoints[i] = new Point(x + (i % 2 == 1 ? terminalLength : 0), y + i * terminalSpacing); + controlPoints[i] = new Point2D.Double(x + (i % 2 == 1 ? terminalLength : 0), y + i * terminalSpacing); } break; case DP4T: - controlPoints = new Point[10]; + controlPoints = new Point2D[10]; for (int i = 0; i < 10; i++) { - controlPoints[i] = new Point(x + (i % 2 == 1 ? terminalLength : 0), y + i * terminalSpacing); + controlPoints[i] = new Point2D.Double(x + (i % 2 == 1 ? terminalLength : 0), y + i * terminalSpacing); } break; case DP5T: - controlPoints = new Point[12]; + controlPoints = new Point2D[12]; for (int i = 0; i < 12; i++) { - controlPoints[i] = new Point(x, y + i * terminalSpacing + (i >= 6 ? terminalSpacing : 0)); + controlPoints[i] = new Point2D.Double(x, y + i * terminalSpacing + (i >= 6 ? terminalSpacing : 0)); } break; case _4P5T: - controlPoints = new Point[24]; + controlPoints = new Point2D[24]; for (int i = 0; i < 12; i++) { - controlPoints[i] = new Point(x, y + i * terminalSpacing + (i >= 6 ? terminalSpacing : 0)); - controlPoints[i + 12] = new Point(x + waferSpacing, y + i * terminalSpacing + (i >= 6 ? terminalSpacing : 0)); + controlPoints[i] = new Point2D.Double(x, y + i * terminalSpacing + (i >= 6 ? terminalSpacing : 0)); + controlPoints[i + 12] = new Point2D.Double(x + waferSpacing, y + i * terminalSpacing + (i >= 6 ? terminalSpacing : 0)); } break; } @@ -306,7 +306,7 @@ public class LeverSwitch extends AbstractTransparentComponent implements break; } AffineTransform rotation = AffineTransform.getRotateInstance(theta, x, y); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { rotation.transform(point, point); } } @@ -360,12 +360,12 @@ public class LeverSwitch extends AbstractTransparentComponent implements } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoints[index].setLocation(point); // Invalidate the body body = null; diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java index e26cfbea..5a278fce 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java @@ -25,13 +25,13 @@ import java.awt.AlphaComposite; 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.Point2D; import java.awt.geom.RoundRectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -195,9 +195,9 @@ public class P90Pickup extends AbstractSingleOrHumbuckerPickup { if (body == null) { body = new Shape[4]; - Point[] points = getControlPoints(); - int x = points[0].x; - int y = points[0].y; + Point2D[] points = getControlPoints(); + double x = points[0].getX(); + double y = points[0].getY(); int width = (int) getType().getWidth().convertToPixels(); int length = (int) getType().getLength().convertToPixels(); int edgeRadius = (int) getType().getEdgeRadius().convertToPixels(); diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java index 8986c498..d2e99207 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java @@ -25,11 +25,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.RoundRectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -142,9 +142,9 @@ public class PBassPickup extends AbstractSingleOrHumbuckerPickup { if (body == null) { body = new Shape[4]; - Point[] points = getControlPoints(); - int x = points[0].x; - int y = points[0].y; + Point2D[] points = getControlPoints(); + double x = points[0].getX(); + double y = points[0].getY(); int width = (int) WIDTH.convertToPixels(); int length = (int) LENGTH.convertToPixels(); int edgeRadius = (int) EDGE_RADIUS.convertToPixels(); 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 777145d5..7b29bb5b 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java @@ -25,11 +25,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -186,9 +186,9 @@ public class SingleCoilPickup extends AbstractSingleOrHumbuckerPickup { if (body == null) { body = new Shape[5]; - Point[] points = getControlPoints(); - int x = (points[0].x + points[3].x) / 2; - int y = (points[0].y + points[3].y) / 2;; + Point2D[] points = getControlPoints(); + double x = (points[0].getX() + points[3].getX()) / 2; + double y = (points[0].getY() + points[3].getY()) / 2;; int width = (int) WIDTH.convertToPixels(); int length = (int) LENGTH.convertToPixels(); int stratInnerLength = (int) STRAT_INNER_LENGTH.convertToPixels(); @@ -327,9 +327,9 @@ public class SingleCoilPickup extends AbstractSingleOrHumbuckerPickup { body[1] = new Area(); double lugHole = getClosestOdd(lugDiameter * 0.4); for (int i = getPolarity() == Polarity.Humbucking ? 0 : 1; i < (getPolarity() == Polarity.Humbucking ? 4 : 3); i++) { - Point p = points[i]; - ((Area)body[1]).add(new Area(new Ellipse2D.Double(p.x - lugDiameter / 2, p.y - lugDiameter / 2, lugDiameter, lugDiameter))); - ((Area)body[1]).subtract(new Area(new Ellipse2D.Double(p.x - lugHole / 2, p.y - lugHole / 2, lugHole, lugHole))); + Point2D p = points[i]; + ((Area)body[1]).add(new Area(new Ellipse2D.Double(p.getX() - lugDiameter / 2, p.getY() - lugDiameter / 2, lugDiameter, lugDiameter))); + ((Area)body[1]).subtract(new Area(new Ellipse2D.Double(p.getX() - lugHole / 2, p.getY() - lugHole / 2, lugHole, lugHole))); } } return body; diff --git a/diylc/diylc-library/src/org/diylc/components/misc/BOM.java b/diylc/diylc-library/src/org/diylc/components/misc/BOM.java index e7087628..d2de13cd 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/BOM.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/BOM.java @@ -21,27 +21,27 @@ */ package org.diylc.components.misc; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.geom.Rectangle2D; -import java.util.Iterator; -import java.util.List; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.util.Iterator; +import java.util.List; -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.measures.Size; -import org.diylc.core.measures.SizeUnit; -import org.diylc.utils.BomEntry; +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.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.BomEntry; import org.diylc.utils.BomMaker; @ComponentDescriptor(name = "Bill of Materials", author = "Branislav Stojkovic", category = "Misc", description = "", @@ -57,7 +57,7 @@ public class BOM extends AbstractComponent { private static final long serialVersionUID = 1L; private Size size = DEFAULT_SIZE; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private Color color = COLOR; @Override @@ -116,7 +116,7 @@ public class BOM extends AbstractComponent { int columnWidth = (int) size.convertToPixels() / columnCount; int entriesPerColumn = (int) Math.ceil(1.d * bom.size() / columnCount); if (entriesPerColumn == 0) { - g2d.drawString(DEFAULT_TEXT, point.x, point.y); + g2d.drawString(DEFAULT_TEXT, (int)point.getX(), (int)point.getY()); return; } for (int i = 0; i < bom.size(); i++) { @@ -129,8 +129,8 @@ public class BOM extends AbstractComponent { } int columnIndex = i / entriesPerColumn; int rowIndex = i % entriesPerColumn; - int x = point.x + columnIndex * columnWidth; - int y = point.y + rowIndex * maxHeight; + int x = (int)(point.getX() + columnIndex * columnWidth); + int y = (int)(point.getY() + rowIndex * maxHeight); g2d.drawString(entry.getName(), x, y); x += maxNameWidth + SPACING.convertToPixels(); g2d.drawString(valueStr, x, y); @@ -176,7 +176,7 @@ public class BOM extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @@ -191,7 +191,7 @@ public class BOM extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java b/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java index bf574740..2779f5b3 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java @@ -23,8 +23,8 @@ package org.diylc.components.misc; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Polygon; +import java.awt.geom.Point2D; import org.diylc.common.ObjectCache; import org.diylc.common.Orientation; @@ -50,7 +50,7 @@ public class GroundSymbol extends AbstractComponent { public static Color COLOR = Color.black; public static Size SIZE = new Size(0.15d, SizeUnit.in); - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private Color color = COLOR; private Size size = SIZE; private GroundSymbolType type = GroundSymbolType.DEFAULT; @@ -60,35 +60,35 @@ public class GroundSymbol extends AbstractComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - int sizePx = (int) size.convertToPixels(); + double sizePx = size.convertToPixels(); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setColor(color); - int x = point.x; - int y = point.y; + double x = point.getX(); + double y = point.getY(); switch (getOrientation()) { case _90: - g2d.rotate(Math.PI / 2, point.x, point.y); + g2d.rotate(Math.PI / 2, point.getX(), point.getY()); break; case _180: - g2d.rotate(Math.PI, point.x, point.y); + g2d.rotate(Math.PI, point.getX(), point.getY()); break; case _270: - g2d.rotate(Math.PI * 3 / 2, point.x, point.y); + g2d.rotate(Math.PI * 3 / 2, point.getX(), point.getY()); break; } - g2d.drawLine(x, y, x, y + sizePx / 6); + g2d.drawLine((int)x, (int)y, (int)x, (int)(y + sizePx / 6)); if (type == GroundSymbolType.DEFAULT) { - int delta = sizePx / 7; + double delta = sizePx / 7; for (int i = 0; i < 5; i++) { - g2d.drawLine(x - sizePx / 2 + delta * i, y + sizePx / 6 * (i + 1), x + sizePx / 2 - delta * i, y + sizePx / 6 - * (i + 1)); + g2d.drawLine((int)(x - sizePx / 2 + delta * i), (int)(y + sizePx / 6 * (i + 1)), (int)(x + sizePx / 2 - delta * i), (int)(y + sizePx / 6 + * (i + 1))); } } else { Polygon poly = - new Polygon(new int[] {x - sizePx / 2, x + sizePx / 2, x}, new int[] {y + sizePx / 6, y + sizePx / 6, - y + sizePx}, 3); + new Polygon(new int[] {(int)(x - sizePx / 2), (int)(x + sizePx / 2), (int)x}, new int[] {(int)(y + sizePx / 6), (int)(y + sizePx / 6), + (int)(y + sizePx)}, 3); g2d.draw(poly); } } @@ -126,7 +126,7 @@ public class GroundSymbol extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @@ -159,7 +159,7 @@ public class GroundSymbol extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } // diff --git a/diylc/diylc-library/src/org/diylc/components/misc/Image.java b/diylc/diylc-library/src/org/diylc/components/misc/Image.java index bf2ce398..9fc1082b 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/Image.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/Image.java @@ -20,8 +20,8 @@ package org.diylc.components.misc; import java.awt.AlphaComposite; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; @@ -47,7 +47,6 @@ import org.diylc.core.annotations.PercentEditor; import com.thoughtworks.xstream.annotations.XStreamConverter; - @ComponentDescriptor(name = "Image", author = "Branislav Stojkovic", category = "Misc", description = "User defined image", instanceNamePrefix = "Img", zOrder = IDIYComponent.COMPONENT, flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW) @@ -57,6 +56,9 @@ public class Image extends AbstractTransparentComponent { public static String DEFAULT_TEXT = "Double click to edit text"; private static ImageIcon ICON; private static byte DEFAULT_SCALE = 25; + + private Point2D point = new Point2D.Double(0, 0); + private Point2D secondPoint = null; static { String name = "image.png"; @@ -69,10 +71,7 @@ public class Image extends AbstractTransparentComponent { @Override public String getControlPointNodeName(int index) { return null; - } - - private Point point = new Point(0, 0); - private Point secondPoint = null; + } @XStreamConverter(IconImageConverter.class) @Deprecated @@ -99,9 +98,9 @@ public class Image extends AbstractTransparentComponent { if (getSizingMode() == ImageSizingMode.Scale) { scaleX = scaleY = 1d * getScale() / DEFAULT_SCALE; } else { - Point secondPoint = getControlPoint(1); - scaleX = 1d * Math.abs(point.x - secondPoint.x) / imageIcon.getIconWidth(); - scaleY = 1d * Math.abs(point.y - secondPoint.y) / imageIcon.getIconHeight(); + Point2D secondPoint = getControlPoint(1); + scaleX = 1d * Math.abs(point.getX() - secondPoint.getX()) / imageIcon.getIconWidth(); + scaleY = 1d * Math.abs(point.getY() - secondPoint.getY()) / imageIcon.getIconHeight(); } Shape clip = g2d.getClip().getBounds(); @@ -114,16 +113,16 @@ public class Image extends AbstractTransparentComponent { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - int x; - int y; + double x; + double y; if (getSizingMode() == ImageSizingMode.Scale) { - x = point.x; - y = point.y; + x = point.getX(); + y = point.getY(); } else { - Point secondPoint = getControlPoint(1); - x = Math.min(point.x, secondPoint.x); - y = Math.min(point.y, secondPoint.y); + Point2D secondPoint = getControlPoint(1); + x = Math.min(point.getX(), secondPoint.getX()); + y = Math.min(point.getY(), secondPoint.getY()); } g2d.scale(scaleX, scaleY); @@ -133,13 +132,13 @@ public class Image extends AbstractTransparentComponent { g2d.scale(1 / scaleX, 1 / scaleY); g2d.setColor(SELECTION_COLOR); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); - g2d.drawRect(x, y, (int) (imageIcon.getIconWidth() * scaleX), (int) (imageIcon.getIconHeight() * scaleY)); + g2d.drawRect((int)x, (int)y, (int) (imageIcon.getIconWidth() * scaleX), (int) (imageIcon.getIconHeight() * scaleY)); } } @Override public void drawIcon(Graphics2D g2d, int width, int height) { - g2d.drawImage(ICON.getImage(), point.x, point.y, null); + g2d.drawImage(ICON.getImage(), (int)point.getX(), (int)point.getY(), null); } @Override @@ -148,12 +147,12 @@ public class Image extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { if (index == 0) return point; if (secondPoint == null) { ImageIcon imageIcon = getImage(); - secondPoint = new Point(point.x + imageIcon.getIconWidth(), point.y + imageIcon.getIconHeight()); + secondPoint = new Point2D.Double(point.getX() + imageIcon.getIconWidth(), point.getY() + imageIcon.getIconHeight()); } return secondPoint; } @@ -169,14 +168,14 @@ public class Image extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { if (index == 0) { - this.point.setLocation(point); + this.point.setLocation(point.getX(), point.getY()); } else { if (secondPoint == null) - secondPoint = new Point(point); + secondPoint = new Point2D.Double(point.getX(), point.getY()); else - secondPoint.setLocation(point); + secondPoint.setLocation(point.getX(), point.getY()); } } @@ -208,7 +207,7 @@ public class Image extends AbstractTransparentComponent { this.image = null; if (getSizingMode() == ImageSizingMode.TwoPoints) { ImageIcon imageIcon = getImage(); - setControlPoint(new Point(point.x + imageIcon.getIconWidth(), point.y + imageIcon.getIconHeight()), 1); + setControlPoint(new Point2D.Double(point.getX() + imageIcon.getIconWidth(), point.getY() + imageIcon.getIconHeight()), 1); } } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/Label.java b/diylc/diylc-library/src/org/diylc/components/misc/Label.java index d3f48210..75e77bfb 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/Label.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/Label.java @@ -21,25 +21,25 @@ */ package org.diylc.components.misc; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.geom.Rectangle2D; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; -import org.diylc.common.HorizontalAlignment; -import org.diylc.common.Orientation; -import org.diylc.common.VerticalAlignment; -import org.diylc.components.AbstractComponent; +import org.diylc.common.HorizontalAlignment; +import org.diylc.common.Orientation; +import org.diylc.common.VerticalAlignment; +import org.diylc.components.AbstractComponent; import org.diylc.components.transform.TextTransformer; -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.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; @ComponentDescriptor(name = "Label", author = "Branislav Stojkovic", category = "Misc", @@ -51,7 +51,7 @@ public class Label extends AbstractComponent { private static final long serialVersionUID = 1L; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private String text = DEFAULT_TEXT; private Font font = LABEL_FONT; private Color color = LABEL_COLOR; @@ -74,30 +74,30 @@ public class Label extends AbstractComponent { int textHeight = (int) rect.getHeight(); int textWidth = (int) rect.getWidth(); - int x = point.x; - int y = point.y; + double x = point.getX(); + double y = point.getY(); switch (getVerticalAlignment()) { case CENTER: - y = point.y - textHeight / 2 + fontMetrics.getAscent(); + y = point.getY() - textHeight / 2 + fontMetrics.getAscent(); break; case TOP: - y = point.y - textHeight + fontMetrics.getAscent(); + y = point.getY() - textHeight + fontMetrics.getAscent(); break; case BOTTOM: - y = point.y + fontMetrics.getAscent(); + y = point.getY() + fontMetrics.getAscent(); break; default: throw new RuntimeException("Unexpected alignment: " + getVerticalAlignment()); } switch (getHorizontalAlignment()) { case CENTER: - x = point.x - textWidth / 2; + x = point.getX() - textWidth / 2; break; case LEFT: - x = point.x; + x = point.getX(); break; case RIGHT: - x = point.x - textWidth; + x = point.getX() - textWidth; break; default: throw new RuntimeException("Unexpected alignment: " + getHorizontalAlignment()); @@ -105,16 +105,16 @@ public class Label extends AbstractComponent { switch (getOrientation()) { case _90: - g2d.rotate(Math.PI / 2, point.x, point.y); + g2d.rotate(Math.PI / 2, point.getX(), point.getY()); break; case _180: - g2d.rotate(Math.PI, point.x, point.y); + g2d.rotate(Math.PI, point.getX(), point.getY()); break; case _270: - g2d.rotate(Math.PI * 3 / 2, point.x, point.y); + g2d.rotate(Math.PI * 3 / 2, point.getX(), point.getY()); break; } - g2d.drawString(text, x, y); + g2d.drawString(text, (int)x, (int)y); } @Override @@ -216,7 +216,7 @@ public class Label extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @@ -231,7 +231,7 @@ public class Label extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/Loadline.java b/diylc/diylc-library/src/org/diylc/components/misc/Loadline.java index fcc4e979..f477c163 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/Loadline.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/Loadline.java @@ -22,18 +22,14 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; +import java.awt.geom.Point2D; import org.diylc.common.ObjectCache; -import org.diylc.common.SimpleComponentTransformer; import org.diylc.components.boards.AbstractBoard; import org.diylc.core.ComponentState; -import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; -import org.diylc.core.annotations.BomPolicy; -import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; //@ComponentDescriptor(name = "Loadline", category = "Misc", author = "Branislav Stojkovic", @@ -66,11 +62,11 @@ public class Loadline extends AbstractBoard { @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, IDrawingObserver drawingObserver) { - Point finalSecondPoint = getFinalSecondPoint(); + Point2D finalSecondPoint = getFinalSecondPoint(); Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, finalSecondPoint.y) - && !clip.contains(finalSecondPoint.x, firstPoint.y)) { + if (checkPointsClipped(clip) && !clip.contains(firstPoint.getX(), finalSecondPoint.getY()) + && !clip.contains(finalSecondPoint.getX(), firstPoint.getY())) { return; } @@ -83,8 +79,8 @@ public class Loadline extends AbstractBoard { } g2d.setColor(boardColor); - g2d.fillRect(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, - finalSecondPoint.y - firstPoint.y); + g2d.fillRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), + (int)(finalSecondPoint.getY() - firstPoint.getY())); g2d.setComposite(oldComposite); } @@ -96,8 +92,8 @@ public class Loadline extends AbstractBoard { ? SELECTION_COLOR : borderColor); - g2d.drawRect(firstPoint.x, firstPoint.y, finalSecondPoint.x - firstPoint.x, - finalSecondPoint.y - firstPoint.y); + g2d.drawRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(finalSecondPoint.getX() - firstPoint.getX()), + (int)(finalSecondPoint.getY() - firstPoint.getY())); } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/LoadlineCurve.java b/diylc/diylc-library/src/org/diylc/components/misc/LoadlineCurve.java index 2832c9b1..60aae247 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/LoadlineCurve.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/LoadlineCurve.java @@ -3,7 +3,7 @@ package org.diylc.components.misc; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import org.diylc.awt.StringUtils; import org.diylc.common.HorizontalAlignment; @@ -34,10 +34,10 @@ public class LoadlineCurve extends CurvedTrace { g2d.setColor(Color.black); Font oldFont = g2d.getFont(); g2d.setFont(project.getFont().deriveFont(12f).deriveFont(Font.BOLD)); - Point lastPoint = getControlPoint(getControlPointCount() - 1); + Point2D lastPoint = getControlPoint(getControlPointCount() - 1); int spacing = (int) LABEL_SPACING.convertToPixels(); - int x = lastPoint.x + spacing; - int y = lastPoint.y - spacing; + double x = lastPoint.getX() + spacing; + double y = lastPoint.getY() - spacing; StringUtils.drawCenteredText(g2d, getVoltage().toString(), x, y, HorizontalAlignment.LEFT, VerticalAlignment.TOP); g2d.setFont(oldFont); } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java b/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java index b72216ee..7ce5c6a7 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java @@ -21,27 +21,27 @@ */ package org.diylc.components.misc; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.geom.AffineTransform; -import java.awt.geom.Rectangle2D; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; -import org.diylc.common.HorizontalAlignment; -import org.diylc.common.Orientation; +import org.diylc.common.HorizontalAlignment; +import org.diylc.common.Orientation; import org.diylc.common.PCBLayer; -import org.diylc.common.VerticalAlignment; -import org.diylc.components.AbstractComponent; +import org.diylc.common.VerticalAlignment; +import org.diylc.components.AbstractComponent; import org.diylc.components.transform.TextTransformer; -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.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; @ComponentDescriptor(name = "PCB Text", author = "Branislav Stojkovic", category = "Misc", @@ -55,7 +55,7 @@ public class PCBText extends AbstractComponent { private static final long serialVersionUID = 1L; - private Point point = new Point(0, 0); + private Point2D point = new Point2D.Double(0, 0); private String text = DEFAULT_TEXT; private Font font = DEFAULT_FONT; private Color color = LABEL_COLOR; @@ -77,30 +77,30 @@ public class PCBText extends AbstractComponent { int textHeight = (int) rect.getHeight(); int textWidth = (int) rect.getWidth(); - int x = point.x; - int y = point.y; + double x = point.getX(); + double y = point.getY(); switch (getVerticalAlignment()) { case CENTER: - y = point.y - textHeight / 2 + fontMetrics.getAscent(); + y = point.getY() - textHeight / 2 + fontMetrics.getAscent(); break; case TOP: - y = point.y - textHeight + fontMetrics.getAscent(); + y = point.getY() - textHeight + fontMetrics.getAscent(); break; case BOTTOM: - y = point.y + fontMetrics.getAscent(); + y = point.getY() + fontMetrics.getAscent(); break; default: throw new RuntimeException("Unexpected alignment: " + getVerticalAlignment()); } switch (getHorizontalAlignment()) { case CENTER: - x = point.x - textWidth / 2; + x = point.getX() - textWidth / 2; break; case LEFT: - x = point.x; + x = point.getX(); break; case RIGHT: - x = point.x - textWidth; + x = point.getX() - textWidth; break; default: throw new RuntimeException("Unexpected alignment: " + getHorizontalAlignment()); @@ -108,13 +108,13 @@ public class PCBText extends AbstractComponent { switch (getOrientation()) { case _90: - g2d.rotate(Math.PI / 2, point.x, point.y); + g2d.rotate(Math.PI / 2, point.getX(), point.getY()); break; case _180: - g2d.rotate(Math.PI, point.x, point.y); + g2d.rotate(Math.PI, point.getX(), point.getY()); break; case _270: - g2d.rotate(Math.PI * 3 / 2, point.x, point.y); + g2d.rotate(Math.PI * 3 / 2, point.getX(), point.getY()); break; } @@ -125,7 +125,7 @@ public class PCBText extends AbstractComponent { tx.translate(-2 * x - textWidth, 0); g2d.transform(tx); - g2d.drawString(text, x, y); + g2d.drawString(text, (int)x, (int)y); g2d.setTransform(oldTx); } @@ -231,7 +231,7 @@ public class PCBText extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return point; } @@ -246,7 +246,7 @@ public class PCBText extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.point.setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/WrapLabel.java b/diylc/diylc-library/src/org/diylc/components/misc/WrapLabel.java index 8dc59170..5b6533ed 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/WrapLabel.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/WrapLabel.java @@ -25,7 +25,7 @@ import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.awt.StringUtils; @@ -54,10 +54,10 @@ public class WrapLabel extends AbstractComponent { public static Size DEFAULT_WIDTH = new Size(1.5d, SizeUnit.in); public static Size DEFAULT_HEIGHT = new Size(0.5d, SizeUnit.in); - protected Point[] controlPoints = new Point[] {new Point(0, 0), - new Point((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels())}; - protected Point firstPoint = new Point(); - protected Point secondPoint = new Point(); + protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), + new Point2D.Double((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels())}; + protected Point2D firstPoint = new Point2D.Double(); + protected Point2D secondPoint = new Point2D.Double(); private Font font = LABEL_FONT; private Color color = LABEL_COLOR; @@ -86,17 +86,17 @@ public class WrapLabel extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); - firstPoint.setLocation(Math.min(controlPoints[0].x, controlPoints[1].x), - Math.min(controlPoints[0].y, controlPoints[1].y)); - secondPoint.setLocation(Math.max(controlPoints[0].x, controlPoints[1].x), - Math.max(controlPoints[0].y, controlPoints[1].y)); + firstPoint.setLocation(Math.min(controlPoints[0].getX(), controlPoints[1].getX()), + Math.min(controlPoints[0].getY(), controlPoints[1].getY())); + secondPoint.setLocation(Math.max(controlPoints[0].getX(), controlPoints[1].getX()), + Math.max(controlPoints[0].getY(), controlPoints[1].getY())); } @Override @@ -178,11 +178,11 @@ public class WrapLabel extends AbstractComponent { g2d.setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED : color); g2d.setFont(font); - int x = firstPoint.x; - int y = firstPoint.y; - int maxWidth = secondPoint.x - firstPoint.x; + double x = firstPoint.getX(); + double y = firstPoint.getY(); + double maxWidth = secondPoint.getX() - firstPoint.getX(); - StringUtils.drawWrappedText(value, g2d, x, y, maxWidth, horizontalAlignment); + StringUtils.drawWrappedText(value, g2d, (int)x, (int)y, (int)maxWidth, horizontalAlignment); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/passive/AbstractPotentiometer.java b/diylc/diylc-library/src/org/diylc/components/passive/AbstractPotentiometer.java index f3c994f8..c52f99b1 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/AbstractPotentiometer.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/AbstractPotentiometer.java @@ -21,7 +21,7 @@ */ package org.diylc.components.passive; -import java.awt.Point; +import java.awt.geom.Point2D; import org.diylc.common.Orientation; import org.diylc.components.AbstractTransparentComponent; @@ -34,7 +34,7 @@ public abstract class AbstractPotentiometer extends AbstractTransparentComponent private static final long serialVersionUID = 1L; - protected Point[] controlPoints; + protected Point2D[] controlPoints; protected Resistance resistance = null; protected Orientation orientation = Orientation.DEFAULT; @@ -46,12 +46,12 @@ public abstract class AbstractPotentiometer extends AbstractTransparentComponent } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); } diff --git a/diylc/diylc-library/src/org/diylc/components/passive/AudioTransformer.java b/diylc/diylc-library/src/org/diylc/components/passive/AudioTransformer.java index 77dce4fd..8e2f3eec 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/AudioTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/AudioTransformer.java @@ -26,10 +26,10 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.geom.Area; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -82,7 +82,7 @@ public class AudioTransformer extends AbstractMultiPartComponent { private Size coreWidth = new Size(0.6, SizeUnit.in); private Size coilWidth = new Size(0.5, SizeUnit.in); private Size coilLength = new Size(0.6, SizeUnit.in); - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; protected Display display = Display.BOTH; private Color coreColor = CORE_COLOR; private Color coreBorderColor = CORE_BORDER_COLOR; @@ -163,7 +163,7 @@ public class AudioTransformer extends AbstractMultiPartComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -178,24 +178,24 @@ public class AudioTransformer extends AbstractMultiPartComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int pinCount = 4 + (primaryCT ? 1 : 0) + (secondaryCT ? 1 : 0); - controlPoints = new Point[pinCount]; + controlPoints = new Point2D[pinCount]; controlPoints[0] = firstPoint; double leadSpacing = this.leadSpacing.convertToPixels(); double windingSpacing = this.windingSpacing.convertToPixels(); // Update control points. for (int i = 1; i < 2 + (primaryCT ? 1 : 0); i++) - controlPoints[i] = new Point(firstPoint.x, (int) (firstPoint.y + i * leadSpacing * (primaryCT ? 1 : 2))); + controlPoints[i] = new Point2D.Double(firstPoint.getX(), firstPoint.getY() + i * leadSpacing * (primaryCT ? 1 : 2)); for (int i = 0; i < 2 + (secondaryCT ? 1 : 0); i++) - controlPoints[2 + (primaryCT ? 1 : 0) + i] = new Point((int) (firstPoint.x + windingSpacing), (int) (firstPoint.y + i * leadSpacing * (secondaryCT ? 1 : 2))); + controlPoints[2 + (primaryCT ? 1 : 0) + i] = new Point2D.Double(firstPoint.getX() + windingSpacing, firstPoint.getY() + i * leadSpacing * (secondaryCT ? 1 : 2)); AffineTransform tx = getTx(); @@ -212,8 +212,8 @@ public class AudioTransformer extends AbstractMultiPartComponent { body = new Area[2]; double leadSpacing = this.leadSpacing.convertToPixels(); double windingSpacing = this.windingSpacing.convertToPixels(); - int centerX = (int) (controlPoints[0].x + windingSpacing / 2); - int centerY = (int) (controlPoints[0].y + leadSpacing); + double centerX = (int) (controlPoints[0].getX() + windingSpacing / 2); + double centerY = (int) (controlPoints[0].getY() + leadSpacing); int coreWidth = getClosestOdd(this.coreWidth.convertToPixels()); int coreThickness = getClosestOdd(this.coreThickness.convertToPixels()); int coilWidth = getClosestOdd(this.coilWidth.convertToPixels()); @@ -235,8 +235,8 @@ public class AudioTransformer extends AbstractMultiPartComponent { @SuppressWarnings("incomplete-switch") private AffineTransform getTx() { - double x = controlPoints[0].x; - double y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); if (orientation == Orientation.DEFAULT) return null; @@ -269,11 +269,11 @@ public class AudioTransformer extends AbstractMultiPartComponent { if (!outlineMode) { int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); g2d.setColor(PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } } Composite oldComposite = g2d.getComposite(); @@ -312,15 +312,15 @@ public class AudioTransformer extends AbstractMultiPartComponent { g2d.setFont(project.getFont()); // Draw winding designations - Point wPoint = new Point((int) (controlPoints[0].x + project.getFontSize()), (int) (controlPoints[0].y + leadSpacing.convertToPixels())); + Point2D wPoint = new Point2D.Double((int) (controlPoints[0].getX() + project.getFontSize()), (int) (controlPoints[0].getY() + leadSpacing.convertToPixels())); AffineTransform tx = getTx(); if (tx != null) tx.transform(wPoint, wPoint); - StringUtils.drawCenteredText(g2d, "P", wPoint.x, wPoint.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); - wPoint = new Point((int) (controlPoints[0].x + windingSpacing.convertToPixels() - project.getFontSize()), (int) (controlPoints[0].y + leadSpacing.convertToPixels())); + StringUtils.drawCenteredText(g2d, "P", wPoint.getX(), wPoint.getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + wPoint = new Point2D.Double((int) (controlPoints[0].getX() + windingSpacing.convertToPixels() - project.getFontSize()), (int) (controlPoints[0].getY() + leadSpacing.convertToPixels())); if (tx != null) tx.transform(wPoint, wPoint); - StringUtils.drawCenteredText(g2d, "S", wPoint.x, wPoint.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, "S", wPoint.getX(), wPoint.getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); // Draw label. Color finalLabelColor; @@ -356,14 +356,14 @@ public class AudioTransformer extends AbstractMultiPartComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = coreArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + double x = bounds.getX() + (bounds.width - textWidth) / 2; + double y = bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); AffineTransform oldTransform = g2d.getTransform(); if (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180) { - int centerX = bounds.x + bounds.width / 2; - int centerY = bounds.y + bounds.height / 2; + double centerX = bounds.getX() + bounds.width / 2; + double centerY = bounds.getY() + bounds.height / 2; g2d.rotate(-Math.PI / 2, centerX, centerY); } @@ -374,7 +374,7 @@ public class AudioTransformer extends AbstractMultiPartComponent { g2d.translate(0, textHeight / 2); } - g2d.drawString(l, x, y); + g2d.drawString(l, (int)x, (int)y); g2d.setTransform(oldTransform); } diff --git a/diylc/diylc-library/src/org/diylc/components/passive/MultiSectionCapacitor.java b/diylc/diylc-library/src/org/diylc/components/passive/MultiSectionCapacitor.java index bbc1fc48..998b7cd7 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/MultiSectionCapacitor.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/MultiSectionCapacitor.java @@ -25,10 +25,10 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.text.DecimalFormat; import java.text.Format; @@ -79,7 +79,7 @@ public class MultiSectionCapacitor extends AbstractTransparentComponent 0) - g2d.drawLine(x, (int)(y - markerSize / 2), x, (int)(y + markerSize / 2)); + g2d.drawLine((int)x, (int)(y - markerSize / 2), (int)x, (int)(y + markerSize / 2)); } } diff --git a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java index bcd262fa..63dad3f5 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java @@ -30,6 +30,7 @@ import java.awt.Point; import java.awt.Polygon; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -93,20 +94,20 @@ public class PotentiometerPanel extends AbstractPotentiometer { int spacing = (int) this.spacing.convertToPixels(); switch (orientation) { case DEFAULT: - controlPoints[1].setLocation(controlPoints[0].x + spacing, controlPoints[0].y); - controlPoints[2].setLocation(controlPoints[0].x + 2 * spacing, controlPoints[0].y); + controlPoints[1].setLocation(controlPoints[0].getX() + spacing, controlPoints[0].getY()); + controlPoints[2].setLocation(controlPoints[0].getX() + 2 * spacing, controlPoints[0].getY()); break; case _90: - controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y + spacing); - controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y + 2 * spacing); + controlPoints[1].setLocation(controlPoints[0].getX(), controlPoints[0].getY() + spacing); + controlPoints[2].setLocation(controlPoints[0].getX(), controlPoints[0].getY() + 2 * spacing); break; case _180: - controlPoints[1].setLocation(controlPoints[0].x - spacing, controlPoints[0].y); - controlPoints[2].setLocation(controlPoints[0].x - 2 * spacing, controlPoints[0].y); + controlPoints[1].setLocation(controlPoints[0].getX() - spacing, controlPoints[0].getY()); + controlPoints[2].setLocation(controlPoints[0].getX() - 2 * spacing, controlPoints[0].getY()); break; case _270: - controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y - spacing); - controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y - 2 * spacing); + controlPoints[1].setLocation(controlPoints[0].getX(), controlPoints[0].getY() - spacing); + controlPoints[2].setLocation(controlPoints[0].getX(), controlPoints[0].getY() - 2 * spacing); break; default: break; @@ -124,66 +125,66 @@ public class PotentiometerPanel extends AbstractPotentiometer { // Add lugs. int pinWidth = (int) PIN_SIZE.convertToPixels(); - int centerX = 0; - int centerY = 0; + double centerX = 0; + double centerY = 0; double waferWidth = 2.5 * spacing; double waferHeight = spacing; switch (orientation) { case DEFAULT: - centerX = controlPoints[0].x + spacing; - centerY = controlPoints[0].y - spacing / 2 - diameter / 2; + centerX = controlPoints[0].getX() + spacing; + centerY = controlPoints[0].getY() - spacing / 2 - diameter / 2; body[9] = - new Area(new RoundRectangle2D.Double(centerX - waferWidth / 2, controlPoints[0].y - waferHeight - spacing + new Area(new RoundRectangle2D.Double(centerX - waferWidth / 2, controlPoints[0].getY() - waferHeight - spacing / 2, waferWidth, waferHeight, spacing / 4, spacing / 4)); for (int i = 0; i < 3; i++) { body[i] = - new Area(new Rectangle2D.Double(controlPoints[i].x - pinWidth / 2, controlPoints[i].y + new Area(new Rectangle2D.Double(controlPoints[i].getX() - pinWidth / 2, controlPoints[i].getY() - (spacing + diameter) / 2, pinWidth, (spacing + diameter) / 2)); } break; case _90: - centerX = controlPoints[0].x + spacing / 2 + diameter / 2; - centerY = controlPoints[0].y + spacing; + centerX = controlPoints[0].getX() + spacing / 2 + diameter / 2; + centerY = controlPoints[0].getY() + spacing; body[9] = - new Area(new RoundRectangle2D.Double(controlPoints[0].x + spacing / 2, centerY - waferWidth / 2, + new Area(new RoundRectangle2D.Double(controlPoints[0].getX() + spacing / 2, centerY - waferWidth / 2, waferHeight, waferWidth, spacing / 4, spacing / 4)); for (int i = 0; i < 3; i++) { body[i] = - new Area(new Rectangle2D.Double(controlPoints[i].x, controlPoints[i].y - pinWidth / 2, + new Area(new Rectangle2D.Double(controlPoints[i].getX(), controlPoints[i].getY() - pinWidth / 2, (spacing + diameter) / 2, pinWidth)); } break; case _180: - centerX = controlPoints[0].x - spacing; - centerY = controlPoints[0].y + spacing / 2 + diameter / 2; + centerX = controlPoints[0].getX() - spacing; + centerY = controlPoints[0].getY() + spacing / 2 + diameter / 2; body[9] = - new Area(new RoundRectangle2D.Double(centerX - waferWidth / 2, controlPoints[0].y + spacing / 2, + new Area(new RoundRectangle2D.Double(centerX - waferWidth / 2, controlPoints[0].getY() + spacing / 2, waferWidth, waferHeight, spacing / 4, spacing / 4)); for (int i = 0; i < 3; i++) { body[i] = - new Area(new Rectangle2D.Double(controlPoints[i].x - pinWidth / 2, controlPoints[i].y, pinWidth, + new Area(new Rectangle2D.Double(controlPoints[i].getX() - pinWidth / 2, controlPoints[i].getY(), pinWidth, (spacing + diameter) / 2)); } break; case _270: - centerX = controlPoints[0].x - spacing / 2 - diameter / 2; - centerY = controlPoints[0].y - spacing; + centerX = controlPoints[0].getX() - spacing / 2 - diameter / 2; + centerY = controlPoints[0].getY() - spacing; body[9] = - new Area(new RoundRectangle2D.Double(controlPoints[0].x - waferHeight - spacing / 2, centerY - waferWidth + new Area(new RoundRectangle2D.Double(controlPoints[0].getX() - waferHeight - spacing / 2, centerY - waferWidth / 2, waferHeight, waferWidth, spacing / 4, spacing / 4)); for (int i = 0; i < 3; i++) { body[i] = - new Area(new Rectangle2D.Double(controlPoints[i].x - (spacing + diameter) / 2, controlPoints[i].y + new Area(new Rectangle2D.Double(controlPoints[i].getX() - (spacing + diameter) / 2, controlPoints[i].getY() - pinWidth / 2, (spacing + diameter) / 2, pinWidth)); } break; @@ -205,7 +206,7 @@ public class PotentiometerPanel extends AbstractPotentiometer { for (int i = 0; i < 3; i++) { Area area = - new Area(new Ellipse2D.Double(controlPoints[i].x - lugDiameter / 2, controlPoints[i].y - lugDiameter / 2, + new Area(new Ellipse2D.Double(controlPoints[i].getX() - lugDiameter / 2, controlPoints[i].getY() - lugDiameter / 2, lugDiameter, lugDiameter)); body[4 + i] = area; } @@ -217,7 +218,7 @@ public class PotentiometerPanel extends AbstractPotentiometer { } // Make holes in the lugs. for (int i = 0; i < 3; i++) { - body[4 + i].subtract(new Area(new Ellipse2D.Double(controlPoints[i].x - holeDiameter / 2, controlPoints[i].y + body[4 + i].subtract(new Area(new Ellipse2D.Double(controlPoints[i].getX() - holeDiameter / 2, controlPoints[i].getY() - holeDiameter / 2, holeDiameter, holeDiameter))); } } @@ -241,7 +242,7 @@ public class PotentiometerPanel extends AbstractPotentiometer { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { super.setControlPoint(point, index); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java index cf446c54..eaeda6cf 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java @@ -24,10 +24,10 @@ package org.diylc.components.passive; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Polygon; import java.awt.Shape; import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.components.Abstract3LegSymbol; @@ -51,9 +51,9 @@ public class PotentiometerSymbol extends Abstract3LegSymbol { public Shape[] getBody() { Shape[] body = new Shape[3]; - Point[] controlPoints = getControlPoints(); - int x = controlPoints[0].x; - int y = controlPoints[0].y; + Point2D[] controlPoints = getControlPoints(); + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int pinSpacing = (int) PIN_SPACING.convertToPixels(); GeneralPath polyline = new GeneralPath(); @@ -92,8 +92,8 @@ public class PotentiometerSymbol extends Abstract3LegSymbol { } @Override - protected int getLabelX(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { - int x = super.getLabelX(shapeRect, textRect, fontMetrics, outlineMode); + protected double getLabelX(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { + double x = super.getLabelX(shapeRect, textRect, fontMetrics, outlineMode); if (getFlip() == SymbolFlipping.X) return x - (int) (PIN_SPACING.convertToPixels() / 2); return x + (int) PIN_SPACING.convertToPixels(); diff --git a/diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java b/diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java index 3c9871b5..14f222eb 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/TransformerCoil.java @@ -23,9 +23,9 @@ package org.diylc.components.passive; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.IPlugInPort; @@ -60,7 +60,7 @@ public class TransformerCoil extends AbstractComponent { public static Size SPACING = new Size(0.025d, SizeUnit.in); public static Color COLOR = Color.blue; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; protected Color color = COLOR; @@ -68,12 +68,12 @@ public class TransformerCore extends AbstractComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return this.controlPoints[index]; } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { this.controlPoints[index].setLocation(point); } @@ -115,7 +115,7 @@ public class TransformerCore extends AbstractComponent { } double theta = - Math.atan2(this.controlPoints[1].y - this.controlPoints[0].y, this.controlPoints[1].x - this.controlPoints[0].x) + Math.atan2(this.controlPoints[1].getY() - this.controlPoints[0].getY(), this.controlPoints[1].getX() - this.controlPoints[0].getX()) + Math.PI / 2; double spacing = SPACING.convertToPixels(); // System.out.println(theta); @@ -124,9 +124,9 @@ public class TransformerCore extends AbstractComponent { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.translate(spacing * Math.cos(theta) / 2, spacing * Math.sin(theta) / 2); - g2d.drawLine(this.controlPoints[0].x, this.controlPoints[0].y, this.controlPoints[1].x, this.controlPoints[1].y); + g2d.drawLine((int)this.controlPoints[0].getX(), (int)this.controlPoints[0].getY(), (int)this.controlPoints[1].getX(), (int)this.controlPoints[1].getY()); g2d.translate(-spacing * Math.cos(theta), -spacing * Math.sin(theta)); - g2d.drawLine(this.controlPoints[0].x, this.controlPoints[0].y, this.controlPoints[1].x, this.controlPoints[1].y); + g2d.drawLine((int)this.controlPoints[0].getX(), (int)this.controlPoints[0].getY(), (int)this.controlPoints[1].getX(), (int)this.controlPoints[1].getY()); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java b/diylc/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java index 88c8985f..7ea2711e 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java @@ -27,6 +27,7 @@ import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -283,8 +284,8 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { default: break; } - controlPoints[1].setLocation(controlPoints[0].x + dx1, controlPoints[0].y + dy1); - controlPoints[2].setLocation(controlPoints[0].x + dx2, controlPoints[0].y + dy2); + controlPoints[1].setLocation(controlPoints[0].getX() + dx1, controlPoints[0].getY() + dy1); + controlPoints[2].setLocation(controlPoints[0].getX() + dx2, controlPoints[0].getY() + dy2); } public Shape[] getBody() { @@ -293,12 +294,12 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { // Calculate the center point as center of the minimum bounding // rectangle. - int centerX = - (Math.max(Math.max(controlPoints[0].x, controlPoints[1].x), controlPoints[2].x) + Math.min( - Math.min(controlPoints[0].x, controlPoints[1].x), controlPoints[2].x)) / 2; - int centerY = - (Math.max(Math.max(controlPoints[0].y, controlPoints[1].y), controlPoints[2].y) + Math.min( - Math.min(controlPoints[0].y, controlPoints[1].y), controlPoints[2].y)) / 2; + double centerX = + (Math.max(Math.max(controlPoints[0].getX(), controlPoints[1].getX()), controlPoints[2].getX()) + Math.min( + Math.min(controlPoints[0].getX(), controlPoints[1].getX()), controlPoints[2].getX())) / 2; + double centerY = + (Math.max(Math.max(controlPoints[0].getY(), controlPoints[1].getY()), controlPoints[2].getY()) + Math.min( + Math.min(controlPoints[0].getY(), controlPoints[1].getY()), controlPoints[2].getY())) / 2; // Calculate body dimensions based on the selected type. int length = 0; @@ -350,7 +351,7 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { super.setControlPoint(point, index); body = null; } @@ -404,13 +405,13 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { // Draw pins. int pinSize = getClosestOdd(PIN_SIZE.convertToPixels()); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { if (!outlineMode) { g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } // Draw label. diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java index 23dfac1d..a30816aa 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java @@ -26,6 +26,7 @@ import java.awt.Font; import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.Area; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.awt.StringUtils; @@ -157,7 +158,7 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java index 0e3f6f30..51db5fab 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java @@ -21,20 +21,20 @@ */ package org.diylc.components.semiconductors; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Polygon; -import java.awt.Shape; -import java.awt.geom.AffineTransform; -import java.awt.geom.Area; -import java.awt.geom.GeneralPath; +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; -import org.diylc.common.ObjectCache; +import org.diylc.common.ObjectCache; import org.diylc.components.Abstract3LegSymbol; import org.diylc.components.transform.ThreeLegTransformer; -import org.diylc.core.IDIYComponent; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.IDIYComponent; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "BJT", author = "Branislav Stojkovic", category = "Schematic Symbols", @@ -48,9 +48,9 @@ public class BJTSymbol extends Abstract3LegSymbol { public Shape[] getBody() { Shape[] body = new Shape[3]; - Point[] controlPoints = getControlPoints(); - int x = controlPoints[0].x; - int y = controlPoints[0].y; + Point2D[] controlPoints = getControlPoints(); + int x = (int) controlPoints[0].getX(); + int y = (int) controlPoints[0].getY(); int pinSpacing = (int) PIN_SPACING.convertToPixels(); GeneralPath polyline = new GeneralPath(); diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java index d1042df2..1e6ba8c9 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java @@ -26,11 +26,11 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -103,7 +103,7 @@ public class BridgeRectifier extends AbstractTransparentComponent { private String value = ""; private Orientation orientation = Orientation.DEFAULT; - private Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + private Point2D[] controlPoints = new Point2D[] { new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0) }; private String[] pointLabels = new String[] { "+", "~", "~", "-" }; protected Display display = Display.BOTH; private Color bodyColor = BODY_COLOR; @@ -160,7 +160,7 @@ public class BridgeRectifier extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -175,14 +175,14 @@ public class BridgeRectifier extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } @SuppressWarnings("incomplete-switch") private void updateControlPoints() { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; int hSpacing; int vSpacing; @@ -191,40 +191,40 @@ public class BridgeRectifier extends AbstractTransparentComponent { case MiniDIP1: hSpacing = (int) MINI_HORIZONTAL_SPACING.convertToPixels(); vSpacing = (int) MINI_VERTICAL_SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); - controlPoints[2].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); - controlPoints[3].setLocation(firstPoint.x, firstPoint.y + vSpacing); + controlPoints[1].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY()); + controlPoints[2].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY() + vSpacing); + controlPoints[3].setLocation(firstPoint.getX(), firstPoint.getY() + vSpacing); break; case MiniDIP2: hSpacing = (int) MINI_HORIZONTAL_SPACING.convertToPixels(); vSpacing = (int) MINI_VERTICAL_SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); - controlPoints[2].setLocation(firstPoint.x, firstPoint.y + vSpacing); - controlPoints[3].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + controlPoints[1].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY()); + controlPoints[2].setLocation(firstPoint.getX(), firstPoint.getY() + vSpacing); + controlPoints[3].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY() + vSpacing); break; case MiniRound1: hSpacing = vSpacing = (int) MINI_ROUND_SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); - controlPoints[2].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); - controlPoints[3].setLocation(firstPoint.x, firstPoint.y + vSpacing); + controlPoints[1].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY()); + controlPoints[2].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY() + vSpacing); + controlPoints[3].setLocation(firstPoint.getX(), firstPoint.getY() + vSpacing); break; case MiniRound2: hSpacing = vSpacing = (int) MINI_ROUND_SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); - controlPoints[2].setLocation(firstPoint.x, firstPoint.y + vSpacing); - controlPoints[3].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + controlPoints[1].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY()); + controlPoints[2].setLocation(firstPoint.getX(), firstPoint.getY() + vSpacing); + controlPoints[3].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY() + vSpacing); break; case InLine: vSpacing = (int) INLINE_SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x, firstPoint.y + vSpacing); - controlPoints[2].setLocation(firstPoint.x, firstPoint.y + 2 * vSpacing); - controlPoints[3].setLocation(firstPoint.x, firstPoint.y + 3 * vSpacing); + controlPoints[1].setLocation(firstPoint.getX(), firstPoint.getY() + vSpacing); + controlPoints[2].setLocation(firstPoint.getX(), firstPoint.getY() + 2 * vSpacing); + controlPoints[3].setLocation(firstPoint.getX(), firstPoint.getY() + 3 * vSpacing); break; case SquareBR3: hSpacing = vSpacing = (int) BR3_SPACING.convertToPixels(); - controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); - controlPoints[2].setLocation(firstPoint.x, firstPoint.y + vSpacing); - controlPoints[3].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + controlPoints[1].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY()); + controlPoints[2].setLocation(firstPoint.getX(), firstPoint.getY() + vSpacing); + controlPoints[3].setLocation(firstPoint.getX() + hSpacing, firstPoint.getY() + vSpacing); break; } @@ -241,7 +241,7 @@ public class BridgeRectifier extends AbstractTransparentComponent { theta = Math.PI * 3 / 2; break; } - AffineTransform rotation = AffineTransform.getRotateInstance(theta, firstPoint.x, firstPoint.y); + AffineTransform rotation = AffineTransform.getRotateInstance(theta, firstPoint.getX(), firstPoint.getY()); for (int i = 1; i < controlPoints.length; i++) { rotation.transform(controlPoints[i], controlPoints[i]); @@ -254,8 +254,8 @@ public class BridgeRectifier extends AbstractTransparentComponent { if (body == null) { body = new Area[2]; - int centerX = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x + controlPoints[3].x) / 4; - int centerY = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y + controlPoints[3].y) / 4; + double centerX = (controlPoints[0].getX() + controlPoints[1].getX() + controlPoints[2].getX() + controlPoints[3].getX()) / 4; + double centerY = (controlPoints[0].getY() + controlPoints[1].getY() + controlPoints[2].getY() + controlPoints[3].getY()) / 4; int width = 0; int length = 0; @@ -307,13 +307,13 @@ public class BridgeRectifier extends AbstractTransparentComponent { // path.lineTo(centerX - width / 2, centerY - width / 2 + margin); // path.closePath(); - RoundedPolygon poly = new RoundedPolygon(new Point[] { - new Point(centerX, centerY - width / 2), - new Point(centerX + width / 2, centerY - width / 2), - new Point(centerX + width / 2, centerY + width / 2), - new Point(centerX - width / 2, centerY + width / 2), - new Point(centerX - width / 2, (int) (centerY - width / 2 + margin)), - new Point((int) (centerX - width / 2 + margin), centerY - width / 2), + RoundedPolygon poly = new RoundedPolygon(new Point2D[] { + new Point2D.Double(centerX, centerY - width / 2), + new Point2D.Double(centerX + width / 2, centerY - width / 2), + new Point2D.Double(centerX + width / 2, centerY + width / 2), + new Point2D.Double(centerX - width / 2, centerY + width / 2), + new Point2D.Double(centerX - width / 2, (int) (centerY - width / 2 + margin)), + new Point2D.Double((int) (centerX - width / 2 + margin), centerY - width / 2), }, new double[] { EDGE_RADIUS, EDGE_RADIUS, EDGE_RADIUS, EDGE_RADIUS / 2 , EDGE_RADIUS / 2}); @@ -358,17 +358,17 @@ public class BridgeRectifier extends AbstractTransparentComponent { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); if (!outlineMode) { - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { g2d.setColor(PIN_COLOR); if (pinShape == PinShape.Round) - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); else - g2d.fillRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillRect((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); g2d.setColor(PIN_BORDER_COLOR); if (pinShape == PinShape.Round) - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); else - g2d.drawRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawRect((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } } @@ -443,14 +443,14 @@ public class BridgeRectifier extends AbstractTransparentComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = mainArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + double x = bounds.getX() + (bounds.width - textWidth) / 2; + double y = bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); AffineTransform oldTransform = g2d.getTransform(); if (getLabelOriantation() == LabelOriantation.Directional && (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180)) { - int centerX = bounds.x + bounds.width / 2; - int centerY = bounds.y + bounds.height / 2; + double centerX = bounds.getX() + bounds.width / 2; + double centerY = bounds.getY() + bounds.height / 2; g2d.rotate(-Math.PI / 2, centerX, centerY); } @@ -464,7 +464,7 @@ public class BridgeRectifier extends AbstractTransparentComponent { if (rectifierType == RectifierType.SquareBR3) y -= BR3_HOLE_SIZE.convertToPixels(); - g2d.drawString(l, x, y); + g2d.drawString(l, (int)x, (int)y); g2d.setTransform(oldTransform); } @@ -474,7 +474,7 @@ public class BridgeRectifier extends AbstractTransparentComponent { g2d.setFont(project.getFont().deriveFont((float) (project.getFont().getSize2D() * 0.8))); g2d.setColor(finalLabelColor); for (int i = 0; i { break; } - StringUtils.drawCenteredText(g2d, pointLabels[i], point.x + dx, point.y + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + StringUtils.drawCenteredText(g2d, pointLabels[i], point.getX() + dx, point.getY() + dy, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } } diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java index 462233e7..922d0137 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java @@ -26,11 +26,11 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -79,7 +79,7 @@ public class DIL_IC extends AbstractTransparentComponent { private PinCount pinCount = PinCount._8; private Size pinSpacing = new Size(0.1d, SizeUnit.in); private Size rowSpacing = new Size(0.3d, SizeUnit.in); - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; protected Display display = Display.BOTH; private Color bodyColor = BODY_COLOR; private Color borderColor = BORDER_COLOR; @@ -178,7 +178,7 @@ public class DIL_IC extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -193,14 +193,14 @@ public class DIL_IC extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; - controlPoints = new Point[pinCount.getValue()]; + Point2D firstPoint = controlPoints[0]; + controlPoints = new Point2D[pinCount.getValue()]; controlPoints[0] = firstPoint; double pinSpacing = this.pinSpacing.convertToPixels(); double rowSpacing = this.rowSpacing.convertToPixels(); @@ -238,16 +238,16 @@ public class DIL_IC extends AbstractTransparentComponent { default: throw new RuntimeException("Unexpected orientation: " + orientation); } - controlPoints[i] = new Point((int) (firstPoint.x + dx1), (int) (firstPoint.y + dy1)); - controlPoints[i + pinCount.getValue() / 2] = new Point((int) (firstPoint.x + dx2), (int) (firstPoint.y + dy2)); + controlPoints[i] = new Point2D.Double((int) (firstPoint.getX() + dx1), (int) (firstPoint.getY() + dy1)); + controlPoints[i + pinCount.getValue() / 2] = new Point2D.Double((int) (firstPoint.getX() + dx2), (int) (firstPoint.getY() + dy2)); } } public Area[] getBody() { if (body == null) { body = new Area[2]; - double x = controlPoints[0].x; - double y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); double width; double height; double pinSize = PIN_SIZE.convertToPixels(); @@ -314,11 +314,11 @@ public class DIL_IC extends AbstractTransparentComponent { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); if (!outlineMode) { int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { g2d.setColor(PIN_COLOR); - g2d.fillRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillRect((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); g2d.setColor(PIN_BORDER_COLOR); - g2d.drawRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawRect((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } } Composite oldComposite = g2d.getComposite(); @@ -392,14 +392,14 @@ public class DIL_IC extends AbstractTransparentComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = mainArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + double x = bounds.getX() + (bounds.width - textWidth) / 2; + double y = bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); AffineTransform oldTransform = g2d.getTransform(); if (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180) { - int centerX = bounds.x + bounds.width / 2; - int centerY = bounds.y + bounds.height / 2; + double centerX = bounds.getX() + bounds.width / 2; + double centerY = bounds.getY() + bounds.height / 2; g2d.rotate(-Math.PI / 2, centerX, centerY); } @@ -410,7 +410,7 @@ public class DIL_IC extends AbstractTransparentComponent { g2d.translate(0, textHeight / 2); } - g2d.drawString(l, x, y); + g2d.drawString(l, (int)x, (int)y); g2d.setTransform(oldTransform); } @@ -421,14 +421,14 @@ public class DIL_IC extends AbstractTransparentComponent { int j = 0; int k = 0; int pinSize = (int) PIN_SIZE.convertToPixels(); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { pinNo++; // determine points relative to rotation - int textX1 = point.x - 2 * pinSize; - int textY1 = point.y + pinSize / 2; - int textX2 = point.x + pinSize; - int textY2 = point.y + pinSize / 2; + int textX1 = (int) (point.getX() - 2 * pinSize); + int textY1 = (int) (point.getY() + pinSize / 2); + int textX2 = (int) (point.getX() + pinSize); + int textY2 = (int) (point.getY() + pinSize / 2); if (orientation == Orientation._90) { textX2 = textX2 - pinSize - pinSize / 2; textY2 = textY2 + pinSize; @@ -560,21 +560,21 @@ public class DIL_IC extends AbstractTransparentComponent { @Override public Rectangle2D getCachingBounds() { - int minX = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int minY = Integer.MAX_VALUE; - int maxY = Integer.MIN_VALUE; + double minX = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double minY = Integer.MAX_VALUE; + double maxY = Integer.MIN_VALUE; int margin = 50; for (int i = 0; i < getControlPointCount(); i++) { - Point p = getControlPoint(i); - if (p.x < minX) - minX = p.x; - if (p.x > maxX) - maxX = p.x; - if (p.y < minY) - minY = p.y; - if (p.y > maxY) - maxY = p.y; + Point2D p = getControlPoint(i); + if (p.getX() < minX) + minX = p.getX(); + if (p.getX() > maxX) + maxX = p.getX(); + if (p.getY() < minY) + minY = p.getY(); + if (p.getY() > maxY) + maxY = p.getY(); } return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin); diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java index ea703b19..4ee64cce 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java @@ -25,11 +25,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Polygon; import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -66,8 +66,8 @@ public class ICSymbol extends AbstractTransparentComponent { protected ICPointCount icPointCount = ICPointCount._5; protected String value = ""; - protected Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), - new Point(0, 0)}; + protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), + new Point2D.Double(0, 0)}; protected Color bodyColor = BODY_COLOR; protected Color borderColor = BORDER_COLOR; protected Display display = Display.NAME; @@ -126,7 +126,7 @@ public class ICSymbol extends AbstractTransparentComponent { : LABEL_COLOR; } g2d.setColor(finalLabelColor); - int x = (controlPoints[0].x + controlPoints[2].x) / 2; + double x = (controlPoints[0].getX() + controlPoints[2].getX()) / 2; String label = ""; label = display == Display.VALUE ? getValue() : getName(); if (display == Display.NONE) { @@ -135,12 +135,12 @@ public class ICSymbol extends AbstractTransparentComponent { if (display == Display.BOTH) { label = getName() + " " + (getValue() == null ? "" : getValue().toString()); } - StringUtils.drawCenteredText(g2d, label, x, controlPoints[0].y + pinSpacing, HorizontalAlignment.CENTER, + StringUtils.drawCenteredText(g2d, label, x, controlPoints[0].getY() + pinSpacing, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); // Draw +/- markers - StringUtils.drawCenteredText(g2d, getFlip() ? "+" : "-", controlPoints[0].x + pinSpacing, controlPoints[0].y, HorizontalAlignment.CENTER, + StringUtils.drawCenteredText(g2d, getFlip() ? "+" : "-", controlPoints[0].getX() + pinSpacing, controlPoints[0].getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); - StringUtils.drawCenteredText(g2d, getFlip() ? "-" : "+", controlPoints[1].x + pinSpacing, controlPoints[1].y, HorizontalAlignment.CENTER, + StringUtils.drawCenteredText(g2d, getFlip() ? "-" : "+", controlPoints[1].getX() + pinSpacing, controlPoints[1].getY(), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } @@ -165,7 +165,7 @@ public class ICSymbol extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -177,45 +177,38 @@ public class ICSymbol extends AbstractTransparentComponent { private void updateControlPoints() { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); - controlPoints[1].x = x; - controlPoints[1].y = y + pinSpacing * 2; - - controlPoints[2].x = x + pinSpacing * 6; - controlPoints[2].y = y + pinSpacing; - - controlPoints[3].x = x + pinSpacing * 3; - controlPoints[3].y = y - pinSpacing; - - controlPoints[4].x = x + pinSpacing * 3; - controlPoints[4].y = y + pinSpacing * 3; + controlPoints[1].setLocation(x, y + pinSpacing * 2); + controlPoints[2].setLocation(x + pinSpacing * 6, y + pinSpacing); + controlPoints[3].setLocation(x + pinSpacing * 3, y - pinSpacing); + controlPoints[4].setLocation(x + pinSpacing * 3, y + pinSpacing * 3); } public Shape[] getBody() { if (body == null) { body = new Shape[2]; int pinSpacing = (int) PIN_SPACING.convertToPixels(); - int x = controlPoints[0].x; - int y = controlPoints[0].y; + int x = (int) controlPoints[0].getX(); + int y = (int) controlPoints[0].getY(); Shape triangle = new Polygon(new int[] {x + pinSpacing / 2, x + pinSpacing * 11 / 2, x + pinSpacing / 2}, new int[] { y - pinSpacing * 3 / 2, y + pinSpacing, y + pinSpacing * 7 / 2}, 3); body[0] = triangle; GeneralPath polyline = new GeneralPath(); - polyline.moveTo(controlPoints[0].x, controlPoints[0].y); - polyline.lineTo(controlPoints[0].x + pinSpacing / 2, controlPoints[0].y); - polyline.moveTo(controlPoints[1].x, controlPoints[1].y); - polyline.lineTo(controlPoints[1].x + pinSpacing / 2, controlPoints[1].y); - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); - polyline.lineTo(controlPoints[2].x - pinSpacing / 2, controlPoints[2].y); + polyline.moveTo(controlPoints[0].getX(), controlPoints[0].getY()); + polyline.lineTo(controlPoints[0].getX() + pinSpacing / 2, controlPoints[0].getY()); + polyline.moveTo(controlPoints[1].getX(), controlPoints[1].getY()); + polyline.lineTo(controlPoints[1].getX() + pinSpacing / 2, controlPoints[1].getY()); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); + polyline.lineTo(controlPoints[2].getX() - pinSpacing / 2, controlPoints[2].getY()); if (icPointCount == ICPointCount._5) { - polyline.moveTo(controlPoints[3].x, controlPoints[3].y); - polyline.lineTo(controlPoints[3].x, controlPoints[3].y + pinSpacing * 3 / 4); - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing * 3 / 4); + polyline.moveTo(controlPoints[3].getX(), controlPoints[3].getY()); + polyline.lineTo(controlPoints[3].getX(), controlPoints[3].getY() + pinSpacing * 3 / 4); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing * 3 / 4); } body[1] = polyline; } @@ -244,7 +237,7 @@ public class ICSymbol extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java index 2505ddd1..ea5fb60d 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java @@ -21,18 +21,18 @@ */ package org.diylc.components.semiconductors; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Polygon; -import java.awt.Shape; -import java.awt.geom.GeneralPath; +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; -import org.diylc.common.ObjectCache; +import org.diylc.common.ObjectCache; import org.diylc.components.Abstract3LegSymbol; import org.diylc.components.transform.ThreeLegTransformer; -import org.diylc.core.IDIYComponent; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.IDIYComponent; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "JFET", author = "Branislav Stojkovic", category = "Schematic Symbols", @@ -46,9 +46,9 @@ public class JFETSymbol extends Abstract3LegSymbol { public Shape[] getBody() { Shape[] body = new Shape[3]; - Point[] controlPoints = getControlPoints(); - int x = controlPoints[0].x; - int y = controlPoints[0].y; + Point2D[] controlPoints = getControlPoints(); + int x = (int) controlPoints[0].getX(); + int y = (int) controlPoints[0].getY(); int pinSpacing = (int) PIN_SPACING.convertToPixels(); GeneralPath polyline = new GeneralPath(); diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/LogicGateSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/LogicGateSymbol.java index da9213cf..b2fe8578 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/LogicGateSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/LogicGateSymbol.java @@ -21,13 +21,13 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Polygon; import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import java.awt.geom.Path2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -64,7 +64,7 @@ public class LogicGateSymbol extends AbstractTransparentComponent { protected GateType gateType = GateType.Not; protected String value = ""; - protected Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; protected Color bodyColor = BODY_COLOR; protected Color borderColor = BORDER_COLOR; protected Display display = Display.NONE; @@ -124,7 +124,7 @@ public class LogicGateSymbol extends AbstractTransparentComponent { : LABEL_COLOR; } g2d.setColor(finalLabelColor); - int x = (controlPoints[0].x + controlPoints[getControlPointCount() == 2 ? 1 : 2].x) / 2; + int x = (int) ((controlPoints[0].getX() + controlPoints[getControlPointCount() == 2 ? 1 : 2].getX()) / 2); String label = ""; label = display == Display.VALUE ? getValue() : getName(); if (display == Display.NONE) { @@ -133,7 +133,7 @@ public class LogicGateSymbol extends AbstractTransparentComponent { if (display == Display.BOTH) { label = getName() + " " + (getValue() == null ? "" : getValue().toString()); } - StringUtils.drawCenteredText(g2d, label, x, controlPoints[0].y + (getControlPointCount() == 2 ? 0 : pinSpacing), HorizontalAlignment.CENTER, + StringUtils.drawCenteredText(g2d, label, x, controlPoints[0].getY() + (getControlPointCount() == 2 ? 0 : pinSpacing), HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } @@ -155,7 +155,7 @@ public class LogicGateSymbol extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -167,18 +167,14 @@ public class LogicGateSymbol extends AbstractTransparentComponent { private void updateControlPoints() { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. - int x = controlPoints[0].x; - int y = controlPoints[0].y; + int x = (int) controlPoints[0].getX(); + int y = (int) controlPoints[0].getY(); if (getControlPointCount() == 2) { - controlPoints[1].x = x + pinSpacing * 6; - controlPoints[1].y = y; + controlPoints[1].setLocation(x + pinSpacing * 6, y); } else { - controlPoints[1].x = x; - controlPoints[1].y = y + pinSpacing * 2; - - controlPoints[2].x = x + pinSpacing * 6; - controlPoints[2].y = y + pinSpacing; + controlPoints[1].setLocation(x, y + pinSpacing * 2); + controlPoints[2].setLocation(x + pinSpacing * 6, y + pinSpacing); } } @@ -186,8 +182,8 @@ public class LogicGateSymbol extends AbstractTransparentComponent { if (body == null) { body = new Shape[3]; int pinSpacing = (int) PIN_SPACING.convertToPixels(); - int x = controlPoints[0].x; - int y = controlPoints[0].y; + int x = (int) controlPoints[0].getX(); + int y = (int) controlPoints[0].getY(); Area main = null; @@ -224,23 +220,23 @@ public class LogicGateSymbol extends AbstractTransparentComponent { GeneralPath connections = new GeneralPath(); if (getControlPointCount() == 2) { - connections.moveTo(controlPoints[0].x, controlPoints[0].y); - connections.lineTo(controlPoints[0].x + pinSpacing * 3 / 2, controlPoints[0].y); - connections.moveTo(controlPoints[1].x, controlPoints[1].y); + connections.moveTo(controlPoints[0].getX(), controlPoints[0].getY()); + connections.lineTo(controlPoints[0].getX() + pinSpacing * 3 / 2, controlPoints[0].getY()); + connections.moveTo(controlPoints[1].getX(), controlPoints[1].getY()); if (getGateType().getNeedsCircle()) - connections.lineTo(controlPoints[1].x - pinSpacing, controlPoints[1].y); + connections.lineTo(controlPoints[1].getX() - pinSpacing, controlPoints[1].getY()); else - connections.lineTo(controlPoints[1].x - pinSpacing * 3 / 2, controlPoints[1].y); + connections.lineTo(controlPoints[1].getX() - pinSpacing * 3 / 2, controlPoints[1].getY()); } else { - connections.moveTo(controlPoints[0].x, controlPoints[0].y); - connections.lineTo(controlPoints[0].x + pinSpacing * 3 / 2, controlPoints[0].y); - connections.moveTo(controlPoints[1].x, controlPoints[1].y); - connections.lineTo(controlPoints[1].x + pinSpacing * 3 / 2, controlPoints[1].y); - connections.moveTo(controlPoints[2].x, controlPoints[2].y); + connections.moveTo(controlPoints[0].getX(), controlPoints[0].getY()); + connections.lineTo(controlPoints[0].getX() + pinSpacing * 3 / 2, controlPoints[0].getY()); + connections.moveTo(controlPoints[1].getX(), controlPoints[1].getY()); + connections.lineTo(controlPoints[1].getX() + pinSpacing * 3 / 2, controlPoints[1].getY()); + connections.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); if (getGateType().getNeedsCircle()) - connections.lineTo(controlPoints[2].x - pinSpacing, controlPoints[2].y); + connections.lineTo(controlPoints[2].getX() - pinSpacing, controlPoints[2].getY()); else - connections.lineTo(controlPoints[2].x - pinSpacing * 3 / 2, controlPoints[2].y); + connections.lineTo(controlPoints[2].getX() - pinSpacing * 3 / 2, controlPoints[2].getY()); } body[1] = connections; @@ -276,7 +272,7 @@ public class LogicGateSymbol extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java index 84753790..4557ad51 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java @@ -21,18 +21,18 @@ */ package org.diylc.components.semiconductors; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Polygon; -import java.awt.Shape; -import java.awt.geom.GeneralPath; +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; -import org.diylc.common.ObjectCache; +import org.diylc.common.ObjectCache; import org.diylc.components.Abstract3LegSymbol; import org.diylc.components.transform.ThreeLegTransformer; -import org.diylc.core.IDIYComponent; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.IDIYComponent; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "MOSFET", author = "Branislav Stojkovic", category = "Schematic Symbols", @@ -46,9 +46,9 @@ public class MOSFETSymbol extends Abstract3LegSymbol { public Shape[] getBody() { Shape[] body = new Shape[3]; - Point[] controlPoints = getControlPoints(); - int x = controlPoints[0].x; - int y = controlPoints[0].y; + Point2D[] controlPoints = getControlPoints(); + int x = (int) controlPoints[0].getX(); + int y = (int) controlPoints[0].getY(); int pinSpacing = (int) PIN_SPACING.convertToPixels(); GeneralPath polyline = new GeneralPath(); diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java index c669c30a..d7e0a204 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java @@ -26,10 +26,10 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -77,7 +77,7 @@ public class SIL_IC extends AbstractTransparentComponent { private Orientation orientation = Orientation.DEFAULT; private PinCount pinCount = PinCount._8; private Size pinSpacing = new Size(0.1d, SizeUnit.in); - private Point[] controlPoints = new Point[] {new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; protected Display display = Display.NAME; private Color bodyColor = BODY_COLOR; private Color borderColor = BORDER_COLOR; @@ -169,7 +169,7 @@ public class SIL_IC extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -184,14 +184,14 @@ public class SIL_IC extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; - controlPoints = new Point[pinCount.getValue()]; + Point2D firstPoint = controlPoints[0]; + controlPoints = new Point2D.Double[pinCount.getValue()]; controlPoints[0] = firstPoint; double pinSpacing = this.pinSpacing.convertToPixels(); // Update control points. @@ -218,15 +218,15 @@ public class SIL_IC extends AbstractTransparentComponent { default: throw new RuntimeException("Unexpected orientation: " + orientation); } - controlPoints[i] = new Point((int) (firstPoint.x + dx1), (int) (firstPoint.y + dy1)); + controlPoints[i] = new Point2D.Double((int) (firstPoint.getX() + dx1), (int) (firstPoint.getY() + dy1)); } } public Area[] getBody() { if (body == null) { body = new Area[2]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int thickness = getClosestOdd(THICKNESS.convertToPixels()); double width; double height; @@ -293,11 +293,11 @@ public class SIL_IC extends AbstractTransparentComponent { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); if (!outlineMode) { int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); g2d.setColor(PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } } @@ -363,8 +363,8 @@ public class SIL_IC extends AbstractTransparentComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = mainArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + int x = (int) (bounds.getX() + (bounds.width - textWidth) / 2); + int y = (int) (bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent()); g2d.drawString(label, x, y); } @@ -434,21 +434,21 @@ public class SIL_IC extends AbstractTransparentComponent { @Override public Rectangle2D getCachingBounds() { - int minX = Integer.MAX_VALUE; - int maxX = Integer.MIN_VALUE; - int minY = Integer.MAX_VALUE; - int maxY = Integer.MIN_VALUE; + double minX = Integer.MAX_VALUE; + double maxX = Integer.MIN_VALUE; + double minY = Integer.MAX_VALUE; + double maxY = Integer.MIN_VALUE; int margin = 50; for (int i = 0; i < getControlPointCount(); i++) { - Point p = getControlPoint(i); - if (p.x < minX) - minX = p.x; - if (p.x > maxX) - maxX = p.x; - if (p.y < minY) - minY = p.y; - if (p.y > maxY) - maxY = p.y; + Point2D p = getControlPoint(i); + if (p.getX() < minX) + minX = p.getX(); + if (p.getX() > maxX) + maxX = p.getX(); + if (p.getY() < minY) + minY = p.getY(); + if (p.getY() > maxY) + maxY = p.getY(); } return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin); diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java index b37d4f50..015f1065 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java @@ -26,7 +26,6 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; @@ -79,7 +78,7 @@ public class TransistorTO3 extends AbstractTransparentComponent { private String value = ""; private Orientation orientation = Orientation.DEFAULT; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; transient private Area[] body; private Color bodyColor = BODY_COLOR; private Color borderColor = BORDER_COLOR; @@ -119,7 +118,7 @@ public class TransistorTO3 extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -134,7 +133,7 @@ public class TransistorTO3 extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } @@ -142,8 +141,8 @@ public class TransistorTO3 extends AbstractTransparentComponent { private void updateControlPoints() { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); switch (orientation) { case DEFAULT: controlPoints[1].setLocation(x, y + pinSpacing); @@ -166,8 +165,8 @@ public class TransistorTO3 extends AbstractTransparentComponent { if (body == null) { body = new Area[2]; int pinOffset = (int) PIN_OFFSET.convertToPixels(); - int x = (controlPoints[0].x + controlPoints[1].x) / 2; - int y = (controlPoints[0].y + controlPoints[1].y) / 2; + double x = (controlPoints[0].getX() + controlPoints[1].getX()) / 2; + double y = (controlPoints[0].getY() + controlPoints[1].getY()) / 2; switch (orientation) { case DEFAULT: @@ -235,13 +234,13 @@ public class TransistorTO3 extends AbstractTransparentComponent { Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); - for (Point point : controlPoints) { + for (Point2D point : controlPoints) { if (!outlineMode) { g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } Area mainArea = getBody()[0]; @@ -296,8 +295,8 @@ public class TransistorTO3 extends AbstractTransparentComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = mainArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + int x = (int) (bounds.getX() + (bounds.width - textWidth) / 2); + int y = (int) (bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent()); g2d.drawString(label, x, y); } diff --git a/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java b/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java index 9e311bd8..ededc4d9 100644 --- a/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java +++ b/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java @@ -21,14 +21,15 @@ */ package org.diylc.components.shapes; -import java.awt.Color; -import java.awt.Point; +import java.awt.Color; +import java.awt.Point; +import java.awt.geom.Point2D; -import org.diylc.components.AbstractTransparentComponent; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.EditableProperty; +import org.diylc.components.AbstractTransparentComponent; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.PositiveMeasureValidator; -import org.diylc.core.measures.Size; +import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; public abstract class AbstractShape extends AbstractTransparentComponent { @@ -41,10 +42,10 @@ public abstract class AbstractShape extends AbstractTransparentComponent { public static Size DEFAULT_HEIGHT = new Size(0.4d, SizeUnit.in); protected String value = ""; - protected Point[] controlPoints = new Point[] {new Point(0, 0), - new Point((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels())}; - protected Point firstPoint = new Point(); - protected Point secondPoint = new Point(); + protected Point2D[] controlPoints = new Point2D[] {new Point(0, 0), + new Point2D.Double(DEFAULT_WIDTH.convertToPixels(), DEFAULT_HEIGHT.convertToPixels())}; + protected Point2D firstPoint = new Point(); + protected Point2D secondPoint = new Point(); protected Color color = COLOR; protected Color borderColor = BORDER_COLOR; @@ -83,7 +84,7 @@ public abstract class AbstractShape extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -98,12 +99,12 @@ public abstract class AbstractShape extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); - firstPoint.setLocation(Math.min(controlPoints[0].x, controlPoints[1].x), - Math.min(controlPoints[0].y, controlPoints[1].y)); - secondPoint.setLocation(Math.max(controlPoints[0].x, controlPoints[1].x), - Math.max(controlPoints[0].y, controlPoints[1].y)); + firstPoint.setLocation(Math.min(controlPoints[0].getX(), controlPoints[1].getX()), + Math.min(controlPoints[0].getY(), controlPoints[1].getY())); + secondPoint.setLocation(Math.max(controlPoints[0].getX(), controlPoints[1].getX()), + Math.max(controlPoints[0].getY(), controlPoints[1].getY())); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/shapes/Ellipse.java b/diylc/diylc-library/src/org/diylc/components/shapes/Ellipse.java index 1642ee89..ceab11f3 100644 --- a/diylc/diylc-library/src/org/diylc/components/shapes/Ellipse.java +++ b/diylc/diylc-library/src/org/diylc/components/shapes/Ellipse.java @@ -54,7 +54,7 @@ public class Ellipse extends AbstractShape { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } g2d.setColor(color); - g2d.fillOval(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y); + g2d.fillOval((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY())); g2d.setComposite(oldComposite); // Do not track any changes that follow because the whole oval has been @@ -62,7 +62,7 @@ public class Ellipse extends AbstractShape { drawingObserver.stopTracking(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); - g2d.drawOval(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y); + g2d.drawOval((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY())); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/shapes/Polygon.java b/diylc/diylc-library/src/org/diylc/components/shapes/Polygon.java index 4ccf0e1c..9f0d70c3 100644 --- a/diylc/diylc-library/src/org/diylc/components/shapes/Polygon.java +++ b/diylc/diylc-library/src/org/diylc/components/shapes/Polygon.java @@ -21,21 +21,22 @@ */ package org.diylc.components.shapes; -import java.awt.AlphaComposite; -import java.awt.Color; -import java.awt.Composite; -import java.awt.Graphics2D; -import java.awt.Point; -import java.util.Arrays; - -import org.diylc.common.ObjectCache; -import org.diylc.common.SimpleComponentTransformer; -import org.diylc.core.ComponentState; -import org.diylc.core.IDIYComponent; -import org.diylc.core.IDrawingObserver; -import org.diylc.core.Project; -import org.diylc.core.annotations.BomPolicy; -import org.diylc.core.annotations.ComponentDescriptor; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.geom.Point2D; +import java.util.Arrays; + +import org.diylc.common.ObjectCache; +import org.diylc.common.SimpleComponentTransformer; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.annotations.BomPolicy; +import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @ComponentDescriptor(name = "Polygon", author = "Branislav Stojkovic", category = "Shapes", @@ -64,8 +65,8 @@ public class Polygon extends AbstractShape { int[] xPoints = new int[controlPoints.length]; int[] yPoints = new int[controlPoints.length]; for (int i = 0; i < controlPoints.length; i++) { - xPoints[i] = controlPoints[i].x; - yPoints[i] = controlPoints[i].y; + xPoints[i] = (int)controlPoints[i].getX(); + yPoints[i] = (int)controlPoints[i].getY(); } Composite oldComposite = g2d.getComposite(); @@ -100,8 +101,8 @@ public class Polygon extends AbstractShape { this.controlPoints[newPointCount - 1] = this.controlPoints[oldPointCount - 1]; for (int i = oldPointCount - 1; i < newPointCount - 1; i++) { this.controlPoints[i] = - new Point((this.controlPoints[i - 1].x + this.controlPoints[newPointCount - 1].x) / 2, - (this.controlPoints[i - 1].y + this.controlPoints[newPointCount - 1].y) / 2); + new Point2D.Double((this.controlPoints[i - 1].getX() + this.controlPoints[newPointCount - 1].getX()) / 2, + (this.controlPoints[i - 1].getY() + this.controlPoints[newPointCount - 1].getY()) / 2); } } this.pointCount = pointCount; diff --git a/diylc/diylc-library/src/org/diylc/components/shapes/Rectangle.java b/diylc/diylc-library/src/org/diylc/components/shapes/Rectangle.java index dbbbc4e3..80994bee 100644 --- a/diylc/diylc-library/src/org/diylc/components/shapes/Rectangle.java +++ b/diylc/diylc-library/src/org/diylc/components/shapes/Rectangle.java @@ -62,7 +62,7 @@ public class Rectangle extends AbstractShape { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } g2d.setColor(color); - g2d.fillRoundRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y, radius, + g2d.fillRoundRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY()), radius, radius); g2d.setComposite(oldComposite); @@ -71,7 +71,7 @@ public class Rectangle extends AbstractShape { drawingObserver.stopTracking(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); - g2d.drawRoundRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y, radius, + g2d.drawRoundRect((int)firstPoint.getX(), (int)firstPoint.getY(), (int)(secondPoint.getX() - firstPoint.getX()), (int)(secondPoint.getY() - firstPoint.getY()), radius, radius); } diff --git a/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java b/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java index a7bf064d..606266f7 100644 --- a/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java +++ b/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java @@ -26,12 +26,12 @@ import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Polygon; import java.awt.RenderingHints; import java.awt.Shape; import java.awt.Stroke; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.text.DecimalFormat; @@ -111,13 +111,15 @@ public class TapeMeasure extends AbstractLeadedComponent { g2d.setStroke(stroke); g2d.setColor(componentState == ComponentState.SELECTED ? SELECTION_COLOR : color); - Point startPoint = new Point(getControlPoint(0)); - Point endPoint = new Point(getControlPoint(1)); + Point2D first = getControlPoint(0); + Point2D second = getControlPoint(1); + Point2D startPoint = new Point2D.Double(first.getX(), first.getY()); + Point2D endPoint = new Point2D.Double(second.getX(), second.getY()); if (arrowStart) { arrowTx.setToIdentity(); - double angle = Math.atan2(getControlPoint(1).y - getControlPoint(0).y, getControlPoint(1).x - getControlPoint(0).x); - arrowTx.translate(getControlPoint(0).x, getControlPoint(0).y); + double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX()); + arrowTx.translate(getControlPoint(0).getX(), getControlPoint(0).getY()); arrowTx.rotate((angle + Math.PI / 2d)); AffineTransform oldTx = g2d.getTransform(); g2d.transform(arrowTx); @@ -125,13 +127,13 @@ public class TapeMeasure extends AbstractLeadedComponent { g2d.setTransform(oldTx); // make the line slightly shorter so line end doesn't overlap with the arrow - double distance = distance(startPoint, endPoint); + double distance = startPoint.distance(endPoint); interpolate(startPoint, endPoint, getArrowSize().convertToPixels() * 0.9 / distance, startPoint); } if (arrowEnd) { arrowTx.setToIdentity(); - double angle = Math.atan2(getControlPoint(1).y - getControlPoint(0).y, getControlPoint(1).x - getControlPoint(0).x); - arrowTx.translate(getControlPoint(1).x, getControlPoint(1).y); + double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX()); + arrowTx.translate(getControlPoint(1).getX(), getControlPoint(1).getY()); arrowTx.rotate((angle - Math.PI / 2d)); AffineTransform oldTx = g2d.getTransform(); g2d.transform(arrowTx); @@ -139,11 +141,11 @@ public class TapeMeasure extends AbstractLeadedComponent { g2d.setTransform(oldTx); // make the line slightly shorter so line end doesn't overlap with the arrow - double distance = distance(startPoint, endPoint); + double distance = startPoint.distance(endPoint); interpolate(endPoint, startPoint, getArrowSize().convertToPixels() * 0.9 / distance, endPoint); } - double theta = Math.atan2(getPoints()[1].y - getPoints()[0].y, getPoints()[1].x - getPoints()[0].x); + double theta = Math.atan2(getPoints()[1].getY() - getPoints()[0].getY(), getPoints()[1].getX() - getPoints()[0].getX()); String text = getValue(); Font font = Project.DEFAULT_FONT; @@ -157,33 +159,30 @@ public class TapeMeasure extends AbstractLeadedComponent { System.out.println(strWidth + " " + legLength); // draw legs around the enter text - g2d.drawLine(startPoint.x, startPoint.y, - (int)Math.round(startPoint.x + Math.cos(theta) * legLength), - (int)Math.round(startPoint.y + Math.sin(theta) * legLength)); + g2d.drawLine((int)startPoint.getX(), (int)startPoint.getY(), + (int)Math.round(startPoint.getX() + Math.cos(theta) * legLength), + (int)Math.round(startPoint.getY() + Math.sin(theta) * legLength)); - g2d.drawLine(endPoint.x, endPoint.y, - (int)Math.round(endPoint.x - Math.cos(theta) * legLength), - (int)Math.round(endPoint.y - Math.sin(theta) * legLength)); + g2d.drawLine((int)endPoint.getX(), (int)endPoint.getY(), + (int)Math.round(endPoint.getX() - Math.cos(theta) * legLength), + (int)Math.round(endPoint.getY() - Math.sin(theta) * legLength)); // Adjust label angle if needed to make sure that it's readable. if ((theta >= Math.PI / 2 && theta <= Math.PI) || (theta < -Math.PI / 2 && theta > -Math.PI)) { theta += Math.PI; } - g2d.translate((getPoints()[0].x + getPoints()[1].x) / 2, (getPoints()[0].y + getPoints()[1].y) / 2); + g2d.translate((getPoints()[0].getX() + getPoints()[1].getX()) / 2, (getPoints()[0].getY() + getPoints()[1].getY()) / 2); g2d.rotate(theta); g2d.setFont(font); g2d.drawString(text, x, y); } - private void interpolate(Point p1, Point p2, double t, Point p) { - p.setLocation((int)Math.round(p1.x * (1-t) + p2.x * t), (int)Math.round(p1.y * (1-t) + p2.y * t)); + private void interpolate(Point2D p1, Point2D p2, double t, Point2D p) { + p.setLocation((int)Math.round(p1.getX() * (1-t) + p2.getX() * t), (int)Math.round(p1.getY() * (1-t) + p2.getY() * t)); } - - private double distance(Point p1, Point p2) { - return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); - } + @Override public Color getLeadColorForPainting(ComponentState componentState) { @@ -294,8 +293,8 @@ public class TapeMeasure extends AbstractLeadedComponent { @Override public String getValue() { - Point a = getControlPoint(0); - Point b = getControlPoint(1); + Point2D a = getControlPoint(0); + Point2D b = getControlPoint(1); double d = a.distance(b); double convertedD = SizeUnit.px.getFactor() / getUnit().getFactor() * d; String format = "#"; diff --git a/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java b/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java index c7ff1d9c..aface52c 100644 --- a/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java +++ b/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java @@ -21,31 +21,31 @@ */ package org.diylc.components.smd; -import java.awt.AlphaComposite; -import java.awt.Color; -import java.awt.Composite; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.geom.Area; -import java.awt.geom.Rectangle2D; -import java.awt.geom.RoundRectangle2D; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.geom.Area; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; -import org.diylc.appframework.miscutils.ConfigurationManager; -import org.diylc.common.Display; -import org.diylc.common.IPlugInPort; -import org.diylc.common.ObjectCache; -import org.diylc.common.Orientation; -import org.diylc.components.AbstractTransparentComponent; -import org.diylc.core.ComponentState; -import org.diylc.core.IDrawingObserver; -import org.diylc.core.Project; -import org.diylc.core.Theme; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.EditableProperty; -import org.diylc.core.measures.Size; -import org.diylc.core.measures.SizeUnit; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.Display; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +import org.diylc.components.AbstractTransparentComponent; +import org.diylc.core.ComponentState; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.Theme; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; public abstract class PassiveSMDComponent extends AbstractTransparentComponent { @@ -62,7 +62,7 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen private Orientation orientation = Orientation.DEFAULT; private SMDSize size = SMDSize._1206; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; protected Display display = Display.NAME; protected Color bodyColor; protected Color borderColor; @@ -116,7 +116,7 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -131,21 +131,21 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } private void updateControlPoints() { - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; controlPoints[0] = firstPoint; - int pinSize = (int) PIN_SIZE.convertToPixels(); - int smdLength = (int) getSize().getLength().convertToPixels(); - int pinSpacing = smdLength - pinSize; + double pinSize = PIN_SIZE.convertToPixels(); + double smdLength = getSize().getLength().convertToPixels(); + double pinSpacing = smdLength - pinSize; // Update control points. - int dx1; - int dy1; + double dx1; + double dy1; switch (orientation) { case DEFAULT: dx1 = 0; @@ -166,45 +166,45 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen default: throw new RuntimeException("Unexpected orientation: " + orientation); } - controlPoints[1] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); + controlPoints[1] = new Point2D.Double(firstPoint.getX() + dx1, firstPoint.getY() + dy1); } public Area[] getBody() { if (body == null) { body = new Area[2]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; - int smdWidth = (int) getSize().getWidth().convertToPixels(); - int smdLength = (int) getSize().getLength().convertToPixels(); - int pinSize = (int) PIN_SIZE.convertToPixels(); - int width; - int height; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); + double smdWidth = getSize().getWidth().convertToPixels(); + double smdLength = getSize().getLength().convertToPixels(); + double pinSize = PIN_SIZE.convertToPixels(); + double width; + double height; // create main body switch (orientation) { case DEFAULT: width = smdWidth; height = smdLength; - x = controlPoints[0].x - smdWidth / 2; - y = controlPoints[0].y - pinSize / 2; + x = controlPoints[0].getX() - smdWidth / 2; + y = controlPoints[0].getY() - pinSize / 2; break; case _90: width = smdLength; height = smdWidth; - x = controlPoints[1].x - pinSize / 2; - y = controlPoints[1].y - smdWidth / 2; + x = controlPoints[1].getX() - pinSize / 2; + y = controlPoints[1].getY() - smdWidth / 2; break; case _180: width = smdWidth; height = smdLength; - x = controlPoints[1].x - smdWidth / 2; - y = controlPoints[1].y - pinSize / 2; + x = controlPoints[1].getX() - smdWidth / 2; + y = controlPoints[1].getY() - pinSize / 2; break; case _270: width = smdLength; height = smdWidth; - x = controlPoints[0].x - pinSize / 2; - y = controlPoints[0].y - smdWidth / 2; + x = controlPoints[0].getX() - pinSize / 2; + y = controlPoints[0].getY() - smdWidth / 2; break; default: throw new RuntimeException("Unexpected orientation: " + orientation); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/BatterySnapTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/BatterySnapTransformer.java index d336f37f..4147504d 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/BatterySnapTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/BatterySnapTransformer.java @@ -21,12 +21,13 @@ */ 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.electromechanical.BatterySnap9V; +import java.awt.Point; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.electromechanical.BatterySnap9V; import org.diylc.core.IDIYComponent; public class BatterySnapTransformer implements IComponentTransformer { @@ -47,11 +48,11 @@ public class BatterySnapTransformer implements IComponentTransformer { } @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); + 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); } @@ -68,12 +69,12 @@ public class BatterySnapTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { BatterySnap9V snap = (BatterySnap9V) component; if (direction == IComponentTransformer.HORIZONTAL) { - int dx = 2 * (center.x - snap.getControlPoint(0).x); - int dy = 0; + double dx = 2 * (center.getX() - snap.getControlPoint(0).getX()); + double dy = 0; Orientation o = snap.getOrientation(); switch (o) { case DEFAULT: @@ -90,13 +91,13 @@ public class BatterySnapTransformer implements IComponentTransformer { for (int i = 0; i < snap.getControlPointCount(); i++) { Point p = snap.getControlPoint(i); - snap.setControlPoint(new Point(p.x + dx, p.y + dy), i); + snap.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } snap.setOrientation(o); } else { - int dx = 0; - int dy = 2 * (center.y - snap.getControlPoint(1).y); + double dx = 0; + double dy = 2 * (center.getY() - snap.getControlPoint(1).getY()); Orientation o = snap.getOrientation(); switch (o) { case DEFAULT: @@ -113,7 +114,7 @@ public class BatterySnapTransformer implements IComponentTransformer { for (int i = 0; i < snap.getControlPointCount(); i++) { Point p = snap.getControlPoint(i); - snap.setControlPoint(new Point(p.x + dx, p.y + dy), i); + snap.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } snap.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/CliffJackTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/CliffJackTransformer.java index 19a26a0b..d9cae1ed 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/CliffJackTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/CliffJackTransformer.java @@ -21,12 +21,12 @@ */ 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.electromechanical.CliffJack1_4; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.electromechanical.CliffJack1_4; import org.diylc.core.IDIYComponent; public class CliffJackTransformer implements IComponentTransformer { @@ -47,11 +47,11 @@ public class CliffJackTransformer implements IComponentTransformer { } @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); + 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); } @@ -68,64 +68,64 @@ public class CliffJackTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { CliffJack1_4 ic = (CliffJack1_4) component; if (direction == IComponentTransformer.HORIZONTAL) { - int dx = 2 * (center.x - ic.getControlPoint(1).x); - int dy = 0; + double dx = 2 * (center.getX() - ic.getControlPoint(1).getX()); + double dy = 0; Orientation o = ic.getOrientation(); switch (o) { case DEFAULT: - dy += (ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y); + dy += (ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY()); o = Orientation._180; break; case _90: - // dy += ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + // dy += ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); break; case _180: - dy += (ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y); + dy += (ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY()); o = Orientation.DEFAULT; break; case _270: - // dy += ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + // dy += ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); break; } for (int i = 0; i < ic.getControlPointCount(); i++) { - Point p = ic.getControlPoint(i); - ic.setControlPoint(new Point(p.x + dx, p.y + dy), i); + Point2D p = ic.getControlPoint(i); + ic.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } ic.setOrientation(o); } else { - int dx = 0; - int dy = 2 * (center.y - ic.getControlPoint(1).y); + double dx = 0; + double dy = 2 * (center.getY() - ic.getControlPoint(1).getY()); Orientation o = ic.getOrientation(); switch (o) { case DEFAULT: - // dx += ic.getControlPoint(0).x - ic.getControlPoint(ic.getControlPointCount() - 1).x; + // dx += ic.getControlPoint(0).getX() - ic.getControlPoint(ic.getControlPointCount() - 1).getX(); break; case _90: o = Orientation._270; - // dx -= 2 * (ic.getControlPoint(0).x - ic.getControlPoint(1).x); - // dy -= ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + // dx -= 2 * (ic.getControlPoint(0).getX() - ic.getControlPoint(1).getX()); + // dy -= ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); break; case _180: - // dx += ic.getControlPoint(0).x - ic.getControlPoint(ic.getControlPointCount() - 1).x; + // dx += ic.getControlPoint(0).getX() - ic.getControlPoint(ic.getControlPointCount() - 1).getX(); break; case _270: - // dx -= 2 * (ic.getControlPoint(0).x - ic.getControlPoint(1).x); - // dy -= ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + // dx -= 2 * (ic.getControlPoint(0).getX() - ic.getControlPoint(1).getX()); + // dy -= ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); o = Orientation._90; break; } for (int i = 0; i < ic.getControlPointCount(); i++) { - Point p = ic.getControlPoint(i); - ic.setControlPoint(new Point(p.x + dx, p.y + dy), i); + Point2D p = ic.getControlPoint(i); + ic.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } ic.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/ClosedJackTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/ClosedJackTransformer.java index fe7a1152..01cac973 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/ClosedJackTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/ClosedJackTransformer.java @@ -21,12 +21,12 @@ */ 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.electromechanical.ClosedJack1_4; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.electromechanical.ClosedJack1_4; import org.diylc.core.IDIYComponent; public class ClosedJackTransformer implements IComponentTransformer { @@ -47,11 +47,11 @@ public class ClosedJackTransformer implements IComponentTransformer { } @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); + 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); } @@ -68,12 +68,12 @@ public class ClosedJackTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { ClosedJack1_4 jack = (ClosedJack1_4) component; if (direction == IComponentTransformer.HORIZONTAL) { - int dx = 2 * (center.x - jack.getControlPoint(0).x); - int dy = 0; + double dx = 2 * (center.getX() - jack.getControlPoint(0).getX()); + double dy = 0; Orientation o = jack.getOrientation(); switch (o) { @@ -90,14 +90,14 @@ public class ClosedJackTransformer implements IComponentTransformer { } for (int i = 0; i < jack.getControlPointCount(); i++) { - Point p = jack.getControlPoint(i); - jack.setControlPoint(new Point(p.x + dx, p.y + dy), i); + Point2D p = jack.getControlPoint(i); + jack.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } jack.setOrientation(o); } else { - int dx = 0; - int dy = 2 * (center.y - jack.getControlPoint(0).y); + double dx = 0; + double dy = 2 * (center.getY() - jack.getControlPoint(0).getY()); Orientation o = jack.getOrientation(); switch (o) { @@ -114,8 +114,8 @@ public class ClosedJackTransformer implements IComponentTransformer { } for (int i = 0; i < jack.getControlPointCount(); i++) { - Point p = jack.getControlPoint(i); - jack.setControlPoint(new Point(p.x + dx, p.y + dy), i); + Point2D p = jack.getControlPoint(i); + jack.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } jack.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/DIL_ICTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/DIL_ICTransformer.java index 821116eb..dd963f36 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/DIL_ICTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/DIL_ICTransformer.java @@ -21,12 +21,12 @@ */ 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.semiconductors.DIL_IC; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.semiconductors.DIL_IC; import org.diylc.core.IDIYComponent; public class DIL_ICTransformer implements IComponentTransformer { @@ -47,11 +47,11 @@ public class DIL_ICTransformer implements IComponentTransformer { } @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); + 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); } @@ -68,64 +68,64 @@ public class DIL_ICTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { DIL_IC ic = (DIL_IC) component; if (direction == IComponentTransformer.HORIZONTAL) { - int dx = 2 * (center.x - ic.getControlPoint(1).x); - int dy = 0; + double dx = 2 * (center.getX() - ic.getControlPoint(1).getX()); + double dy = 0; Orientation o = ic.getOrientation(); switch (o) { case DEFAULT: - dx += ic.getControlPoint(0).x - ic.getControlPoint(ic.getControlPointCount() - 1).x; + dx += ic.getControlPoint(0).getX() - ic.getControlPoint(ic.getControlPointCount() - 1).getX(); break; case _90: o = Orientation._270; - dx -= 2 * (ic.getControlPoint(0).x - ic.getControlPoint(1).x); - dy -= ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + dx -= 2 * (ic.getControlPoint(0).getX() - ic.getControlPoint(1).getX()); + dy -= ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); break; case _180: - dx += ic.getControlPoint(0).x - ic.getControlPoint(ic.getControlPointCount() - 1).x; + dx += ic.getControlPoint(0).getX() - ic.getControlPoint(ic.getControlPointCount() - 1).getX(); break; case _270: - dx -= 2 * (ic.getControlPoint(0).x - ic.getControlPoint(1).x); - dy -= ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + dx -= 2 * (ic.getControlPoint(0).getX() - ic.getControlPoint(1).getX()); + dy -= ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); o = Orientation._90; break; } for (int i = 0; i < ic.getControlPointCount(); i++) { - Point p = ic.getControlPoint(i); - ic.setControlPoint(new Point(p.x + dx, p.y + dy), i); + Point2D p = ic.getControlPoint(i); + ic.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } ic.setOrientation(o); } else { - int dx = 0; - int dy = 2 * (center.y - ic.getControlPoint(1).y); + double dx = 0; + double dy = 2 * (center.getY() - ic.getControlPoint(1).getY()); Orientation o = ic.getOrientation(); switch (o) { case DEFAULT: - dx -= ic.getControlPoint(0).x - ic.getControlPoint(ic.getControlPointCount() - 1).x; - dy -= 2 * (ic.getControlPoint(0).y - ic.getControlPoint(1).y); + dx -= ic.getControlPoint(0).getX() - ic.getControlPoint(ic.getControlPointCount() - 1).getX(); + dy -= 2 * (ic.getControlPoint(0).getY() - ic.getControlPoint(1).getY()); o = Orientation._180; break; case _90: - dy += ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + dy += ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); break; case _180: - dx -= ic.getControlPoint(0).x - ic.getControlPoint(ic.getControlPointCount() - 1).x; - dy -= 2 * (ic.getControlPoint(0).y - ic.getControlPoint(1).y); + dx -= ic.getControlPoint(0).getX() - ic.getControlPoint(ic.getControlPointCount() - 1).getX(); + dy -= 2 * (ic.getControlPoint(0).getY() - ic.getControlPoint(1).getY()); o = Orientation.DEFAULT; break; case _270: - dy += ic.getControlPoint(0).y - ic.getControlPoint(ic.getControlPointCount() - 1).y; + dy += ic.getControlPoint(0).getY() - ic.getControlPoint(ic.getControlPointCount() - 1).getY(); break; } for (int i = 0; i < ic.getControlPointCount(); i++) { - Point p = ic.getControlPoint(i); - ic.setControlPoint(new Point(p.x + dx, p.y + dy), i); + Point2D p = ic.getControlPoint(i); + ic.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } ic.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/PotentiometerTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/PotentiometerTransformer.java index 2b12c759..914ddcf5 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/PotentiometerTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/PotentiometerTransformer.java @@ -21,12 +21,12 @@ */ 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.PotentiometerPanel; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.passive.PotentiometerPanel; import org.diylc.core.IDIYComponent; public class PotentiometerTransformer implements IComponentTransformer { @@ -47,11 +47,11 @@ public class PotentiometerTransformer implements IComponentTransformer { } @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); + 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); } @@ -69,10 +69,10 @@ public class PotentiometerTransformer implements IComponentTransformer { @SuppressWarnings("incomplete-switch") @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { PotentiometerPanel potentiometer = (PotentiometerPanel) component; - int dx = center.x - potentiometer.getControlPoint(1).x; - int dy = center.y - potentiometer.getControlPoint(1).y; + double dx = center.getX() - potentiometer.getControlPoint(1).getX(); + double dy = center.getY() - potentiometer.getControlPoint(1).getY(); if (direction == IComponentTransformer.HORIZONTAL) { Orientation o = potentiometer.getOrientation(); switch (o) { @@ -84,10 +84,10 @@ public class PotentiometerTransformer implements IComponentTransformer { } for (int i = 0; i < potentiometer.getControlPointCount(); i++) { - Point p = potentiometer.getControlPoint(i); + Point2D p = potentiometer.getControlPoint(i); potentiometer .setControlPoint( - new Point(p.x + 2 * dx, p.y + (potentiometer.getControlPoint(2).y - potentiometer.getControlPoint(0).y)), + new Point2D.Double(p.getX() + 2 * dx, p.getY() + (potentiometer.getControlPoint(2).getY() - potentiometer.getControlPoint(0).getY())), i); } @@ -103,10 +103,10 @@ public class PotentiometerTransformer implements IComponentTransformer { } for (int i = 0; i < potentiometer.getControlPointCount(); i++) { - Point p = potentiometer.getControlPoint(i); + Point2D p = potentiometer.getControlPoint(i); potentiometer - .setControlPoint(new Point(p.x + (potentiometer.getControlPoint(2).x - potentiometer.getControlPoint(0).x), - p.y + 2 * dy), i); + .setControlPoint(new Point2D.Double(p.getX() + (potentiometer.getControlPoint(2).getX() - potentiometer.getControlPoint(0).getX()), + p.getY() + 2 * dy), i); } potentiometer.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/SIL_ICTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/SIL_ICTransformer.java index 4028da92..4298b252 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/SIL_ICTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/SIL_ICTransformer.java @@ -21,12 +21,12 @@ */ 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.semiconductors.SIL_IC; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.semiconductors.SIL_IC; import org.diylc.core.IDIYComponent; public class SIL_ICTransformer implements IComponentTransformer { @@ -47,11 +47,11 @@ public class SIL_ICTransformer implements IComponentTransformer { } @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); + 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); } @@ -69,10 +69,10 @@ public class SIL_ICTransformer implements IComponentTransformer { @SuppressWarnings("incomplete-switch") @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { SIL_IC ic = (SIL_IC) component; - int dx = center.x - ic.getControlPoint(0).x; - int dy = center.y - ic.getControlPoint(0).y; + double dx = center.getX() - ic.getControlPoint(0).getX(); + double dy = center.getY() - ic.getControlPoint(0).getY(); if (direction == IComponentTransformer.HORIZONTAL) { Orientation o = ic.getOrientation(); switch (o) { @@ -84,8 +84,8 @@ public class SIL_ICTransformer implements IComponentTransformer { } for (int i = 0; i < ic.getControlPointCount(); i++) { - Point p = ic.getControlPoint(i); - ic.setControlPoint(new Point(p.x + 2 * dx, p.y), i); + Point2D p = ic.getControlPoint(i); + ic.setControlPoint(new Point2D.Double(p.getX() + 2 * dx, p.getY()), i); } ic.setOrientation(o); @@ -100,8 +100,8 @@ public class SIL_ICTransformer implements IComponentTransformer { } for (int i = 0; i < ic.getControlPointCount(); i++) { - Point p = ic.getControlPoint(i); - ic.setControlPoint(new Point(p.x, p.y + 2 * dy), i); + Point2D p = ic.getControlPoint(i); + ic.setControlPoint(new Point2D.Double(p.getX(), p.getY() + 2 * dy), i); } ic.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/TO1Transformer.java b/diylc/diylc-library/src/org/diylc/components/transform/TO1Transformer.java index f46abb98..013b93dd 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/TO1Transformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/TO1Transformer.java @@ -21,12 +21,13 @@ */ 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.semiconductors.TransistorTO1; +import java.awt.Point; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.semiconductors.TransistorTO1; import org.diylc.core.IDIYComponent; public class TO1Transformer implements IComponentTransformer { @@ -47,11 +48,11 @@ public class TO1Transformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + 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++) { - Point p = new Point(component.getControlPoint(index)); - rotate.transform(p, p); + Point2D p = new Point2D.Double(); + rotate.transform(component.getControlPoint(index), p); component.setControlPoint(p, index); } @@ -68,10 +69,10 @@ public class TO1Transformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { TransistorTO1 transistor = (TransistorTO1) component; - int dx = center.x - transistor.getControlPoint(0).x; - int dy = center.y - transistor.getControlPoint(0).y; + double dx = center.getX() - transistor.getControlPoint(0).getX(); + double dy = center.getY() - transistor.getControlPoint(0).getY(); if (direction == IComponentTransformer.HORIZONTAL) { Orientation o = transistor.getOrientation(); switch (o) { @@ -79,20 +80,20 @@ public class TO1Transformer implements IComponentTransformer { o = Orientation._180; break; case _90: - dx -= (transistor.getControlPoint(1).x - transistor.getControlPoint(0).x); + dx -= (transistor.getControlPoint(1).getX() - transistor.getControlPoint(0).getX()); break; case _180: o = Orientation.DEFAULT; break; case _270: - dx -= (transistor.getControlPoint(1).x - transistor.getControlPoint(0).x); + dx -= (transistor.getControlPoint(1).getX() - transistor.getControlPoint(0).getX()); break; } for (int i = 0; i < transistor.getControlPointCount(); i++) { Point p = transistor.getControlPoint(i); transistor.setControlPoint( - new Point(p.x + 2 * dx, p.y + (transistor.getControlPoint(2).y - transistor.getControlPoint(0).y)), i); + new Point2D.Double(p.getX() + 2 * dx, p.getY() + (transistor.getControlPoint(2).getY() - transistor.getControlPoint(0).getY())), i); } transistor.setOrientation(o); @@ -100,13 +101,13 @@ public class TO1Transformer implements IComponentTransformer { Orientation o = transistor.getOrientation(); switch (o) { case DEFAULT: - dy -= (transistor.getControlPoint(1).y - transistor.getControlPoint(0).y); + dy -= (transistor.getControlPoint(1).getY() - transistor.getControlPoint(0).getY()); break; case _90: o = Orientation._270; break; case _180: - dy -= (transistor.getControlPoint(1).y - transistor.getControlPoint(0).y); + dy -= (transistor.getControlPoint(1).getY() - transistor.getControlPoint(0).getY()); break; case _270: o = Orientation._90; @@ -115,8 +116,8 @@ public class TO1Transformer implements IComponentTransformer { for (int i = 0; i < transistor.getControlPointCount(); i++) { Point p = transistor.getControlPoint(i); - transistor.setControlPoint(new Point(p.x + (transistor.getControlPoint(2).x - transistor.getControlPoint(0).x), - p.y + 2 * dy), i); + transistor.setControlPoint(new Point2D.Double(p.getX() + (transistor.getControlPoint(2).getX() - transistor.getControlPoint(0).getX()), + p.getY() + 2 * dy), i); } transistor.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/TO220Transformer.java b/diylc/diylc-library/src/org/diylc/components/transform/TO220Transformer.java index 82a0082d..166d02a4 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/TO220Transformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/TO220Transformer.java @@ -21,12 +21,13 @@ */ 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.semiconductors.TransistorTO220; +import java.awt.Point; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.semiconductors.TransistorTO220; import org.diylc.core.IDIYComponent; public class TO220Transformer implements IComponentTransformer { @@ -47,11 +48,11 @@ public class TO220Transformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + 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++) { - Point p = new Point(component.getControlPoint(index)); - rotate.transform(p, p); + Point2D p = new Point2D.Double(); + rotate.transform(component.getControlPoint(index), p); component.setControlPoint(p, index); } @@ -68,59 +69,59 @@ public class TO220Transformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { TransistorTO220 transistor = (TransistorTO220) component; if (direction == IComponentTransformer.HORIZONTAL) { - int dx = 2 * (center.x - transistor.getControlPoint(0).x); - int dy = 0; + double dx = 2 * (center.getX() - transistor.getControlPoint(0).getX()); + double dy = 0; Orientation o = transistor.getOrientation(); switch (o) { case DEFAULT: o = Orientation._180; - dy -= (transistor.getControlPoint(0).y - transistor.getControlPoint(2).y); + dy -= (transistor.getControlPoint(0).getY() - transistor.getControlPoint(2).getY()); break; case _90: - dx += (transistor.getControlPoint(0).x - transistor.getControlPoint(2).x); + dx += (transistor.getControlPoint(0).getX() - transistor.getControlPoint(2).getX()); break; case _180: o = Orientation.DEFAULT; - dy -= (transistor.getControlPoint(0).y - transistor.getControlPoint(2).y); + dy -= (transistor.getControlPoint(0).getY() - transistor.getControlPoint(2).getY()); break; case _270: - dx += (transistor.getControlPoint(0).x - transistor.getControlPoint(2).x); + dx += (transistor.getControlPoint(0).getX() - transistor.getControlPoint(2).getX()); break; } for (int i = 0; i < transistor.getControlPointCount(); i++) { Point p = transistor.getControlPoint(i); - transistor.setControlPoint(new Point(p.x + dx, p.y + dy), i); + transistor.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } transistor.setOrientation(o); } else { - int dx = 0; - int dy = 2 * (center.y - transistor.getControlPoint(0).y); + double dx = 0; + double dy = 2 * (center.getY() - transistor.getControlPoint(0).getY()); Orientation o = transistor.getOrientation(); switch (o) { case DEFAULT: - dy += (transistor.getControlPoint(0).y - transistor.getControlPoint(2).y); + dy += (transistor.getControlPoint(0).getY() - transistor.getControlPoint(2).getY()); break; case _90: - dx -= (transistor.getControlPoint(0).x - transistor.getControlPoint(2).x); + dx -= (transistor.getControlPoint(0).getX() - transistor.getControlPoint(2).getX()); o = Orientation._270; break; case _180: - dy += (transistor.getControlPoint(0).y - transistor.getControlPoint(2).y); + dy += (transistor.getControlPoint(0).getY() - transistor.getControlPoint(2).getY()); break; case _270: - dx -= (transistor.getControlPoint(0).x - transistor.getControlPoint(2).x); + dx -= (transistor.getControlPoint(0).getX() - transistor.getControlPoint(2).getX()); o = Orientation._90; break; } for (int i = 0; i < transistor.getControlPointCount(); i++) { Point p = transistor.getControlPoint(i); - transistor.setControlPoint(new Point(p.x + dx, p.y + dy), i); + transistor.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } transistor.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/TO92Transformer.java b/diylc/diylc-library/src/org/diylc/components/transform/TO92Transformer.java index a472370f..fdec1555 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/TO92Transformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/TO92Transformer.java @@ -21,12 +21,13 @@ */ 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.semiconductors.TransistorTO92; +import java.awt.Point; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.semiconductors.TransistorTO92; import org.diylc.core.IDIYComponent; public class TO92Transformer implements IComponentTransformer { @@ -47,11 +48,11 @@ public class TO92Transformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + 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++) { - Point p = new Point(component.getControlPoint(index)); - rotate.transform(p, p); + Point2D p = new Point2D.Double(); + rotate.transform(component.getControlPoint(index), p); component.setControlPoint(p, index); } @@ -69,10 +70,10 @@ public class TO92Transformer implements IComponentTransformer { @SuppressWarnings("incomplete-switch") @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { TransistorTO92 transistor = (TransistorTO92) component; - int dx = center.x - transistor.getControlPoint(1).x; - int dy = center.y - transistor.getControlPoint(1).y; + double dx = center.getX() - transistor.getControlPoint(1).getX(); + double dy = center.getY() - transistor.getControlPoint(1).getY(); if (direction == IComponentTransformer.HORIZONTAL) { Orientation o = transistor.getOrientation(); switch (o) { @@ -86,7 +87,7 @@ public class TO92Transformer implements IComponentTransformer { for (int i = 0; i < transistor.getControlPointCount(); i++) { Point p = transistor.getControlPoint(i); transistor.setControlPoint( - new Point(p.x + 2 * dx, p.y + (transistor.getControlPoint(2).y - transistor.getControlPoint(0).y)), i); + new Point2D.Double(p.getX() + 2 * dx, p.getY() + (transistor.getControlPoint(2).getY() - transistor.getControlPoint(0).getY())), i); } transistor.setOrientation(o); @@ -102,8 +103,8 @@ public class TO92Transformer implements IComponentTransformer { for (int i = 0; i < transistor.getControlPointCount(); i++) { Point p = transistor.getControlPoint(i); - transistor.setControlPoint(new Point(p.x + (transistor.getControlPoint(2).x - transistor.getControlPoint(0).x), - p.y + 2 * dy), i); + transistor.setControlPoint(new Point2D.Double(p.getX() + (transistor.getControlPoint(2).getX() - transistor.getControlPoint(0).getX()), + p.getY() + 2 * dy), i); } transistor.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/TerminalStripTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/TerminalStripTransformer.java index 8f6a0565..261e82fe 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/TerminalStripTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/TerminalStripTransformer.java @@ -21,12 +21,13 @@ */ 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.boards.TerminalStrip; +import java.awt.Point; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.boards.TerminalStrip; import org.diylc.core.IDIYComponent; public class TerminalStripTransformer implements IComponentTransformer { @@ -47,11 +48,11 @@ public class TerminalStripTransformer implements IComponentTransformer { } @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); + 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); } @@ -68,64 +69,64 @@ public class TerminalStripTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { TerminalStrip strip = (TerminalStrip) component; if (direction == IComponentTransformer.HORIZONTAL) { - int dx = 2 * (center.x - strip.getControlPoint(1).x); - int dy = 0; + double dx = 2 * (center.getX() - strip.getControlPoint(1).getX()); + double dy = 0; Orientation o = strip.getOrientation(); switch (o) { case DEFAULT: - dx += strip.getControlPoint(0).x - strip.getControlPoint(strip.getControlPointCount() - 1).x; + dx += strip.getControlPoint(0).getX() - strip.getControlPoint(strip.getControlPointCount() - 1).getX(); break; case _90: o = Orientation._270; - dx -= 2 * (strip.getControlPoint(0).x - strip.getControlPoint(1).x); - dy -= strip.getControlPoint(0).y - strip.getControlPoint(strip.getControlPointCount() - 1).y; + dx -= 2 * (strip.getControlPoint(0).getX() - strip.getControlPoint(1).getX()); + dy -= strip.getControlPoint(0).getY() - strip.getControlPoint(strip.getControlPointCount() - 1).getY(); break; case _180: - dx += strip.getControlPoint(0).x - strip.getControlPoint(strip.getControlPointCount() - 1).x; + dx += strip.getControlPoint(0).getX() - strip.getControlPoint(strip.getControlPointCount() - 1).getX(); break; case _270: - dx -= 2 * (strip.getControlPoint(0).x - strip.getControlPoint(1).x); - dy -= strip.getControlPoint(0).y - strip.getControlPoint(strip.getControlPointCount() - 1).y; + dx -= 2 * (strip.getControlPoint(0).getX() - strip.getControlPoint(1).getX()); + dy -= strip.getControlPoint(0).getY() - strip.getControlPoint(strip.getControlPointCount() - 1).getY(); o = Orientation._90; break; } for (int i = 0; i < strip.getControlPointCount(); i++) { Point p = strip.getControlPoint(i); - strip.setControlPoint(new Point(p.x + dx, p.y + dy), i); + strip.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } strip.setOrientation(o); } else { - int dx = 0; - int dy = 2 * (center.y - strip.getControlPoint(1).y); + double dx = 0; + double dy = 2 * (center.getY() - strip.getControlPoint(1).getY()); Orientation o = strip.getOrientation(); switch (o) { case DEFAULT: - dx -= strip.getControlPoint(0).x - strip.getControlPoint(strip.getControlPointCount() - 1).x; - dy -= 2 * (strip.getControlPoint(0).y - strip.getControlPoint(1).y); + dx -= strip.getControlPoint(0).getX() - strip.getControlPoint(strip.getControlPointCount() - 1).getX(); + dy -= 2 * (strip.getControlPoint(0).getY() - strip.getControlPoint(1).getY()); o = Orientation._180; break; case _90: - dy += strip.getControlPoint(0).y - strip.getControlPoint(strip.getControlPointCount() - 1).y; + dy += strip.getControlPoint(0).getY() - strip.getControlPoint(strip.getControlPointCount() - 1).getY(); break; case _180: - dx -= strip.getControlPoint(0).x - strip.getControlPoint(strip.getControlPointCount() - 1).x; - dy -= 2 * (strip.getControlPoint(0).y - strip.getControlPoint(1).y); + dx -= strip.getControlPoint(0).getX() - strip.getControlPoint(strip.getControlPointCount() - 1).getX(); + dy -= 2 * (strip.getControlPoint(0).getY() - strip.getControlPoint(1).getY()); o = Orientation.DEFAULT; break; case _270: - dy += strip.getControlPoint(0).y - strip.getControlPoint(strip.getControlPointCount() - 1).y; + dy += strip.getControlPoint(0).getY() - strip.getControlPoint(strip.getControlPointCount() - 1).getY(); break; } for (int i = 0; i < strip.getControlPointCount(); i++) { Point p = strip.getControlPoint(i); - strip.setControlPoint(new Point(p.x + dx, p.y + dy), i); + strip.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); } strip.setOrientation(o); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/TextTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/TextTransformer.java index 812325e1..cb7c594f 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/TextTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/TextTransformer.java @@ -17,8 +17,8 @@ */ package org.diylc.components.transform; -import java.awt.Point; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import org.diylc.common.IComponentTransformer; import org.diylc.common.Orientation; @@ -44,11 +44,11 @@ public class TextTransformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + 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++) { - Point p = new Point(component.getControlPoint(index)); - rotate.transform(p, p); + Point2D p = new Point2D.Double(); + rotate.transform(component.getControlPoint(index), p); component.setControlPoint(p, index); } @@ -78,7 +78,7 @@ public class TextTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { throw new RuntimeException("Unexpected call to mirror() in LabelTransformer"); } } diff --git a/diylc/diylc-library/src/org/diylc/components/transform/ThreeLegTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/ThreeLegTransformer.java index 144be827..57c2a046 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/ThreeLegTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/ThreeLegTransformer.java @@ -21,8 +21,8 @@ */ package org.diylc.components.transform; -import java.awt.Point; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import org.diylc.common.IComponentTransformer; import org.diylc.common.Orientation; @@ -48,11 +48,11 @@ public class ThreeLegTransformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + 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++) { - Point p = new Point(component.getControlPoint(index)); - rotate.transform(p, p); + Point2D p = new Point2D.Double(); + rotate.transform(component.getControlPoint(index), p); component.setControlPoint(p, index); } @@ -69,7 +69,7 @@ public class ThreeLegTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { Abstract3LegSymbol a3l = (Abstract3LegSymbol) component; Orientation o = a3l.getOrientation(); diff --git a/diylc/diylc-library/src/org/diylc/components/transform/TubeSymbolTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/TubeSymbolTransformer.java index 76df2237..59b2daab 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/TubeSymbolTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/TubeSymbolTransformer.java @@ -21,13 +21,13 @@ */ package org.diylc.components.transform; -import java.awt.Point; -import java.awt.geom.AffineTransform; - -import org.diylc.common.IComponentTransformer; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; import org.diylc.common.Orientation; import org.diylc.components.semiconductors.SymbolFlipping; -import org.diylc.components.tube.AbstractTubeSymbol; +import org.diylc.components.tube.AbstractTubeSymbol; import org.diylc.core.IDIYComponent; public class TubeSymbolTransformer implements IComponentTransformer { @@ -48,11 +48,11 @@ public class TubeSymbolTransformer implements IComponentTransformer { } @Override - public void rotate(IDIYComponent component, Point center, int direction) { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + 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++) { - Point p = new Point(component.getControlPoint(index)); - rotate.transform(p, p); + Point2D p = new Point2D.Double(); + rotate.transform(component.getControlPoint(index), p); component.setControlPoint(p, index); } @@ -69,7 +69,7 @@ public class TubeSymbolTransformer implements IComponentTransformer { } @Override - public void mirror(IDIYComponent component, Point center, int direction) { + public void mirror(IDIYComponent component, Point2D center, int direction) { AbstractTubeSymbol tube = (AbstractTubeSymbol) component; Orientation o = tube.getOrientation(); diff --git a/diylc/diylc-library/src/org/diylc/components/tube/AbstractTubeSymbol.java b/diylc/diylc-library/src/org/diylc/components/tube/AbstractTubeSymbol.java index 992d8a2b..833d0e47 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/AbstractTubeSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/AbstractTubeSymbol.java @@ -23,10 +23,10 @@ package org.diylc.components.tube; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.awt.StringUtils; @@ -62,7 +62,7 @@ public abstract class AbstractTubeSymbol extends AbstractComponent { protected boolean showHeaters; protected Orientation orientation = Orientation.DEFAULT; protected SymbolFlipping flip = SymbolFlipping.NONE; - protected Point[] controlPoints; + protected Point2D[] controlPoints; @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, @@ -122,12 +122,12 @@ public abstract class AbstractTubeSymbol extends AbstractComponent { if (display == Display.BOTH) { label = getName() + " " + (getValue() == null ? "" : getValue().toString()); } - StringUtils.drawCenteredText(g2d, label, rect.x + rect.width, rect.y + rect.height, HorizontalAlignment.RIGHT, + StringUtils.drawCenteredText(g2d, label, rect.getX() + rect.width, rect.getY() + rect.height, HorizontalAlignment.RIGHT, VerticalAlignment.BOTTOM); } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -137,7 +137,7 @@ public abstract class AbstractTubeSymbol extends AbstractComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); if (index == controlPoints.length - 1) @@ -225,8 +225,8 @@ public abstract class AbstractTubeSymbol extends AbstractComponent { Shape[] newBody = initializeBody(); // int pinSpacing = (int) PIN_SPACING.convertToPixels(); - int centerX = this.controlPoints[0].x;// + pinSpacing * 3; - int centerY = this.controlPoints[0].y; + double centerX = this.controlPoints[0].getX();// + pinSpacing * 3; + double centerY = this.controlPoints[0].getY(); if (getFlip() == SymbolFlipping.X) { AffineTransform tx = AffineTransform.getScaleInstance(-1, 1); @@ -247,10 +247,9 @@ public abstract class AbstractTubeSymbol extends AbstractComponent { } if (getOrientation() != Orientation.DEFAULT) { - - Point first = this.controlPoints[0]; + Point2D first = this.controlPoints[0]; double angle = Double.parseDouble(getOrientation().name().replace("_", "")); - AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.x, first.y); + AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.getX(), first.getY()); if (newBody != null) { for (int i = 0; i < newBody.length; i++) { newBody[i] = rotate.createTransformedShape(newBody[i]); @@ -264,15 +263,15 @@ public abstract class AbstractTubeSymbol extends AbstractComponent { return this.body; } - protected abstract Point[] initializeControlPoints(Point first); + protected abstract Point2D[] initializeControlPoints(Point2D first); protected void updateControlPoints() { - Point[] newPoints = initializeControlPoints(this.controlPoints[0]); + Point2D[] newPoints = initializeControlPoints(this.controlPoints[0]); this.controlPoints = newPoints; // int pinSpacing = (int) PIN_SPACING.convertToPixels(); - int centerX = this.controlPoints[0].x;// + pinSpacing * 3; - int centerY = this.controlPoints[0].y; + double centerX = this.controlPoints[0].getX();// + pinSpacing * 3; + double centerY = this.controlPoints[0].getY(); if (getFlip() == SymbolFlipping.X) { AffineTransform tx = AffineTransform.getScaleInstance(-1, 1); @@ -291,9 +290,9 @@ public abstract class AbstractTubeSymbol extends AbstractComponent { if (getOrientation() == Orientation.DEFAULT) return; - Point first = this.controlPoints[0]; + Point2D first = this.controlPoints[0]; double angle = Double.parseDouble(getOrientation().name().replace("_", "")); - AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.x, first.y); + AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.getX(), first.getY()); for (int i = 1; i < this.controlPoints.length; i++) { rotate.transform(this.controlPoints[i], this.controlPoints[i]); } diff --git a/diylc/diylc-library/src/org/diylc/components/tube/DiodeSymbol.java b/diylc/diylc-library/src/org/diylc/components/tube/DiodeSymbol.java index c662a7aa..fbb060aa 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/DiodeSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/DiodeSymbol.java @@ -21,20 +21,20 @@ */ package org.diylc.components.tube; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Shape; -import java.awt.geom.Ellipse2D; -import java.awt.geom.GeneralPath; - -import org.diylc.common.ObjectCache; -import org.diylc.components.transform.TubeSymbolTransformer; -import org.diylc.core.IDIYComponent; -import org.diylc.core.IPropertyValidator; -import org.diylc.core.ValidationException; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Ellipse2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; + +import org.diylc.common.ObjectCache; +import org.diylc.components.transform.TubeSymbolTransformer; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IPropertyValidator; +import org.diylc.core.ValidationException; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "Diode Tube", author = "Branislav Stojkovic", category = "Schematic Symbols", @@ -49,18 +49,18 @@ public class DiodeSymbol extends AbstractTubeSymbol { public DiodeSymbol() { super(); this.controlPoints = - new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; updateControlPoints(); } public Shape[] initializeBody() { if (body == null) { - Point[] controlPoints = initializeControlPoints(this.controlPoints[0]); + Point2D[] controlPoints = initializeControlPoints(this.controlPoints[0]); body = new Shape[3]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; - int pinSpacing = (int) PIN_SPACING.convertToPixels(); + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); + double pinSpacing = PIN_SPACING.convertToPixels(); // electrodes GeneralPath polyline = new GeneralPath(); @@ -71,9 +71,9 @@ public class DiodeSymbol extends AbstractTubeSymbol { // cathode if (directlyHeated) { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y - pinSpacing); - polyline.lineTo(controlPoints[2].x + pinSpacing, controlPoints[2].y - pinSpacing * 2); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY() - pinSpacing); + polyline.lineTo(controlPoints[2].getX() + pinSpacing, controlPoints[2].getY() - pinSpacing * 2); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); } else { polyline.moveTo(x + pinSpacing * 2, y + pinSpacing); polyline.lineTo(x + pinSpacing * 4, y + pinSpacing); @@ -85,28 +85,28 @@ public class DiodeSymbol extends AbstractTubeSymbol { polyline = new GeneralPath(); // plate - polyline.moveTo(controlPoints[1].x, controlPoints[1].y); + polyline.moveTo(controlPoints[1].getX(), controlPoints[1].getY()); polyline.lineTo(x + pinSpacing * 3, y - pinSpacing); // cathode if (directlyHeated) { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); - polyline.lineTo(controlPoints[2].x, controlPoints[2].y - pinSpacing); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); + polyline.lineTo(controlPoints[2].getX(), controlPoints[2].getY() - pinSpacing); - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); } else { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); polyline.lineTo(x + pinSpacing * 2, y + pinSpacing); if (showHeaters) { - polyline.moveTo(controlPoints[3].x, controlPoints[3].y); - polyline.lineTo(controlPoints[3].x, controlPoints[3].y - pinSpacing); - polyline.lineTo(controlPoints[3].x + pinSpacing / 2, controlPoints[3].y - 3 * pinSpacing / 2); + polyline.moveTo(controlPoints[3].getX(), controlPoints[3].getY()); + polyline.lineTo(controlPoints[3].getX(), controlPoints[3].getY() - pinSpacing); + polyline.lineTo(controlPoints[3].getX() + pinSpacing / 2, controlPoints[3].getY() - 3 * pinSpacing / 2); - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); - polyline.lineTo(controlPoints[4].x - pinSpacing / 2, controlPoints[4].y - 3 * pinSpacing / 2); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); + polyline.lineTo(controlPoints[4].getX() - pinSpacing / 2, controlPoints[4].getY() - 3 * pinSpacing / 2); } } @@ -134,25 +134,18 @@ public class DiodeSymbol extends AbstractTubeSymbol { } @Override - protected Point[] initializeControlPoints(Point first) { + protected Point2D[] initializeControlPoints(Point2D first) { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. - int x = first.x; - int y = first.y; + double x = first.getX(); + double y = first.getY(); - Point[] newPoints = new Point[] {first, new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; - - newPoints[1].x = x + pinSpacing * 3; - newPoints[1].y = y - pinSpacing * 3; - - newPoints[2].x = x + pinSpacing * 2; - newPoints[2].y = y + pinSpacing * 3; - - newPoints[3].x = x + pinSpacing * 3; - newPoints[3].y = y + pinSpacing * 3; - - newPoints[4].x = x + pinSpacing * 4; - newPoints[4].y = y + pinSpacing * 3; + Point2D[] newPoints = new Point2D[] { + first, + new Point2D.Double(x + pinSpacing * 3, y - pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 2, y + pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 3, y + pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 4, y + pinSpacing * 3)}; return newPoints; } diff --git a/diylc/diylc-library/src/org/diylc/components/tube/DuoDiodeSymbol.java b/diylc/diylc-library/src/org/diylc/components/tube/DuoDiodeSymbol.java index 95a7e43e..d3031dfc 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/DuoDiodeSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/DuoDiodeSymbol.java @@ -21,20 +21,21 @@ */ package org.diylc.components.tube; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Shape; -import java.awt.geom.Ellipse2D; -import java.awt.geom.GeneralPath; - -import org.diylc.common.ObjectCache; -import org.diylc.components.transform.TubeSymbolTransformer; -import org.diylc.core.IDIYComponent; -import org.diylc.core.IPropertyValidator; -import org.diylc.core.ValidationException; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Shape; +import java.awt.geom.Ellipse2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; + +import org.diylc.common.ObjectCache; +import org.diylc.components.transform.TubeSymbolTransformer; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IPropertyValidator; +import org.diylc.core.ValidationException; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "Duo-Diode", author = "Branislav Stojkovic", category = "Schematic Symbols", @@ -55,12 +56,12 @@ public class DuoDiodeSymbol extends AbstractTubeSymbol { public Shape[] initializeBody() { if (body == null) { - Point[] controlPoints = initializeControlPoints(this.controlPoints[0]); + Point2D[] controlPoints = initializeControlPoints(this.controlPoints[0]); body = new Shape[3]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; - int pinSpacing = (int) PIN_SPACING.convertToPixels(); + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); + double pinSpacing = PIN_SPACING.convertToPixels(); // electrodes GeneralPath polyline = new GeneralPath(); @@ -73,9 +74,9 @@ public class DuoDiodeSymbol extends AbstractTubeSymbol { // cathode if (directlyHeated) { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y - pinSpacing); - polyline.lineTo(controlPoints[2].x + pinSpacing, controlPoints[2].y - pinSpacing * 2); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY() - pinSpacing); + polyline.lineTo(controlPoints[2].getX() + pinSpacing, controlPoints[2].getY() - pinSpacing * 2); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); } else { polyline.moveTo(x + pinSpacing * 2, y + pinSpacing); polyline.lineTo(x + pinSpacing * 4, y + pinSpacing); @@ -87,31 +88,31 @@ public class DuoDiodeSymbol extends AbstractTubeSymbol { polyline = new GeneralPath(); // plate - polyline.moveTo(controlPoints[1].x, controlPoints[1].y); - polyline.lineTo(controlPoints[1].x, y - pinSpacing); + polyline.moveTo(controlPoints[1].getX(), controlPoints[1].getY()); + polyline.lineTo(controlPoints[1].getX(), y - pinSpacing); - polyline.moveTo(controlPoints[5].x, controlPoints[5].y); - polyline.lineTo(controlPoints[5].x, y - pinSpacing); + polyline.moveTo(controlPoints[5].getX(), controlPoints[5].getY()); + polyline.lineTo(controlPoints[5].getX(), y - pinSpacing); // cathode if (directlyHeated) { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); - polyline.lineTo(controlPoints[2].x, controlPoints[2].y - pinSpacing); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); + polyline.lineTo(controlPoints[2].getX(), controlPoints[2].getY() - pinSpacing); - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); } else { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); polyline.lineTo(x + pinSpacing * 2, y + pinSpacing); if (showHeaters) { - polyline.moveTo(controlPoints[3].x, controlPoints[3].y); - polyline.lineTo(controlPoints[3].x, controlPoints[3].y - pinSpacing); - polyline.lineTo(controlPoints[3].x + pinSpacing / 2, controlPoints[3].y - 3 * pinSpacing / 2); + polyline.moveTo(controlPoints[3].getX(), controlPoints[3].getY()); + polyline.lineTo(controlPoints[3].getX(), controlPoints[3].getY() - pinSpacing); + polyline.lineTo(controlPoints[3].getX() + pinSpacing / 2, controlPoints[3].getY() - 3 * pinSpacing / 2); - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); - polyline.lineTo(controlPoints[4].x - pinSpacing / 2, controlPoints[4].y - 3 * pinSpacing / 2); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); + polyline.lineTo(controlPoints[4].getX() - pinSpacing / 2, controlPoints[4].getY() - 3 * pinSpacing / 2); } } @@ -142,28 +143,19 @@ public class DuoDiodeSymbol extends AbstractTubeSymbol { } @Override - protected Point[] initializeControlPoints(Point first) { + protected Point2D[] initializeControlPoints(Point2D first) { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. - int x = first.x; - int y = first.y; + double x = first.getX(); + double y = first.getY(); - Point[] newPoints = new Point[] {first, new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; - - newPoints[1].x = x + pinSpacing * 2; - newPoints[1].y = y - pinSpacing * 3; - - newPoints[2].x = x + pinSpacing * 2; - newPoints[2].y = y + pinSpacing * 3; - - newPoints[3].x = x + pinSpacing * 3; - newPoints[3].y = y + pinSpacing * 3; - - newPoints[4].x = x + pinSpacing * 4; - newPoints[4].y = y + pinSpacing * 3; - - newPoints[5].x = x + pinSpacing * 4; - newPoints[5].y = y - pinSpacing * 3; + Point2D[] newPoints = new Point2D[] { + first, + new Point2D.Double(x + pinSpacing * 2, y - pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 2, y + pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 3, y + pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 4, y + pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 4, y - pinSpacing * 3)}; return newPoints; } diff --git a/diylc/diylc-library/src/org/diylc/components/tube/PentodeSymbol.java b/diylc/diylc-library/src/org/diylc/components/tube/PentodeSymbol.java index c7803805..8062c1fd 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/PentodeSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/PentodeSymbol.java @@ -21,19 +21,19 @@ */ package org.diylc.components.tube; -import java.awt.BasicStroke; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Shape; -import java.awt.geom.Ellipse2D; -import java.awt.geom.GeneralPath; - -import org.diylc.common.ObjectCache; -import org.diylc.components.transform.TubeSymbolTransformer; -import org.diylc.core.IDIYComponent; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; +import java.awt.BasicStroke; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Ellipse2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; + +import org.diylc.common.ObjectCache; +import org.diylc.components.transform.TubeSymbolTransformer; +import org.diylc.core.IDIYComponent; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "Pentode", author = "Branislav Stojkovic", category = "Schematic Symbols", @@ -49,19 +49,19 @@ public class PentodeSymbol extends AbstractTubeSymbol { public PentodeSymbol() { super(); this.controlPoints = - new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), - new Point(0, 0), new Point(0, 0)}; + new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), + new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; updateControlPoints(); } public Shape[] initializeBody() { if (body == null) { - Point[] controlPoints = initializeControlPoints(this.controlPoints[0]); + Point2D[] controlPoints = initializeControlPoints(this.controlPoints[0]); body = new Shape[3]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; - int pinSpacing = (int) PIN_SPACING.convertToPixels(); + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); + double pinSpacing = PIN_SPACING.convertToPixels(); // electrodes GeneralPath polyline = new GeneralPath(); @@ -115,13 +115,13 @@ public class PentodeSymbol extends AbstractTubeSymbol { polyline.lineTo(x + pinSpacing * 5 / 4, y - pinSpacing * 3 / 8); // grid2 - polyline.moveTo(controlPoints[3].x, controlPoints[3].y); + polyline.moveTo(controlPoints[3].getX(), controlPoints[3].getY()); polyline.lineTo(x + pinSpacing * 19 / 4, y - pinSpacing); // grid3 if (exposeSuppressorGrid) { - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(x + pinSpacing, controlPoints[4].y); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(x + pinSpacing, controlPoints[4].getY()); polyline.lineTo(x + pinSpacing * 5 / 4, y - pinSpacing - pinSpacing * 5 / 8); } else { polyline.moveTo(x + pinSpacing * 19 / 4, y - pinSpacing - pinSpacing * 5 / 8); @@ -135,21 +135,21 @@ public class PentodeSymbol extends AbstractTubeSymbol { } // plate - polyline.moveTo(controlPoints[1].x, controlPoints[1].y); + polyline.moveTo(controlPoints[1].getX(), controlPoints[1].getY()); polyline.lineTo(x + pinSpacing * 3, y - pinSpacing * 9 / 4); // cathode - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 3 / 8); if (showHeaters) { - polyline.moveTo(controlPoints[5].x, controlPoints[5].y); - polyline.lineTo(controlPoints[5].x, controlPoints[5].y - pinSpacing * 6 / 8); - polyline.lineTo(controlPoints[5].x + pinSpacing / 2, controlPoints[5].y - pinSpacing * 10 / 8); + polyline.moveTo(controlPoints[5].getX(), controlPoints[5].getY()); + polyline.lineTo(controlPoints[5].getX(), controlPoints[5].getY() - pinSpacing * 6 / 8); + polyline.lineTo(controlPoints[5].getX() + pinSpacing / 2, controlPoints[5].getY() - pinSpacing * 10 / 8); - polyline.moveTo(controlPoints[6].x, controlPoints[6].y); - polyline.lineTo(controlPoints[6].x, controlPoints[6].y - pinSpacing * 6 / 8); - polyline.lineTo(controlPoints[6].x - pinSpacing / 2, controlPoints[6].y - pinSpacing * 10 / 8); + polyline.moveTo(controlPoints[6].getX(), controlPoints[6].getY()); + polyline.lineTo(controlPoints[6].getX(), controlPoints[6].getY() - pinSpacing * 6 / 8); + polyline.lineTo(controlPoints[6].getX() - pinSpacing / 2, controlPoints[6].getY() - pinSpacing * 10 / 8); } body[1] = polyline; @@ -181,33 +181,20 @@ public class PentodeSymbol extends AbstractTubeSymbol { g2d.drawLine(width / 8, height * 5 / 8, width * 7 / 8, height * 5 / 8); } - protected Point[] initializeControlPoints(Point first) { + protected Point2D[] initializeControlPoints(Point2D first) { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. - int x = first.x; - int y = first.y; + double x = first.getX(); + double y = first.getY(); - Point[] newPoints = - new Point[] {first, new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), - new Point(0, 0)}; - - newPoints[1].x = x + pinSpacing * 3; - newPoints[1].y = y - pinSpacing * 4; - - newPoints[2].x = x + pinSpacing * 2; - newPoints[2].y = y + pinSpacing * 2; - - newPoints[3].x = x + pinSpacing * 6; - newPoints[3].y = y - pinSpacing; - - newPoints[4].x = x; - newPoints[4].y = y - pinSpacing * 2; - - newPoints[5].x = x + pinSpacing * 3; - newPoints[5].y = y + pinSpacing * 2; - - newPoints[6].x = x + pinSpacing * 4; - newPoints[6].y = y + pinSpacing * 2; + Point2D[] newPoints = + new Point2D[] {first, + new Point2D.Double(x + pinSpacing * 3, y - pinSpacing * 4), + new Point2D.Double(x + pinSpacing * 2, y + pinSpacing * 2), + new Point2D.Double(x + pinSpacing * 6, y - pinSpacing), + new Point2D.Double(x, y - pinSpacing * 2), + new Point2D.Double(x + pinSpacing * 3, y + pinSpacing * 2), + new Point2D.Double(x + pinSpacing * 4, y + pinSpacing * 2)}; return newPoints; } diff --git a/diylc/diylc-library/src/org/diylc/components/tube/SubminiTube.java b/diylc/diylc-library/src/org/diylc/components/tube/SubminiTube.java index 6ec8c9e9..aabd5721 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/SubminiTube.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/SubminiTube.java @@ -23,11 +23,11 @@ import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -76,7 +76,7 @@ public class SubminiTube extends AbstractTransparentComponent { private String value = ""; private Orientation orientation = Orientation.DEFAULT; - private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; transient private Area[] body; private Color bodyColor = BODY_COLOR; private Color borderColor = BORDER_COLOR; @@ -123,7 +123,7 @@ public class SubminiTube extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -138,7 +138,7 @@ public class SubminiTube extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; } @@ -146,15 +146,15 @@ public class SubminiTube extends AbstractTransparentComponent { private void updateControlPoints() { int leadSpacing = (int) getLeadSpacing().convertToPixels(); // Update control points. - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int newPointCount = getPinCount().getValue() + ((getPinArrangement() == PinArrangement.Circular && !folded) || getTopLead() ? 1 : 0); // Need a new array if (newPointCount != controlPoints.length) { - controlPoints = new Point[newPointCount]; + controlPoints = new Point2D[newPointCount]; for (int i = 0; i < controlPoints.length; i++) { - controlPoints[i] = new Point(x, y); + controlPoints[i] = new Point2D.Double(x, y); } } double length = getLength().convertToPixels(); @@ -184,11 +184,11 @@ public class SubminiTube extends AbstractTransparentComponent { throw new RuntimeException("Unexpected orientation: " + orientation); } for (int i = 1; i < controlPoints.length; i++) { - controlPoints[i].setLocation(controlPoints[0].x + i * dx, controlPoints[0].y + i * dy); + controlPoints[i].setLocation(controlPoints[0].getX() + i * dx, controlPoints[0].getY() + i * dy); } if (getTopLead()) { - int centerX = (controlPoints[controlPoints.length - 2].x + x) / 2; - int centerY = (controlPoints[controlPoints.length - 2].y + y) / 2; + double centerX = (controlPoints[controlPoints.length - 2].getX() + x) / 2; + double centerY = (controlPoints[controlPoints.length - 2].getY() + y) / 2; switch (orientation) { case DEFAULT: if (folded) @@ -223,18 +223,18 @@ public class SubminiTube extends AbstractTransparentComponent { } } else { int pinCount = getPinCount().getValue(); - Point firstPoint = controlPoints[0]; + Point2D firstPoint = controlPoints[0]; double angleIncrement = Math.PI * 2 / (pinCount + 1); double initialAngleOffset = angleIncrement; double r = (pinCount + 1) * leadSpacing / (2 * Math.PI); - controlPoints = new Point[pinCount + 1]; + controlPoints = new Point2D[pinCount + 1]; double theta = initialAngleOffset + getOrientation().toRadians(); controlPoints[0] = firstPoint; for (int i = 0; i < pinCount; i++) { - controlPoints[i + 1] = new Point((int) (firstPoint.getX() + Math.cos(theta) * r), + controlPoints[i + 1] = new Point2D.Double((int) (firstPoint.getX() + Math.cos(theta) * r), (int) (firstPoint.getY() + Math.sin(theta) * r)); theta += angleIncrement; } @@ -244,21 +244,21 @@ public class SubminiTube extends AbstractTransparentComponent { public Area[] getBody() { if (body == null) { body = new Area[2]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); double length = getLength().convertToPixels(); double leadLength = getLeadLength().convertToPixels(); double diameter = getDiameter().convertToPixels(); double edgeRadius = EDGE_RADIUS.convertToPixels(); - int centerX; - int centerY; + double centerX; + double centerY; if (getPinArrangement() == PinArrangement.Circular && !folded) { centerX = x; centerY = y; } else { - centerX = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].x + x) / 2; - centerY = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].y + y) / 2; + centerX = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].getX() + x) / 2; + centerY = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].getY() + y) / 2; } if (folded) { @@ -354,8 +354,8 @@ public class SubminiTube extends AbstractTransparentComponent { finalPinBorderColor = METAL_COLOR.darker(); } - int centerX = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].x + controlPoints[0].x) / 2; - int centerY = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].y + controlPoints[0].y) / 2; + double centerX = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].getX() + controlPoints[0].getX()) / 2; + double centerY = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].getY() + controlPoints[0].getY()) / 2; double increment = getDiameter().convertToPixels() / getPinCount().getValue(); if (orientation == Orientation.DEFAULT || orientation == Orientation._270) increment = -increment; @@ -363,58 +363,58 @@ public class SubminiTube extends AbstractTransparentComponent { double startY = centerY - increment * (getPinCount().getValue() - 1) / 2; for (int i = 0; i < controlPoints.length - (getTopLead() ? 1 : 0); i++) { - Point point = controlPoints[i]; + Point2D point = controlPoints[i]; switch (orientation) { case DEFAULT: g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, (int)(startY + increment * i)); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(point.getX() - leadLength - leadThickness / 2), (int)(startY + increment * i)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, (int)(startY + increment * i)); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(point.getX() - leadLength - leadThickness / 2), (int)(startY + increment * i)); break; case _90: g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y - leadLength); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(startX + increment * i), (int)(point.getY() - leadLength)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y - leadLength); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(startX + increment * i), (int)(point.getY() - leadLength)); break; case _180: g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, (int)(startY + increment * i)); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(point.getX() + leadLength - leadThickness / 2), (int)(startY + increment * i)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, (int)(startY + increment * i)); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(point.getX() + leadLength - leadThickness / 2), (int)(startY + increment * i)); break; case _270: g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y + leadLength - leadThickness / 2); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(startX + increment * i), (int)(point.getY() + leadLength - leadThickness / 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y + leadLength - leadThickness / 2); + g2d.drawLine((int)point.getX(), (int)point.getY(), (int)(startX + increment * i), (int)(point.getY() + leadLength - leadThickness / 2)); break; } } if (getTopLead()) { - Point point = controlPoints[controlPoints.length - 1]; + Point2D point = controlPoints[controlPoints.length - 1]; g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } } else { if (!outlineMode) { for (int i = getPinArrangement() == PinArrangement.Circular && !topLead ? 1 : 0; i < controlPoints.length; i++) { - Point point = controlPoints[i]; + Point2D point = controlPoints[i]; g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.fillOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.drawOval((int)(point.getX() - pinSize / 2), (int)(point.getY() - pinSize / 2), pinSize, pinSize); } } } @@ -448,8 +448,8 @@ public class SubminiTube extends AbstractTransparentComponent { int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically Rectangle bounds = mainArea.getBounds(); - int x = bounds.x + (bounds.width - textWidth) / 2; - int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + double x = bounds.getX() + (bounds.width - textWidth) / 2; + double y = bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); int dx = 0; int dy = 0; @@ -470,7 +470,7 @@ public class SubminiTube extends AbstractTransparentComponent { } } - g2d.drawString(label, x + dx, y + dy); + g2d.drawString(label, (int)(x + dx), (int)(y + dy)); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/tube/TriodeSymbol.java b/diylc/diylc-library/src/org/diylc/components/tube/TriodeSymbol.java index 1734355f..f0bb1632 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/TriodeSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/TriodeSymbol.java @@ -21,19 +21,19 @@ */ package org.diylc.components.tube; -import java.awt.BasicStroke; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Shape; -import java.awt.geom.Ellipse2D; -import java.awt.geom.GeneralPath; - -import org.diylc.common.ObjectCache; -import org.diylc.components.transform.TubeSymbolTransformer; -import org.diylc.core.IDIYComponent; -import org.diylc.core.VisibilityPolicy; -import org.diylc.core.annotations.ComponentDescriptor; -import org.diylc.core.annotations.EditableProperty; +import java.awt.BasicStroke; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Ellipse2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; + +import org.diylc.common.ObjectCache; +import org.diylc.components.transform.TubeSymbolTransformer; +import org.diylc.core.IDIYComponent; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "Triode", author = "Branislav Stojkovic", category = "Schematic Symbols", @@ -49,17 +49,17 @@ public class TriodeSymbol extends AbstractTubeSymbol { public TriodeSymbol() { super(); this.controlPoints = - new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)}; updateControlPoints(); } public Shape[] initializeBody() { if (body == null) { - Point[] controlPoints = initializeControlPoints(this.controlPoints[0]); + Point2D[] controlPoints = initializeControlPoints(this.controlPoints[0]); body = new Shape[3]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); int pinSpacing = (int) PIN_SPACING.convertToPixels(); // electrodes @@ -81,9 +81,9 @@ public class TriodeSymbol extends AbstractTubeSymbol { // cathode if (directlyHeated) { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y - pinSpacing); - polyline.lineTo(controlPoints[2].x + pinSpacing, controlPoints[2].y - pinSpacing * 2); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY() - pinSpacing); + polyline.lineTo(controlPoints[2].getX() + pinSpacing, controlPoints[2].getY() - pinSpacing * 2); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); } else { polyline.moveTo(x + pinSpacing * 2, y + pinSpacing); polyline.lineTo(x + pinSpacing * 4, y + pinSpacing); @@ -99,28 +99,28 @@ public class TriodeSymbol extends AbstractTubeSymbol { polyline.lineTo(x + pinSpacing, y); // plate - polyline.moveTo(controlPoints[1].x, controlPoints[1].y); + polyline.moveTo(controlPoints[1].getX(), controlPoints[1].getY()); polyline.lineTo(x + pinSpacing * 3, y - pinSpacing); // cathode if (directlyHeated) { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); - polyline.lineTo(controlPoints[2].x, controlPoints[2].y - pinSpacing); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); + polyline.lineTo(controlPoints[2].getX(), controlPoints[2].getY() - pinSpacing); - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); } else { - polyline.moveTo(controlPoints[2].x, controlPoints[2].y); + polyline.moveTo(controlPoints[2].getX(), controlPoints[2].getY()); polyline.lineTo(x + pinSpacing * 2, y + pinSpacing); if (showHeaters) { - polyline.moveTo(controlPoints[3].x, controlPoints[3].y); - polyline.lineTo(controlPoints[3].x, controlPoints[3].y - pinSpacing); - polyline.lineTo(controlPoints[3].x + pinSpacing / 2, controlPoints[3].y - 3 * pinSpacing / 2); + polyline.moveTo(controlPoints[3].getX(), controlPoints[3].getY()); + polyline.lineTo(controlPoints[3].getX(), controlPoints[3].getY() - pinSpacing); + polyline.lineTo(controlPoints[3].getX() + pinSpacing / 2, controlPoints[3].getY() - 3 * pinSpacing / 2); - polyline.moveTo(controlPoints[4].x, controlPoints[4].y); - polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing); - polyline.lineTo(controlPoints[4].x - pinSpacing / 2, controlPoints[4].y - 3 * pinSpacing / 2); + polyline.moveTo(controlPoints[4].getX(), controlPoints[4].getY()); + polyline.lineTo(controlPoints[4].getX(), controlPoints[4].getY() - pinSpacing); + polyline.lineTo(controlPoints[4].getX() - pinSpacing / 2, controlPoints[4].getY() - 3 * pinSpacing / 2); } } @@ -151,25 +151,18 @@ public class TriodeSymbol extends AbstractTubeSymbol { g2d.drawLine(width / 8, height / 2, width * 7 / 8, height / 2); } - protected Point[] initializeControlPoints(Point first) { + protected Point2D[] initializeControlPoints(Point2D first) { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. - int x = first.x; - int y = first.y; + double x = first.getX(); + double y = first.getY(); - Point[] newPoints = new Point[] {first, new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0)}; - - newPoints[1].x = x + pinSpacing * 3; - newPoints[1].y = y - pinSpacing * 3; - - newPoints[2].x = x + pinSpacing * 2; - newPoints[2].y = y + pinSpacing * 3; - - newPoints[3].x = x + pinSpacing * 3; - newPoints[3].y = y + pinSpacing * 3; - - newPoints[4].x = x + pinSpacing * 4; - newPoints[4].y = y + pinSpacing * 3; + Point2D[] newPoints = new Point2D[] { + first, + new Point2D.Double(x + pinSpacing * 3, y - pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 2, y + pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 3, y + pinSpacing * 3), + new Point2D.Double(x + pinSpacing * 4, y + pinSpacing * 3)}; return newPoints; } diff --git a/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java b/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java index e9e4ff4d..1b433ac8 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java @@ -30,6 +30,7 @@ import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -360,7 +361,7 @@ public class TubeSocket extends AbstractTransparentComponent { } @Override - public Point getControlPoint(int index) { + public Point2D getControlPoint(int index) { return controlPoints[index]; } @@ -391,7 +392,7 @@ public class TubeSocket extends AbstractTransparentComponent { } @Override - public void setControlPoint(Point point, int index) { + public void setControlPoint(Point2D point, int index) { controlPoints[index].setLocation(point); body = null; diff --git a/diylc/diylc-library/src/org/diylc/editor/FlexibleLeadsEditor.java b/diylc/diylc-library/src/org/diylc/editor/FlexibleLeadsEditor.java index 7dc8b04d..8f757808 100644 --- a/diylc/diylc-library/src/org/diylc/editor/FlexibleLeadsEditor.java +++ b/diylc/diylc-library/src/org/diylc/editor/FlexibleLeadsEditor.java @@ -1,7 +1,7 @@ package org.diylc.editor; -import java.awt.Point; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import java.util.HashSet; import java.util.Set; @@ -55,8 +55,8 @@ public class FlexibleLeadsEditor implements IProjectEditor { if (l == null) return; - Point p1 = new Point(leaded.getControlPoint(0)); - Point p2 = new Point(leaded.getControlPoint(1)); + Point2D p1 = leaded.getControlPoint(0); + Point2D p2 = leaded.getControlPoint(1); double d = p1.distance(p2); double len = l.convertToPixels() + 2; @@ -66,12 +66,12 @@ public class FlexibleLeadsEditor implements IProjectEditor { return; // find the center and angle - double centerX = (p1.x + p2.x) / 2.0; - double centerY = (p1.y + p2.y) / 2.0; - double theta = Math.atan2(p2.y - p1.y, p2.x - p1.x); + double centerX = (p1.getX() + p2.getX()) / 2.0; + double centerY = (p1.getY() + p2.getY()) / 2.0; + double theta = Math.atan2(p2.getY() - p1.getY(), p2.getX() - p1.getX()); // shorten the component to match the size of the body - Point newP1 = new Point((int)Math.round(centerX - Math.cos(theta) * len / 2), (int)Math.round(centerY - Math.sin(theta) * len / 2)); - Point newP2 = new Point((int)Math.round(centerX + Math.cos(theta) * len / 2), (int)Math.round(centerY + Math.sin(theta) * len / 2)); + Point2D newP1 = new Point2D.Double((int)Math.round(centerX - Math.cos(theta) * len / 2), (int)Math.round(centerY - Math.sin(theta) * len / 2)); + Point2D newP2 = new Point2D.Double((int)Math.round(centerX + Math.cos(theta) * len / 2), (int)Math.round(centerY + Math.sin(theta) * len / 2)); leaded.setControlPoint(newP1, 0); leaded.setControlPoint(newP2, 1); @@ -87,7 +87,7 @@ public class FlexibleLeadsEditor implements IProjectEditor { w1.setControlPoint(p1, 0); for (int i = 1; i < w1.getControlPointCount() - 1; i++) { double r = (len + diff) / (w1.getControlPointCount() - 1) * (w1.getControlPointCount() - i - 1); - w1.setControlPoint(new Point((int)Math.round(centerX - Math.cos(theta) * r), (int)Math.round(centerY - Math.sin(theta) * r)), i); + w1.setControlPoint(new Point2D.Double((int)Math.round(centerX - Math.cos(theta) * r), (int)Math.round(centerY - Math.sin(theta) * r)), i); } w1.setControlPoint(newP1, w1.getControlPointCount() - 1); newSelection.add(w1); @@ -100,7 +100,7 @@ public class FlexibleLeadsEditor implements IProjectEditor { w2.setControlPoint(p2, 0); for (int i = 1; i < w2.getControlPointCount() - 1; i++) { double r = (len + diff) / (w2.getControlPointCount() - 1) * (w2.getControlPointCount() - i - 1); - w2.setControlPoint(new Point((int)Math.round(centerX + Math.cos(theta) * r), (int)Math.round(centerY + Math.sin(theta) * r)), i); + w2.setControlPoint(new Point2D.Double((int)Math.round(centerX + Math.cos(theta) * r), (int)Math.round(centerY + Math.sin(theta) * r)), i); } w2.setControlPoint(newP2, w2.getControlPointCount() - 1); newSelection.add(w2); @@ -117,16 +117,16 @@ public class FlexibleLeadsEditor implements IProjectEditor { // create leads for (int i = 0; i < 3; i++) { - Point p0 = c.getControlPoint(i); + Point2D p0 = c.getControlPoint(i); double dx = -offsetX.convertToPixels(); double dy = offsetY.convertToPixels() * (i - 1); // calculate lead position - Point p1 = new Point((int)(p0.x + dx / 2), (int)(p0.y + dy / 2)); - Point p2 = new Point((int)(p0.x + dx), (int)(p0.y + dy)); + Point2D p1 = new Point2D.Double((int)(p0.getX() + dx / 2), (int)(p0.getY() + dy / 2)); + Point2D p2 = new Point2D.Double((int)(p0.getX() + dx), (int)(p0.getY() + dy)); if (c.getOrientation() != Orientation.DEFAULT) { - AffineTransform tx = AffineTransform.getRotateInstance(c.getOrientation().toRadians(), p0.x, p0.y); + AffineTransform tx = AffineTransform.getRotateInstance(c.getOrientation().toRadians(), p0.getX(), p0.getY()); tx.transform(p1, p1); tx.transform(p2, p2); } @@ -171,18 +171,18 @@ public class FlexibleLeadsEditor implements IProjectEditor { // create leads for (int i = 0; i < 3; i++) { - Point p0 = c.getControlPoint(i); + Point2D p0 = c.getControlPoint(i); double dx = 0; double dy = offsetY.convertToPixels(); AffineTransform tx = null; if (c.getOrientation() != Orientation.DEFAULT) - tx = AffineTransform.getRotateInstance(c.getOrientation().toRadians(), p0.x, p0.y); + tx = AffineTransform.getRotateInstance(c.getOrientation().toRadians(), p0.getX(), p0.getY()); HookupWire w = new HookupWire(); getInstantiationManager().fillWithDefaultProperties(w, null); for (int j = 0; j < w.getControlPointCount(); j++) { - Point p = new Point((int)(p0.x + dx * j), (int)(p0.y + dy * j)); + Point2D p = new Point2D.Double((int)(p0.getX() + dx * j), (int)(p0.getY() + dy * j)); if (tx != null) tx.transform(p, p); w.setControlPoint(p, j); @@ -197,7 +197,7 @@ public class FlexibleLeadsEditor implements IProjectEditor { } private void addLeads(TubeSocket c, Project project, Set> newSelection) { - Point center = c.getControlPoint(0); + Point2D center = c.getControlPoint(0); // don't do it for PCB type if (c.getMount() == Mount.PCB) @@ -205,15 +205,15 @@ public class FlexibleLeadsEditor implements IProjectEditor { // create leads for (int i = 1; i < c.getControlPointCount(); i++) { - Point p = c.getControlPoint(i); - double dx = p.x - center.x; - double dy = p.y - center.y; + Point2D p = c.getControlPoint(i); + double dx = p.getX() - center.getX(); + double dy = p.getY() - center.getY(); // calculate lead position HookupWire w = new HookupWire(); getInstantiationManager().fillWithDefaultProperties(w, null); for (int j = 0; j < w.getControlPointCount(); j++) { - Point pw = new Point((int)(p.x + dx * j), (int)(p.y + dy * j)); + Point2D pw = new Point2D.Double((int)(p.getX() + dx * j), (int)(p.getY() + dy * j)); w.setControlPoint(pw, j); } newSelection.add(w); @@ -231,7 +231,7 @@ public class FlexibleLeadsEditor implements IProjectEditor { for (int i = 0; i < c.getControlPointCount(); i++) { if (!c.isControlPointSticky(i)) continue; - Point p0 = c.getControlPoint(i); + Point2D p0 = c.getControlPoint(i); double dx = 0; double dy = 0; @@ -242,13 +242,13 @@ public class FlexibleLeadsEditor implements IProjectEditor { AffineTransform tx = null; if (c.getOrientation() != Orientation.DEFAULT) - tx = AffineTransform.getRotateInstance(c.getOrientation().toRadians(), p0.x, p0.y); + tx = AffineTransform.getRotateInstance(c.getOrientation().toRadians(), p0.getX(), p0.getY()); HookupWire w = new HookupWire(); w.setGauge(AWG._24); getInstantiationManager().fillWithDefaultProperties(w, null); for (int j = 0; j < w.getControlPointCount(); j++) { - Point p = new Point((int)(p0.x + dx * j), (int)(p0.y + dy * j)); + Point2D p = new Point2D.Double((int)(p0.getX() + dx * j), (int)(p0.getY() + dy * j)); if (tx != null) tx.transform(p, p); w.setControlPoint(p, j); diff --git a/diylc/diylc-library/src/org/diylc/serialization/V1FileParser.java b/diylc/diylc-library/src/org/diylc/serialization/V1FileParser.java index f32cc0d6..0ef44743 100644 --- a/diylc/diylc-library/src/org/diylc/serialization/V1FileParser.java +++ b/diylc/diylc-library/src/org/diylc/serialization/V1FileParser.java @@ -21,60 +21,60 @@ */ package org.diylc.serialization; -import java.awt.Color; -import java.awt.Point; -import java.lang.reflect.Field; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import org.apache.log4j.Logger; -import org.diylc.common.Display; -import org.diylc.common.HorizontalAlignment; -import org.diylc.common.Orientation; -import org.diylc.common.OrientationHV; -import org.diylc.common.VerticalAlignment; -import org.diylc.components.AbstractLeadedComponent; -import org.diylc.components.AbstractTransparentComponent; -import org.diylc.components.boards.AbstractBoard; -import org.diylc.components.boards.BlankBoard; -import org.diylc.components.boards.PerfBoard; -import org.diylc.components.boards.VeroBoard; -import org.diylc.components.connectivity.CopperTrace; -import org.diylc.components.connectivity.HookupWire; -import org.diylc.components.connectivity.Jumper; -import org.diylc.components.connectivity.SolderPad; -import org.diylc.components.connectivity.TraceCut; -import org.diylc.components.electromechanical.MiniToggleSwitch; -import org.diylc.components.electromechanical.ToggleSwitchType; -import org.diylc.components.misc.BOM; -import org.diylc.components.misc.Label; -import org.diylc.components.passive.PotentiometerPanel; -import org.diylc.components.passive.RadialElectrolytic; -import org.diylc.components.passive.RadialFilmCapacitor; -import org.diylc.components.passive.Resistor; -import org.diylc.components.passive.Taper; -import org.diylc.components.passive.TrimmerPotentiometer; -import org.diylc.components.passive.TrimmerPotentiometer.TrimmerType; -import org.diylc.components.semiconductors.DIL_IC; -import org.diylc.components.semiconductors.DiodePlastic; -import org.diylc.components.semiconductors.LED; -import org.diylc.components.semiconductors.SIL_IC; -import org.diylc.components.semiconductors.TransistorTO92; -import org.diylc.core.IDIYComponent; -import org.diylc.core.Project; -import org.diylc.core.measures.Capacitance; -import org.diylc.core.measures.Resistance; -import org.diylc.core.measures.Size; -import org.diylc.core.measures.SizeUnit; -import org.diylc.presenter.CalcUtils; +import java.awt.Color; +import java.awt.Point; +import java.awt.geom.Point2D; +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import org.apache.log4j.Logger; +import org.diylc.common.Display; +import org.diylc.common.HorizontalAlignment; +import org.diylc.common.Orientation; +import org.diylc.common.OrientationHV; +import org.diylc.common.VerticalAlignment; +import org.diylc.components.AbstractLeadedComponent; +import org.diylc.components.AbstractTransparentComponent; +import org.diylc.components.boards.AbstractBoard; +import org.diylc.components.boards.BlankBoard; +import org.diylc.components.boards.PerfBoard; +import org.diylc.components.boards.VeroBoard; +import org.diylc.components.connectivity.CopperTrace; +import org.diylc.components.connectivity.HookupWire; +import org.diylc.components.connectivity.Jumper; +import org.diylc.components.connectivity.SolderPad; +import org.diylc.components.connectivity.TraceCut; +import org.diylc.components.electromechanical.MiniToggleSwitch; +import org.diylc.components.electromechanical.ToggleSwitchType; +import org.diylc.components.misc.BOM; +import org.diylc.components.misc.Label; +import org.diylc.components.passive.PotentiometerPanel; +import org.diylc.components.passive.RadialElectrolytic; +import org.diylc.components.passive.RadialFilmCapacitor; +import org.diylc.components.passive.Resistor; +import org.diylc.components.passive.Taper; +import org.diylc.components.passive.TrimmerPotentiometer; +import org.diylc.components.passive.TrimmerPotentiometer.TrimmerType; +import org.diylc.components.semiconductors.DIL_IC; +import org.diylc.components.semiconductors.DiodePlastic; +import org.diylc.components.semiconductors.LED; +import org.diylc.components.semiconductors.SIL_IC; +import org.diylc.components.semiconductors.TransistorTO92; +import org.diylc.core.IDIYComponent; +import org.diylc.core.Project; +import org.diylc.core.measures.Capacitance; +import org.diylc.core.measures.Resistance; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.presenter.CalcUtils; import org.diylc.presenter.ComparatorFactory; -import org.diylc.serialization.IOldFileParser; -import org.diylc.utils.Constants; -import org.w3c.dom.Element; -import org.w3c.dom.Node; +import org.diylc.utils.Constants; +import org.w3c.dom.Element; +import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class V1FileParser implements IOldFileParser { @@ -126,11 +126,11 @@ public class V1FileParser implements IOldFileParser { throw new IllegalArgumentException("Unrecognized board type: " + type); } board.setName("Main board"); - Point referencePoint = - new Point(CalcUtils.roundToGrid(x, V1_GRID_SPACING), CalcUtils.roundToGrid(y, V1_GRID_SPACING)); + Point2D referencePoint = + new Point2D.Double(CalcUtils.roundToGrid(x, V1_GRID_SPACING), CalcUtils.roundToGrid(y, V1_GRID_SPACING)); board.setControlPoint(referencePoint, 0); board.setControlPoint( - new Point(CalcUtils.roundToGrid(x + boardWidth, V1_GRID_SPACING), CalcUtils.roundToGrid(y + boardHeight, + new Point2D.Double(CalcUtils.roundToGrid(x + boardWidth, V1_GRID_SPACING), CalcUtils.roundToGrid(y + boardHeight, V1_GRID_SPACING)), 1); project.getComponents().add(board); @@ -144,8 +144,8 @@ public class V1FileParser implements IOldFileParser { String valueAttr = valueNode == null ? null : valueNode.getNodeValue(); int x1Attr = Integer.parseInt(node.getAttributes().getNamedItem("X1").getNodeValue()); int y1Attr = Integer.parseInt(node.getAttributes().getNamedItem("Y1").getNodeValue()); - Point point1 = convertV1CoordinatesToV3Point(referencePoint, x1Attr, y1Attr); - Point point2 = null; + Point2D point1 = convertV1CoordinatesToV3Point(referencePoint, x1Attr, y1Attr); + Point2D point2 = null; Integer x2Attr = null; Integer y2Attr = null; Color color = null; @@ -210,11 +210,11 @@ public class V1FileParser implements IOldFileParser { long seed = Long.parseLong(node.getAttributes().getNamedItem("Seed").getNodeValue()); Random r = new Random(seed); randSeed = seed; - int d = (int) Math.round(Math.sqrt(Math.pow(point1.x - point2.x, 2) + Math.pow(point1.y - point2.y, 2)) / 2); - int x2 = (int) (point1.x + Math.round((point2.x - point1.x) * 0.40) + myRandom(d, r)); - int y2 = (int) (point1.y + Math.round((point2.y - point1.y) * 0.40) + myRandom(d, r)); - int x3 = (int) (point1.x + Math.round((point2.x - point1.x) * 0.60) + myRandom(d, r)); - int y3 = (int) (point1.y + Math.round((point2.y - point1.y) * 0.60) + myRandom(d, r)); + int d = (int) Math.round(Math.sqrt(Math.pow(point1.getX() - point2.getX(), 2) + Math.pow(point1.getY() - point2.getY(), 2)) / 2); + int x2 = (int) (point1.getX() + Math.round((point2.getX() - point1.getX()) * 0.40) + myRandom(d, r)); + int y2 = (int) (point1.getY() + Math.round((point2.getY() - point1.getY()) * 0.40) + myRandom(d, r)); + int x3 = (int) (point1.getX() + Math.round((point2.getX() - point1.getX()) * 0.60) + myRandom(d, r)); + int y3 = (int) (point1.getY() + Math.round((point2.getY() - point1.getY()) * 0.60) + myRandom(d, r)); wire.setName(nameAttr); String colorAttr = node.getAttributes().getNamedItem("Color").getNodeValue(); @@ -314,13 +314,13 @@ public class V1FileParser implements IOldFileParser { LOG.debug("Could not set value of " + nameAttr); } transistor.setControlPoint(point1, 0); - if (point1.y > point2.y) { + if (point1.getY() > point2.getY()) { transistor.setOrientation(Orientation._180); - } else if (point1.y < point2.y) { + } else if (point1.getY() < point2.getY()) { transistor.setOrientation(Orientation.DEFAULT); - } else if (point1.x < point2.x) { + } else if (point1.getX() < point2.getX()) { transistor.setOrientation(Orientation._270); - } else if (point1.x > point2.x) { + } else if (point1.getX() > point2.getX()) { transistor.setOrientation(Orientation._90); } // capacitor.setControlPoint(point2, 1); @@ -351,9 +351,9 @@ public class V1FileParser implements IOldFileParser { ic.setPinCount(DIL_IC.PinCount.valueOf("_" + pinCount)); ic.setName(nameAttr); // Translate control points. - for (int j = 0; j < ic.getControlPointCount(); j++) { - Point p = new Point(ic.getControlPoint(j)); - p.translate(point1.x, point1.y); + for (int j = 0; j < ic.getControlPointCount(); j++) { + Point2D oldP = ic.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + point1.getX(), oldP.getY() + point1.getY()); ic.setControlPoint(p, j); } ic.setValue(valueAttr); @@ -403,19 +403,19 @@ public class V1FileParser implements IOldFileParser { sw.setSpacing(new Size(0.1, SizeUnit.in)); // compensate for potential negative coordinates after the type and orientation have // been set. Make sure that the top left corner is at (0, 0) - int dx = 0; - int dy = 0; - for (int j = 0; j < sw.getControlPointCount(); j++) { - Point p = new Point(sw.getControlPoint(j)); - if (p.x < 0 && p.x < dx) - dx = p.x; - if (p.y < 0 && p.y < dy) - dy = p.y; + double dx = 0; + double dy = 0; + for (int j = 0; j < sw.getControlPointCount(); j++) { + Point2D oldP = sw.getControlPoint(j); + if (oldP.getX() < 0 && oldP.getX() < dx) + dx = oldP.getX(); + if (oldP.getY() < 0 && oldP.getY() < dy) + dy = oldP.getY(); } // Translate control points. - for (int j = 0; j < sw.getControlPointCount(); j++) { - Point p = new Point(sw.getControlPoint(j)); - p.translate(Math.min(point1.x, point2.x) - dx, Math.min(point1.y, point2.y) - dy); + for (int j = 0; j < sw.getControlPointCount(); j++) { + Point2D oldP = sw.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + Math.min(point1.getX(), point2.getX()) - dx, oldP.getY() + Math.min(point1.getY(), point2.getY()) - dy); sw.setControlPoint(p, j); } component = sw; @@ -440,9 +440,9 @@ public class V1FileParser implements IOldFileParser { ic.setPinCount(SIL_IC.PinCount.valueOf("_" + pinCount)); ic.setName(nameAttr); // Translate control points. - for (int j = 0; j < ic.getControlPointCount(); j++) { - Point p = new Point(ic.getControlPoint(j)); - p.translate(point1.x, point1.y); + for (int j = 0; j < ic.getControlPointCount(); j++) { + Point2D oldP = ic.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + point1.getX(), oldP.getY() + point1.getY()); ic.setControlPoint(p, j); } ic.setValue(valueAttr); @@ -470,30 +470,30 @@ public class V1FileParser implements IOldFileParser { int delta = Constants.PIXELS_PER_INCH / 5; if (x1Attr < x2Attr) { pot.setOrientation(Orientation.DEFAULT); - for (int j = 0; j < pot.getControlPointCount(); j++) { - Point p = new Point(pot.getControlPoint(j)); - p.translate(point1.x - delta, point1.y); + for (int j = 0; j < pot.getControlPointCount(); j++) { + Point2D oldP = pot.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + point1.getX() - delta, oldP.getY() + point1.getY()); pot.setControlPoint(p, j); } } else if (x1Attr > x2Attr) { pot.setOrientation(Orientation._180); - for (int j = 0; j < pot.getControlPointCount(); j++) { - Point p = new Point(pot.getControlPoint(j)); - p.translate(point1.x + delta, point1.y); + for (int j = 0; j < pot.getControlPointCount(); j++) { + Point2D oldP = pot.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + point1.getX() + delta, oldP.getY() + point1.getY()); pot.setControlPoint(p, j); } } else if (y1Attr < y2Attr) { pot.setOrientation(Orientation._90); - for (int j = 0; j < pot.getControlPointCount(); j++) { - Point p = new Point(pot.getControlPoint(j)); - p.translate(point1.x, point1.y - delta); + for (int j = 0; j < pot.getControlPointCount(); j++) { + Point2D oldP = pot.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + point1.getX(), oldP.getY() + point1.getY() - delta); pot.setControlPoint(p, j); } } else if (y1Attr > y2Attr) { pot.setOrientation(Orientation._270); - for (int j = 0; j < pot.getControlPointCount(); j++) { - Point p = new Point(pot.getControlPoint(j)); - p.translate(point1.x, point1.y + delta); + for (int j = 0; j < pot.getControlPointCount(); j++) { + Point2D oldP = pot.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + point1.getX(), oldP.getY() + point1.getY() + delta); pot.setControlPoint(p, j); }; } @@ -653,9 +653,9 @@ public class V1FileParser implements IOldFileParser { dx *= V1_GRID_SPACING.convertToPixels(); dy *= V1_GRID_SPACING.convertToPixels(); // Translate control points. - for (int j = 0; j < trimmer.getControlPointCount(); j++) { - Point p = new Point(trimmer.getControlPoint(j)); - p.translate(point1.x + dx, point1.y + dy); + for (int j = 0; j < trimmer.getControlPointCount(); j++) { + Point2D oldP = trimmer.getControlPoint(j); + Point2D p = new Point2D.Double(oldP.getX() + point1.getX() + dx, oldP.getY() + point1.getY() + dy); trimmer.setControlPoint(p, j); } component = trimmer; @@ -679,12 +679,12 @@ public class V1FileParser implements IOldFileParser { } } - int minY = y; + double minY = y; for (IDIYComponent c : project.getComponents()) { for (int i = 0; i < c.getControlPointCount(); i++) { - Point p = c.getControlPoint(i); - if (p.y < minY) - minY = p.y; + Point2D p = c.getControlPoint(i); + if (p.getY() < minY) + minY = p.getY(); } } @@ -695,7 +695,7 @@ public class V1FileParser implements IOldFileParser { titleLabel.setValue(project.getTitle()); titleLabel.setHorizontalAlignment(HorizontalAlignment.CENTER); titleLabel.setControlPoint( - new Point(CalcUtils.roundToGrid(x + boardWidth / 2, V1_GRID_SPACING), CalcUtils.roundToGrid( + new Point2D.Double(CalcUtils.roundToGrid(x + boardWidth / 2, V1_GRID_SPACING), CalcUtils.roundToGrid( (int) (minY - Constants.PIXELS_PER_INCH * V1_GRID_SPACING.getValue() * 5), V1_GRID_SPACING)), 0); project.getComponents().add(titleLabel); @@ -704,7 +704,7 @@ public class V1FileParser implements IOldFileParser { creditsLabel.setValue(project.getAuthor()); creditsLabel.setHorizontalAlignment(HorizontalAlignment.CENTER); creditsLabel.setControlPoint( - new Point(CalcUtils.roundToGrid(x + boardWidth / 2, V1_GRID_SPACING), CalcUtils.roundToGrid( + new Point2D.Double(CalcUtils.roundToGrid(x + boardWidth / 2, V1_GRID_SPACING), CalcUtils.roundToGrid( (int) (minY - Constants.PIXELS_PER_INCH * V1_GRID_SPACING.getValue() * 4), V1_GRID_SPACING)), 0); project.getComponents().add(creditsLabel); @@ -712,7 +712,7 @@ public class V1FileParser implements IOldFileParser { BOM bom = new BOM(); int bomSize = (int) bom.getSize().convertToPixels(); bom.setControlPoint( - new Point(CalcUtils.roundToGrid(x + (boardWidth - bomSize) / 2, V1_GRID_SPACING), CalcUtils.roundToGrid( + new Point2D.Double(CalcUtils.roundToGrid(x + (boardWidth - bomSize) / 2, V1_GRID_SPACING), CalcUtils.roundToGrid( (int) (y + boardHeight + 2 * V1_GRID_SPACING.convertToPixels()), V1_GRID_SPACING)), 0); project.getComponents().add(bom); @@ -721,10 +721,9 @@ public class V1FileParser implements IOldFileParser { return project; } - private Point convertV1CoordinatesToV3Point(Point reference, int x, int y) { - Point point = new Point(reference); - point.translate((int) (x * Constants.PIXELS_PER_INCH * V1_GRID_SPACING.getValue()), (int) (y - * Constants.PIXELS_PER_INCH * V1_GRID_SPACING.getValue())); + private Point2D convertV1CoordinatesToV3Point(Point2D reference, int x, int y) { + Point2D point = new Point2D.Double(reference.getX() + x * Constants.PIXELS_PER_INCH * V1_GRID_SPACING.getValue(), reference.getY() + y + * Constants.PIXELS_PER_INCH * V1_GRID_SPACING.getValue()); return point; } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 12cccbe8..f864f5db 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 f9739c88..ec304b16 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/src/org/diylc/swing/gui/MainFrame.java b/diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java index 6b67b179..c76235bc 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java @@ -60,7 +60,6 @@ import javax.swing.event.MenuListener; import org.apache.log4j.Logger; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.IConfigurationManager; -import org.diylc.appframework.miscutils.InMemoryConfigurationManager; import org.diylc.common.BadPositionException; import org.diylc.common.EventType; import org.diylc.common.IPlugIn; diff --git a/diylc/diylc-swing/src/org/diylc/swing/loadline/LoadlineEditorFrame.java b/diylc/diylc-swing/src/org/diylc/swing/loadline/LoadlineEditorFrame.java index 21a30125..ff204261 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/loadline/LoadlineEditorFrame.java +++ b/diylc/diylc-swing/src/org/diylc/swing/loadline/LoadlineEditorFrame.java @@ -482,9 +482,9 @@ public class LoadlineEditorFrame extends JFrame implements IView { if (CURVE.equals(c.getName())) { Point2D[] points = new Point2D[c.getControlPointCount()]; for (int j = 0; j < c.getControlPointCount(); j++) { - Point p = c.getControlPoint(j); - points[j] = new Point2D.Double(1.0f * (p.x - centerX) / (maxX - centerX) * v, - 1.0f * (p.y - centerY) / (maxY - centerY) * i); + Point2D p = c.getControlPoint(j); + points[j] = new Point2D.Double(1.0f * (p.getX() - centerX) / (maxX - centerX) * v, + 1.0f * (p.getY() - centerY) / (maxY - centerY) * i); } LoadlineCurve curve = (LoadlineCurve)c; org.diylc.components.misc.LoadlineEntity.Line line = diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java index 51831509..1ab9c5fe 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java @@ -48,7 +48,6 @@ import javax.swing.JComponent; import javax.swing.KeyStroke; import org.apache.log4j.Logger; -import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.IConfigurationManager; import org.diylc.common.ComponentType; import org.diylc.common.DrawOption; diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java index 9914abd2..4465605d 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java @@ -50,9 +50,6 @@ import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; -import net.java.balloontip.BalloonTip; -import net.java.balloontip.styles.EdgedBalloonStyle; - import org.apache.log4j.Logger; import org.diylc.announcements.AnnouncementProvider; import org.diylc.appframework.miscutils.ConfigurationManager; @@ -76,6 +73,9 @@ import org.diylc.swingframework.MemoryBar; import org.diylc.swingframework.miscutils.PercentageListCellRenderer; import org.diylc.swingframework.update.UpdateDialog; import org.diylc.swingframework.update.UpdateLabel; + +import net.java.balloontip.BalloonTip; +import net.java.balloontip.styles.EdgedBalloonStyle; public class StatusBar extends JPanel implements IPlugIn { @@ -122,7 +122,7 @@ public class StatusBar extends JPanel implements IPlugIn { // State variables private ComponentType componentSlot; - private Point controlPointSlot; + private Point2D controlPointSlot; private Boolean forceInstatiate; private List componentNamesUnderCursor; private List selectedComponentNames; @@ -481,7 +481,7 @@ public class StatusBar extends JPanel implements IPlugIn { break; case SLOT_CHANGED: componentSlot = (ComponentType) params[0]; - controlPointSlot = (Point) params[1]; + controlPointSlot = (Point2D) params[1]; forceInstatiate = params.length > 2 ? (Boolean)params[2] : null; refreshStatusText(); break;