fixes for double points

This commit is contained in:
Branislav Stojkovic
2020-09-11 15:20:17 +02:00
parent 8c63184740
commit 0aaaea2bfa
33 changed files with 338 additions and 331 deletions
@@ -304,7 +304,7 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver {
@Override @Override
public void draw(Shape s) { public void draw(Shape s) {
canvasGraphics.draw(s); canvasGraphics.draw(s);
if (drawingComponent && trackingAllowed) { if (drawingComponent && (trackingAllowed || trackingContinuityAllowed)) {
appendShapeOutline(s); appendShapeOutline(s);
} }
} }
@@ -378,7 +378,9 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver {
@Override @Override
public void fill(Shape s) { public void fill(Shape s) {
canvasGraphics.fill(s); canvasGraphics.fill(s);
appendShape(s); if (drawingComponent && (trackingAllowed || trackingContinuityAllowed)) {
appendShape(s);
}
} }
@Override @Override
Binary file not shown.
@@ -23,7 +23,6 @@ package org.diylc.components;
import java.awt.Color; import java.awt.Color;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Point;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
@@ -78,7 +77,7 @@ public abstract class AbstractSchematicLeadedSymbol<T> extends AbstractLeadedCom
double y = (point1.getY() + point2.getY()) / 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 theta = Math.atan2(point2.getY() - point1.getY(), point2.getX() - point2.getX()) - Math.PI / 2;
double r = width.convertToPixels() / 2 + LABEL_FONT.getSize() / 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)); return new Point2D.Double(x + Math.cos(theta) * r, y + Math.sin(theta) * r);
} }
@EditableProperty(name = "Label Position") @EditableProperty(name = "Label Position")
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
@@ -57,7 +56,7 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0), protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0),
new Point2D.Double(DEFAULT_WIDTH.convertToPixels(), DEFAULT_HEIGHT.convertToPixels())}; new Point2D.Double(DEFAULT_WIDTH.convertToPixels(), DEFAULT_HEIGHT.convertToPixels())};
protected Point2D firstPoint = new Point2D.Double(); protected Point2D firstPoint = new Point2D.Double();
protected Point2D secondPoint = new Point.Double(); protected Point2D secondPoint = new Point2D.Double();
protected Color boardColor = BOARD_COLOR; protected Color boardColor = BOARD_COLOR;
protected Color borderColor = BORDER_COLOR; protected Color borderColor = BORDER_COLOR;
@@ -340,8 +339,8 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
@Override @Override
public Rectangle2D getCachingBounds() { public Rectangle2D getCachingBounds() {
Point2D finalSecondPoint = getFinalSecondPoint(); Point2D finalSecondPoint = getFinalSecondPoint();
return new Rectangle2D.Double(Math.min(firstPoint.getX(), finalSecondPoint.getX()), Math.min(firstPoint.getY(), finalSecondPoint.getY()), return new Rectangle2D.Double(Math.min(firstPoint.getX(), finalSecondPoint.getX()) - 2, Math.min(firstPoint.getY(), finalSecondPoint.getY()) - 2,
Math.abs(finalSecondPoint.getX() - firstPoint.getX()) + 2, Math.abs(finalSecondPoint.getY() - firstPoint.getY()) + 2); Math.abs(finalSecondPoint.getX() - firstPoint.getX()) + 4, Math.abs(finalSecondPoint.getY() - firstPoint.getY()) + 4);
} }
public static enum CoordinateType { public static enum CoordinateType {
@@ -25,10 +25,11 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import org.diylc.awt.StringUtils; import org.diylc.awt.StringUtils;
import org.diylc.common.HorizontalAlignment; import org.diylc.common.HorizontalAlignment;
@@ -72,7 +73,7 @@ public class Breadboard extends AbstractComponent<Void> {
public static Size HOLE_SIZE = new Size(1.5, SizeUnit.mm); public static Size HOLE_SIZE = new Size(1.5, SizeUnit.mm);
public static Size HOLE_ARC = new Size(1d, SizeUnit.mm); public static Size HOLE_ARC = new Size(1d, SizeUnit.mm);
protected Point point = new Point(0, 0); protected Point2D point = new Point2D.Double(0, 0);
protected BreadboardSize breadboardSize; protected BreadboardSize breadboardSize;
protected PowerStripPosition powerStripPosition; protected PowerStripPosition powerStripPosition;
@@ -100,7 +101,7 @@ public class Breadboard extends AbstractComponent<Void> {
break; break;
} }
if (theta != 0) { if (theta != 0) {
g2d.rotate(theta, point.x, point.y); g2d.rotate(theta, point.getX(), point.getY());
} }
int bodyArc = (int) BODY_ARC.convertToPixels(); int bodyArc = (int) BODY_ARC.convertToPixels();
@@ -109,27 +110,28 @@ public class Breadboard extends AbstractComponent<Void> {
// draw body // draw body
g2d.setColor(FILL_COLOR); g2d.setColor(FILL_COLOR);
int width = (int) (23 * project.getGridSpacing().convertToPixels()); int width = (int) (23 * SPACING.convertToPixels());
int height = (int) ((holeCount + 1) * project.getGridSpacing().convertToPixels()); int height = (int) ((holeCount + 1) * SPACING.convertToPixels());
g2d.fillRoundRect(point.x, point.y, width, height, bodyArc, bodyArc); Shape rect = new RoundRectangle2D.Double(point.getX(), point.getY(), width, height, bodyArc, bodyArc);
g2d.fill(rect);
g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: BORDER_COLOR); : BORDER_COLOR);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.drawRoundRect(point.x, point.y, width, height, bodyArc, bodyArc); g2d.draw(rect);
drawingObserver.stopTracking(); drawingObserver.stopTracking();
// draw lines // draw lines
g2d.setColor(PLUS_COLOR); g2d.setColor(PLUS_COLOR);
g2d.drawLine((int) (point.x + spacing), (int) (point.y + spacing), (int) (point.x + spacing), g2d.drawLine((int) (point.getX() + spacing), (int) (point.getY() + spacing), (int) (point.getX() + spacing),
(int) (point.y + holeCount * spacing)); (int) (point.getY() + holeCount * spacing));
g2d.drawLine((int) (point.x + 19 * spacing), (int) (point.y + spacing), (int) (point.x + 19 * spacing), g2d.drawLine((int) (point.getX() + 19 * spacing), (int) (point.getY() + spacing), (int) (point.getX() + 19 * spacing),
(int) (point.y + holeCount * spacing)); (int) (point.getY() + holeCount * spacing));
g2d.setColor(MINUS_COLOR); g2d.setColor(MINUS_COLOR);
g2d.drawLine((int) (point.x + 4 * spacing), (int) (point.y + spacing), (int) (point.x + 4 * spacing), g2d.drawLine((int) (point.getX() + 4 * spacing), (int) (point.getY() + spacing), (int) (point.getX() + 4 * spacing),
(int) (point.y + holeCount * spacing)); (int) (point.getY() + holeCount * spacing));
g2d.drawLine((int) (point.x + 22 * spacing), (int) (point.y + spacing), (int) (point.x + 22 * spacing), g2d.drawLine((int) (point.getX() + 22 * spacing), (int) (point.getY() + spacing), (int) (point.getX() + 22 * spacing),
(int) (point.y + holeCount * spacing)); (int) (point.getY() + holeCount * spacing));
int holeSize = getClosestOdd(HOLE_SIZE.convertToPixels()); int holeSize = getClosestOdd(HOLE_SIZE.convertToPixels());
int holeArc = (int) HOLE_ARC.convertToPixels(); int holeArc = (int) HOLE_ARC.convertToPixels();
@@ -145,15 +147,15 @@ public class Breadboard extends AbstractComponent<Void> {
g2d.setColor(COORDINATE_COLOR); g2d.setColor(COORDINATE_COLOR);
int coordinateX; int coordinateX;
if (section == 0) { if (section == 0) {
coordinateX = (int) (point.x + offset + 5.5 * spacing); coordinateX = (int) (point.getX() + offset + 5.5 * spacing);
} else { } else {
coordinateX = (int) (point.x + offset + 10.5 * spacing); coordinateX = (int) (point.getX() + offset + 10.5 * spacing);
} }
StringUtils.drawCenteredText(g2d, String.valueOf(y + 1), coordinateX, (int) (point.y + (y + 1) * spacing), StringUtils.drawCenteredText(g2d, String.valueOf(y + 1), coordinateX, (int) (point.getY() + (y + 1) * spacing),
section == 0 ? HorizontalAlignment.RIGHT : HorizontalAlignment.LEFT, VerticalAlignment.CENTER); section == 0 ? HorizontalAlignment.RIGHT : HorizontalAlignment.LEFT, VerticalAlignment.CENTER);
for (int x = 0; x < 5; x++) { for (int x = 0; x < 5; x++) {
int holeX = (int) (point.x + offset + (x + 6) * spacing); int holeX = (int) (point.getX() + offset + (x + 6) * spacing);
int holeY = (int) (point.y + (y + 1) * spacing); int holeY = (int) (point.getY() + (y + 1) * spacing);
g2d.setColor(HOLE_COLOR); g2d.setColor(HOLE_COLOR);
g2d.fillRoundRect(holeX - holeSize / 2, holeY - holeSize / 2, holeSize, holeSize, holeArc, holeArc); g2d.fillRoundRect(holeX - holeSize / 2, holeY - holeSize / 2, holeSize, holeSize, holeArc, holeArc);
g2d.setColor(BORDER_COLOR); g2d.setColor(BORDER_COLOR);
@@ -162,9 +164,9 @@ public class Breadboard extends AbstractComponent<Void> {
// Draw horizontal labels // Draw horizontal labels
if (y == 0) { if (y == 0) {
g2d.setColor(COORDINATE_COLOR); g2d.setColor(COORDINATE_COLOR);
StringUtils.drawCenteredText(g2d, new String(new byte[] {(byte) (a + x + 5 * section)}), holeX, (int) (point.y + COORDINATE_FONT_SIZE), StringUtils.drawCenteredText(g2d, new String(new byte[] {(byte) (a + x + 5 * section)}), holeX, (int) (point.getY() + COORDINATE_FONT_SIZE),
HorizontalAlignment.CENTER, VerticalAlignment.TOP); HorizontalAlignment.CENTER, VerticalAlignment.TOP);
StringUtils.drawCenteredText(g2d, new String(new byte[] {(byte) (a + x + 5 * section)}), holeX, (int) (point.y StringUtils.drawCenteredText(g2d, new String(new byte[] {(byte) (a + x + 5 * section)}), holeX, (int) (point.getY()
+ spacing * 31 - COORDINATE_FONT_SIZE / 2), HorizontalAlignment.CENTER, VerticalAlignment.TOP); + spacing * 31 - COORDINATE_FONT_SIZE / 2), HorizontalAlignment.CENTER, VerticalAlignment.TOP);
} }
} }
@@ -184,8 +186,8 @@ public class Breadboard extends AbstractComponent<Void> {
for (int x = 0; x < 2; x++) { for (int x = 0; x < 2; x++) {
if ((y + 1) % 6 == 0) if ((y + 1) % 6 == 0)
continue; continue;
int holeX = (int) (point.x + offset + (x + 2) * spacing); int holeX = (int) (point.getX() + offset + (x + 2) * spacing);
int holeY = (int) (point.y + (y + 1 + powerOffset) * spacing); int holeY = (int) (point.getY() + (y + 1 + powerOffset) * spacing);
g2d.setColor(HOLE_COLOR); g2d.setColor(HOLE_COLOR);
g2d.fillRoundRect(holeX - holeSize / 2, holeY - holeSize / 2, holeSize, holeSize, holeArc, holeArc); g2d.fillRoundRect(holeX - holeSize / 2, holeY - holeSize / 2, holeSize, holeSize, holeArc, holeArc);
g2d.setColor(BORDER_COLOR); g2d.setColor(BORDER_COLOR);
@@ -202,9 +204,9 @@ public class Breadboard extends AbstractComponent<Void> {
for (int section = 0; section <= 1; section++) { for (int section = 0; section <= 1; section++) {
double offset = section * 18 * spacing; double offset = section * 18 * spacing;
for (int x = 0; x < 2; x++) { for (int x = 0; x < 2; x++) {
int holeX = (int) (point.x + offset + (x + 2) * spacing); int holeX = (int) (point.getX() + offset + (x + 2) * spacing);
int holeY1 = (int) (point.y + (1 + powerOffset) * spacing); int holeY1 = (int) (point.getY() + (1 + powerOffset) * spacing);
int holeY2 = (int) (point.y + (psHoleCount -1 + powerOffset) * spacing); int holeY2 = (int) (point.getY() + (psHoleCount -1 + powerOffset) * spacing);
g2d.setColor(HOLE_COLOR); g2d.setColor(HOLE_COLOR);
g2d.fillRoundRect(holeX - holeSize / 2, holeY1 - holeSize / 2, holeSize, holeSize + holeY2 - holeY1, holeArc, holeArc); g2d.fillRoundRect(holeX - holeSize / 2, holeY1 - holeSize / 2, holeSize, holeSize + holeY2 - holeY1, holeArc, holeArc);
} }
@@ -217,16 +219,16 @@ public class Breadboard extends AbstractComponent<Void> {
g2d.setColor(COORDINATE_COLOR); g2d.setColor(COORDINATE_COLOR);
int coordinateX; int coordinateX;
if (section == 0) { if (section == 0) {
coordinateX = (int) (point.x + offset + 5.5 * spacing); coordinateX = (int) (point.getX() + offset + 5.5 * spacing);
} else { } else {
coordinateX = (int) (point.x + offset + 10.5 * spacing); coordinateX = (int) (point.getX() + offset + 10.5 * spacing);
} }
StringUtils.drawCenteredText(g2d, String.valueOf(y + 1), coordinateX, (int) (point.y + (y + 1) * spacing), StringUtils.drawCenteredText(g2d, String.valueOf(y + 1), coordinateX, (int) (point.getY() + (y + 1) * spacing),
section == 0 ? HorizontalAlignment.RIGHT : HorizontalAlignment.LEFT, VerticalAlignment.CENTER); section == 0 ? HorizontalAlignment.RIGHT : HorizontalAlignment.LEFT, VerticalAlignment.CENTER);
// for (int x = 0; x < 5; x++) { // for (int x = 0; x < 5; x++) {
int holeX1 = (int) (point.x + offset + 6 * spacing); int holeX1 = (int) (point.getX() + offset + 6 * spacing);
int holeX2 = (int) (point.x + offset + 10 * spacing); int holeX2 = (int) (point.getX() + offset + 10 * spacing);
int holeY = (int) (point.y + (y + 1) * spacing); int holeY = (int) (point.getY() + (y + 1) * spacing);
g2d.setColor(HOLE_COLOR); g2d.setColor(HOLE_COLOR);
g2d.fillRoundRect(holeX1 - holeSize / 2, holeY - holeSize / 2, holeSize + holeX2 - holeX1, holeSize, holeArc, holeArc); g2d.fillRoundRect(holeX1 - holeSize / 2, holeY - holeSize / 2, holeSize + holeX2 - holeX1, holeSize, holeArc, holeArc);
// } // }
@@ -324,7 +326,7 @@ public class Breadboard extends AbstractComponent<Void> {
@SuppressWarnings("incomplete-switch") @SuppressWarnings("incomplete-switch")
@Override @Override
public Point getControlPoint(int index) { public Point2D getControlPoint(int index) {
if (index == 0) if (index == 0)
return point; return point;
// create a synthetic second control point for clipping check and to make sure that we cannot drag the right side of the board off the screen // create a synthetic second control point for clipping check and to make sure that we cannot drag the right side of the board off the screen
@@ -343,9 +345,9 @@ public class Breadboard extends AbstractComponent<Void> {
theta = Math.PI * 3 / 2; theta = Math.PI * 3 / 2;
break; break;
} }
Point secondPoint = new Point((int) (point.x + 23 * spacing), (int) (point.y + (holeCount + 1) * spacing)); Point2D secondPoint = new Point2D.Double(point.getX() + 23 * spacing, point.getY() + (holeCount + 1) * spacing);
if (theta != 0) { if (theta != 0) {
AffineTransform tx = AffineTransform.getRotateInstance(theta, point.x, point.y); AffineTransform tx = AffineTransform.getRotateInstance(theta, point.getX(), point.getY());
tx.transform(secondPoint, secondPoint); tx.transform(secondPoint, secondPoint);
} }
return secondPoint; return secondPoint;
@@ -382,9 +384,9 @@ public class Breadboard extends AbstractComponent<Void> {
@Override @Override
public Rectangle2D getCachingBounds() { public Rectangle2D getCachingBounds() {
Point finalSecondPoint = getControlPoint(1); Point2D finalSecondPoint = getControlPoint(1);
return new Rectangle2D.Double(Math.min(point.x, finalSecondPoint.x), Math.min(point.y, finalSecondPoint.y), return new Rectangle2D.Double(Math.min(point.getX(), finalSecondPoint.getX()) - 2, Math.min(point.getY(), finalSecondPoint.getY()) - 2,
Math.abs(finalSecondPoint.x - point.x) + 2, Math.abs(finalSecondPoint.y - point.y) + 2); Math.abs(finalSecondPoint.getX() - point.getX()) + 4, Math.abs(finalSecondPoint.getY() - point.getY()) + 4);
} }
public enum BreadboardSize { public enum BreadboardSize {
@@ -82,7 +82,7 @@ public class EyeletBoard extends AbstractBoard {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
} }
double x = firstPoint.getX(); double x = firstPoint.getX();
double y = finalSecondPoint.getY(); double y = firstPoint.getY();
int diameter = getClosestOdd((int) EYELET_SIZE.convertToPixels()); int diameter = getClosestOdd((int) EYELET_SIZE.convertToPixels());
int holeDiameter = getClosestOdd((int) HOLE_SIZE.convertToPixels()); int holeDiameter = getClosestOdd((int) HOLE_SIZE.convertToPixels());
int spacing = (int) this.spacing.convertToPixels(); int spacing = (int) this.spacing.convertToPixels();
@@ -23,7 +23,7 @@ package org.diylc.components.boards;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
@@ -80,7 +80,7 @@ public class ProtoBoard extends AbstractComponent<Void> {
private static int[] GAPS = new int[] { 1, 0, 2, 0, 0, 0 }; private static int[] GAPS = new int[] { 1, 0, 2, 0, 0, 0 };
private static int[] SEGMENTS_STARTS = new int[] { 0, 3, 6, 11, 14, 17 }; private static int[] SEGMENTS_STARTS = new int[] { 0, 3, 6, 11, 14, 17 };
protected Point point = new Point(0, 0); protected Point2D point = new Point2D.Double(0, 0);
protected Orientation orientation; protected Orientation orientation;
@@ -113,7 +113,7 @@ public class ProtoBoard extends AbstractComponent<Void> {
break; break;
} }
if (theta != 0) { if (theta != 0) {
g2d.rotate(theta, point.x, point.y); g2d.rotate(theta, point.getX(), point.getY());
} }
double spacing = SPACING.convertToPixels(); double spacing = SPACING.convertToPixels();
@@ -123,14 +123,16 @@ public class ProtoBoard extends AbstractComponent<Void> {
int width = (int) WIDTH_SIZE.convertToPixels(); int width = (int) WIDTH_SIZE.convertToPixels();
int length = (int) LENGTH_SIZE.convertToPixels(); int length = (int) LENGTH_SIZE.convertToPixels();
g2d.fillRect(point.x, point.y, width, length); Shape rect = new Rectangle2D.Double(point.getX(), point.getY(), width, length);
g2d.fill(rect);
g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: boardColor.darker()); : boardColor.darker());
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.drawRect(point.x, point.y, width, length);
drawingObserver.stopTracking(); drawingObserver.stopTracking();
g2d.draw(rect);
int padSize = getClosestOdd(PAD_SIZE.convertToPixels()); int padSize = getClosestOdd(PAD_SIZE.convertToPixels());
int holeSize = getClosestOdd(padSize / 3); int holeSize = getClosestOdd(padSize / 3);
@@ -148,10 +150,10 @@ public class ProtoBoard extends AbstractComponent<Void> {
for (int y = 0; y < ROW_COUNT; y++) { for (int y = 0; y < ROW_COUNT; y++) {
for (int segment = 0; segment < SEGMENTS.length; segment++) { for (int segment = 0; segment < SEGMENTS.length; segment++) {
drawingObserver.setContinuityMarker("SEGMENT=" + segment + ";ROW=" + y); drawingObserver.setContinuityMarker("SEGMENT=" + segment + ";ROW=" + y);
g2d.drawLine((int) (point.x + (xOffset + SEGMENTS_STARTS[segment]) * spacing), g2d.drawLine((int) (point.getX() + (xOffset + SEGMENTS_STARTS[segment]) * spacing),
(int) (point.y + (yOffset + y) * spacing), (int) (point.getY() + (yOffset + y) * spacing),
(int) (point.x + (xOffset + SEGMENTS_STARTS[segment] + SEGMENTS[segment] - 1) * spacing), (int) (point.getX() + (xOffset + SEGMENTS_STARTS[segment] + SEGMENTS[segment] - 1) * spacing),
(int) (point.y + (yOffset + y) * spacing)); (int) (point.getY() + (yOffset + y) * spacing));
} }
} }
drawingObserver.setContinuityMarker(null); drawingObserver.setContinuityMarker(null);
@@ -161,62 +163,62 @@ public class ProtoBoard extends AbstractComponent<Void> {
// draw central mini pad connectors, top row // draw central mini pad connectors, top row
for (int y = 0; y < ROW_COUNT; y++) { for (int y = 0; y < ROW_COUNT; y++) {
// top row // top row
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3]) * spacing), (int) (point.y + (yOffset + y - 0.25d) * spacing + 1), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3]) * spacing), (int) (point.getY() + (yOffset + y - 0.25d) * spacing + 1),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.y + (yOffset + y - 0.25d) * spacing + 1)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.getY() + (yOffset + y - 0.25d) * spacing + 1));
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3] + 3) * spacing), (int) (point.y + (yOffset + y - 0.25d) * spacing + 1), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 3) * spacing), (int) (point.getY() + (yOffset + y - 0.25d) * spacing + 1),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.y + (yOffset + y - 0.25d) * spacing + 1)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.getY() + (yOffset + y - 0.25d) * spacing + 1));
} }
g2d.setColor(undersideTraceColor); g2d.setColor(undersideTraceColor);
// bottom row. // bottom row.
for (int y = 0; y < ROW_COUNT; y++) { for (int y = 0; y < ROW_COUNT; y++) {
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3]) * spacing), (int) (point.y + (yOffset + y + 0.25d) * spacing + 1), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3]) * spacing), (int) (point.getY() + (yOffset + y + 0.25d) * spacing + 1),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1) * spacing), (int) (point.y + (yOffset + y + 0.25d) * spacing + 1)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1) * spacing), (int) (point.getY() + (yOffset + y + 0.25d) * spacing + 1));
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3] + 3) * spacing), (int) (point.y + (yOffset + y + 0.25d) * spacing + 1), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 3) * spacing), (int) (point.getY() + (yOffset + y + 0.25d) * spacing + 1),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 2) * spacing), (int) (point.y + (yOffset + y + 0.25d) * spacing + 1)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2) * spacing), (int) (point.getY() + (yOffset + y + 0.25d) * spacing + 1));
} }
// vertical ground line // vertical ground line
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing), (int) (point.y + (yOffset - 1.5) * spacing), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing), (int) (point.getY() + (yOffset - 1.5) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing), (int) (point.y + (yOffset + ROW_COUNT + 0.5) * spacing)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing), (int) (point.getY() + (yOffset + ROW_COUNT + 0.5) * spacing));
g2d.setColor(traceColor); g2d.setColor(traceColor);
// traces to top and bottom 3 pads // traces to top and bottom 3 pads
g2d.drawPolyline(new int[] { g2d.drawPolyline(new int[] {
(int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.2) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.2) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.2) * spacing)}, (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.2) * spacing)},
new int[] { new int[] {
(int) (point.y + (yOffset - 1.5) * spacing), (int) (point.getY() + (yOffset - 1.5) * spacing),
(int) (point.y + (yOffset - 1) * spacing), (int) (point.getY() + (yOffset - 1) * spacing),
(int) (point.y + (yOffset - 0.3) * spacing)}, 3); (int) (point.getY() + (yOffset - 0.3) * spacing)}, 3);
g2d.drawPolyline(new int[] { g2d.drawPolyline(new int[] {
(int) (point.x + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2.5) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.8) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.8) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.8) * spacing)}, (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.8) * spacing)},
new int[] { new int[] {
(int) (point.y + (yOffset - 1.5) * spacing), (int) (point.getY() + (yOffset - 1.5) * spacing),
(int) (point.y + (yOffset - 1) * spacing), (int) (point.getY() + (yOffset - 1) * spacing),
(int) (point.y + (yOffset - 0.3) * spacing)}, 3); (int) (point.getY() + (yOffset - 0.3) * spacing)}, 3);
g2d.drawPolyline(new int[] { g2d.drawPolyline(new int[] {
(int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.2) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.2) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.2) * spacing)}, (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.2) * spacing)},
new int[] { new int[] {
(int) (point.y + (yOffset + ROW_COUNT + 0.5) * spacing), (int) (point.getY() + (yOffset + ROW_COUNT + 0.5) * spacing),
(int) (point.y + (yOffset + ROW_COUNT) * spacing), (int) (point.getY() + (yOffset + ROW_COUNT) * spacing),
(int) (point.y + (yOffset + ROW_COUNT - 0.35) * spacing)}, 3); (int) (point.getY() + (yOffset + ROW_COUNT - 0.35) * spacing)}, 3);
g2d.drawPolyline(new int[] { g2d.drawPolyline(new int[] {
(int) (point.x + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2.5) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.8) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.8) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.8) * spacing)}, (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.8) * spacing)},
new int[] { new int[] {
(int) (point.y + (yOffset + ROW_COUNT + 0.5) * spacing), (int) (point.getY() + (yOffset + ROW_COUNT + 0.5) * spacing),
(int) (point.y + (yOffset + ROW_COUNT) * spacing), (int) (point.getY() + (yOffset + ROW_COUNT) * spacing),
(int) (point.y + (yOffset + ROW_COUNT - 0.35) * spacing)}, 3); (int) (point.getY() + (yOffset + ROW_COUNT - 0.35) * spacing)}, 3);
drawingObserver.stopTrackingContinuityArea(); drawingObserver.stopTrackingContinuityArea();
@@ -226,12 +228,12 @@ public class ProtoBoard extends AbstractComponent<Void> {
g2d.setColor(traceColor); g2d.setColor(traceColor);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4));
drawingObserver.startTrackingContinuityArea(true); drawingObserver.startTrackingContinuityArea(true);
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.y + 1 * spacing), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.getY() + 1 * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.y + 3.5 * spacing)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.getY() + 3.5 * spacing));
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing + miniPadSize / 2), (int) (point.y + 1 * spacing), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing + miniPadSize / 2), (int) (point.getY() + 1 * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing + miniPadSize / 2), (int) (point.y + 3.5 * spacing)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing + miniPadSize / 2), (int) (point.getY() + 3.5 * spacing));
g2d.drawLine((int) (point.x + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.y + 1 * spacing), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.getY() + 1 * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.y + 3.5 * spacing)); (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.getY() + 3.5 * spacing));
drawingObserver.stopTrackingContinuityArea(); drawingObserver.stopTrackingContinuityArea();
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
@@ -241,11 +243,11 @@ public class ProtoBoard extends AbstractComponent<Void> {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2));
g2d.drawLine((int) (point.x + (1 + SEGMENTS_STARTS[2] - 0.5) * spacing), (int) (point.y + (yOffset - 1) * spacing), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_STARTS[2] - 0.5) * spacing), (int) (point.getY() + (yOffset - 1) * spacing),
(int) (point.x + (1 + SEGMENTS_STARTS[2] - 0.5) * spacing), (int) (point.y + (yOffset + ROW_COUNT -0.5) * spacing)); (int) (point.getX() + (1 + SEGMENTS_STARTS[2] - 0.5) * spacing), (int) (point.getY() + (yOffset + ROW_COUNT -0.5) * spacing));
g2d.drawLine((int) (point.x + (1 + SEGMENTS_STARTS[4] - 0.5) * spacing), (int) (point.y + (yOffset - 1) * spacing), g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_STARTS[4] - 0.5) * spacing), (int) (point.getY() + (yOffset - 1) * spacing),
(int) (point.x + (1 + SEGMENTS_STARTS[4] - 0.5) * spacing), (int) (point.y + (yOffset + ROW_COUNT -0.5) * spacing)); (int) (point.getX() + (1 + SEGMENTS_STARTS[4] - 0.5) * spacing), (int) (point.getY() + (yOffset + ROW_COUNT -0.5) * spacing));
g2d.fillRect((int) (point.x + (1 + SEGMENTS_STARTS[1] - 1.25) * spacing), (int) (point.y + (yOffset - 1) * spacing), g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_STARTS[1] - 1.25) * spacing), (int) (point.getY() + (yOffset - 1) * spacing),
(int)(0.5 * spacing), (int) ((ROW_COUNT + 0.5) * spacing)); (int)(0.5 * spacing), (int) ((ROW_COUNT + 0.5) * spacing));
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
@@ -254,8 +256,8 @@ public class ProtoBoard extends AbstractComponent<Void> {
for (int segment = 0; segment < SEGMENTS.length; segment++) { for (int segment = 0; segment < SEGMENTS.length; segment++) {
for (int y = 0; y < ROW_COUNT; y++) { for (int y = 0; y < ROW_COUNT; y++) {
for (int x = 0; x < SEGMENTS[segment]; x++) { for (int x = 0; x < SEGMENTS[segment]; x++) {
int padX = (int) (point.x + (xOffset + x) * spacing); int padX = (int) (point.getX() + (xOffset + x) * spacing);
int padY = (int) (point.y + (yOffset + y) * spacing); int padY = (int) (point.getY() + (yOffset + y) * spacing);
drawingObserver.startTrackingContinuityArea(true); drawingObserver.startTrackingContinuityArea(true);
drawingObserver.setContinuityMarker("SEGMENT=" + segment + ";ROW=" + y); drawingObserver.setContinuityMarker("SEGMENT=" + segment + ";ROW=" + y);
@@ -282,7 +284,7 @@ public class ProtoBoard extends AbstractComponent<Void> {
// Draw horizontal labels // Draw horizontal labels
if (y == 0) { if (y == 0) {
g2d.setColor(textColor); g2d.setColor(textColor);
StringUtils.drawCenteredText(g2d, Integer.toString(SEGMENTS_SUM[segment] + x + 1), padX, (int) (point.y + (yOffset) * spacing) - padSize / 2 - 2, StringUtils.drawCenteredText(g2d, Integer.toString(SEGMENTS_SUM[segment] + x + 1), padX, (int) (point.getY() + (yOffset) * spacing) - padSize / 2 - 2,
HorizontalAlignment.CENTER, VerticalAlignment.TOP); HorizontalAlignment.CENTER, VerticalAlignment.TOP);
} }
} }
@@ -294,14 +296,14 @@ public class ProtoBoard extends AbstractComponent<Void> {
// Draw top and bottom 3 pads // Draw top and bottom 3 pads
for (int y = 0; y < 2; y++) { for (int y = 0; y < 2; y++) {
g2d.setColor(SEPARATOR_COLOR); g2d.setColor(SEPARATOR_COLOR);
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3]) * spacing), (int) (point.y + (yOffset - 2 + y * (ROW_COUNT + 2)) * spacing), g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3]) * spacing), (int) (point.getY() + (yOffset - 2 + y * (ROW_COUNT + 2)) * spacing),
(int)(3 * spacing), (int)spacing); (int)(3 * spacing), (int)spacing);
drawingObserver.startTrackingContinuityArea(true); drawingObserver.startTrackingContinuityArea(true);
for (int x = 0; x < 3; x++) { for (int x = 0; x < 3; x++) {
int padX = (int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5 + x) * spacing); int padX = (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5 + x) * spacing);
int padY = (int) (point.y + (yOffset - 1.5 + y * (ROW_COUNT + 2)) * spacing); int padY = (int) (point.getY() + (yOffset - 1.5 + y * (ROW_COUNT + 2)) * spacing);
g2d.setColor(padColor); g2d.setColor(padColor);
@@ -332,16 +334,16 @@ public class ProtoBoard extends AbstractComponent<Void> {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2));
g2d.setColor(SCREEN_COLOR); g2d.setColor(SCREEN_COLOR);
g2d.fillRect((int) (point.x + width - 1.5 * spacing), point.y + 2, (int) (spacing), (int) (2 * spacing)); g2d.fill(new Rectangle2D.Double(point.getX() + width - 1.5 * spacing, point.getY() + 2, spacing, 2 * spacing));
g2d.setColor(SEPARATOR_COLOR); g2d.setColor(SEPARATOR_COLOR);
g2d.drawRect((int) (point.x + width - 5.5 * spacing), point.y + 2, (int) (5 * spacing), (int) (2 * spacing)); g2d.draw(new Rectangle2D.Double(point.getX() + width - 5.5 * spacing, point.getY() + 2, 5 * spacing, 2 * spacing));
g2d.drawLine((int) (point.x + width - 5.5 * spacing), (int) (point.y + 2 * spacing) + 8, g2d.drawLine((int) (point.getX() + width - 5.5 * spacing), (int) (point.getY() + 2 * spacing) + 8,
(int) (point.x + width - 5.5 * spacing), (int) (point.y + 3.5 * spacing)); (int) (point.getX() + width - 5.5 * spacing), (int) (point.getY() + 3.5 * spacing));
g2d.drawLine((int) (point.x + width - 4.5 * spacing), (int) (point.y + 2 * spacing + 8), g2d.drawLine((int) (point.getX() + width - 4.5 * spacing), (int) (point.getY() + 2 * spacing + 8),
(int) (point.x + width - 4.5 * spacing), (int) (point.y + 3.5 * spacing)); (int) (point.getX() + width - 4.5 * spacing), (int) (point.getY() + 3.5 * spacing));
g2d.drawLine((int) (point.x + width - 1.5 * spacing), (int) (point.y + 2 * spacing + 8), g2d.drawLine((int) (point.getX() + width - 1.5 * spacing), (int) (point.getY() + 2 * spacing + 8),
(int) (point.x + width - 1.5 * spacing), (int) (point.y + 3.5 * spacing)); (int) (point.getX() + width - 1.5 * spacing), (int) (point.getY() + 3.5 * spacing));
g2d.setColor(traceColor); g2d.setColor(traceColor);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4));
@@ -349,22 +351,22 @@ public class ProtoBoard extends AbstractComponent<Void> {
drawingObserver.startTrackingContinuityArea(true); drawingObserver.startTrackingContinuityArea(true);
// Draw two horizontal traces in the top-right section // Draw two horizontal traces in the top-right section
g2d.drawLine((int) (point.x + width - 4 * spacing), (int) (point.y + 0.5 * spacing), (int) (point.x + width - (2) * spacing), (int) (point.y + 0.5 * spacing)); g2d.drawLine((int) (point.getX() + width - 4 * spacing), (int) (point.getY() + 0.5 * spacing), (int) (point.getX() + width - (2) * spacing), (int) (point.getY() + 0.5 * spacing));
g2d.drawLine((int) (point.x + width - 4 * spacing), (int) (point.y + 1.5 * spacing), (int) (point.x + width - (2) * spacing), (int) (point.y + 1.5 * spacing)); g2d.drawLine((int) (point.getX() + width - 4 * spacing), (int) (point.getY() + 1.5 * spacing), (int) (point.getX() + width - (2) * spacing), (int) (point.getY() + 1.5 * spacing));
// Draw top-right pads // Draw top-right pads
for (int x = 0; x < 6; x++) { for (int x = 0; x < 6; x++) {
int padX = (int) (point.x + width - (x + 1) * spacing); int padX = (int) (point.getX() + width - (x + 1) * spacing);
g2d.setColor(traceColor); g2d.setColor(traceColor);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4));
g2d.drawLine(padX, (int) (point.y + 0.5 * spacing), padX, (int) (point.y + 3 * spacing)); g2d.drawLine(padX, (int) (point.getY() + 0.5 * spacing), padX, (int) (point.getY() + 3 * spacing));
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
for (int y = 0; y < 3; y++) { for (int y = 0; y < 3; y++) {
int padY = (int) (point.y + (y + (y == 2 ? 0.5 : 0) + 0.5) * spacing); int padY = (int) (point.getY() + (y + (y == 2 ? 0.5 : 0) + 0.5) * spacing);
if (x == 0) if (x == 0)
drawingObserver.setContinuityMarker("-12V"); drawingObserver.setContinuityMarker("-12V");
@@ -398,10 +400,10 @@ public class ProtoBoard extends AbstractComponent<Void> {
// draw top mini pads // draw top mini pads
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
for (int y = 0; y < 4; y++) { for (int y = 0; y < 4; y++) {
int padY = (int) (point.y + (0.5 * y + 1) * spacing); int padY = (int) (point.getY() + (0.5 * y + 1) * spacing);
int[] padXs = new int[] {(int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing - miniPadSize - 2), (int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), int[] padXs = new int[] {(int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing - miniPadSize - 2), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing),
(int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize / 2 - 2, (int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize / 2 + 1, (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize / 2 - 2, (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize / 2 + 1,
(int) (point.x + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.x + (1 + SEGMENTS_SUM[3] + 2.5) * spacing + miniPadSize + 2)}; (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2.5) * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 2.5) * spacing + miniPadSize + 2)};
for (int i = 0; i < padXs.length; i++) { for (int i = 0; i < padXs.length; i++) {
int padX = padXs[i]; int padX = padXs[i];
@@ -434,41 +436,41 @@ public class ProtoBoard extends AbstractComponent<Void> {
g2d.setColor(textColor); g2d.setColor(textColor);
// Draw top labels // Draw top labels
StringUtils.drawCenteredText(g2d, "+5V", (int) (point.x + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.y + 1 * spacing) + 1, StringUtils.drawCenteredText(g2d, "+5V", (int) (point.getX() + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.getY() + 1 * spacing) + 1,
HorizontalAlignment.RIGHT, VerticalAlignment.CENTER); HorizontalAlignment.RIGHT, VerticalAlignment.CENTER);
StringUtils.drawCenteredText(g2d, "+12V", (int) (point.x + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.y + 1.5 * spacing) + 1, StringUtils.drawCenteredText(g2d, "+12V", (int) (point.getX() + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.getY() + 1.5 * spacing) + 1,
HorizontalAlignment.RIGHT, VerticalAlignment.CENTER); HorizontalAlignment.RIGHT, VerticalAlignment.CENTER);
StringUtils.drawCenteredText(g2d, "GND", (int) (point.x + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.y + 2 * spacing) + 1, StringUtils.drawCenteredText(g2d, "GND", (int) (point.getX() + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.getY() + 2 * spacing) + 1,
HorizontalAlignment.RIGHT, VerticalAlignment.CENTER); HorizontalAlignment.RIGHT, VerticalAlignment.CENTER);
StringUtils.drawCenteredText(g2d, "-12V", (int) (point.x + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.y + 2.5 * spacing) + 1, StringUtils.drawCenteredText(g2d, "-12V", (int) (point.getX() + (1 + SEGMENTS_SUM[3] - 0.3) * spacing), (int) (point.getY() + 2.5 * spacing) + 1,
HorizontalAlignment.RIGHT, VerticalAlignment.CENTER); HorizontalAlignment.RIGHT, VerticalAlignment.CENTER);
// Draw top-right labels // Draw top-right labels
int labelY = (int) (point.y + 3.8 * spacing) + 1; int labelY = (int) (point.getY() + 3.8 * spacing) + 1;
StringUtils.drawCenteredText(g2d, "+5V", (int) (point.x + width - 6 * spacing), labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP); StringUtils.drawCenteredText(g2d, "+5V", (int) (point.getX() + width - 6 * spacing), labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP);
StringUtils.drawCenteredText(g2d, "+", (int) (point.x + width - 5 * spacing) - 6, labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP); StringUtils.drawCenteredText(g2d, "+", (int) (point.getX() + width - 5 * spacing) - 6, labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP);
StringUtils.drawCenteredText(g2d, " 12V", (int) (point.x + width - 5 * spacing) + 2, labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP); StringUtils.drawCenteredText(g2d, " 12V", (int) (point.getX() + width - 5 * spacing) + 2, labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP);
StringUtils.drawCenteredText(g2d, "GND", (int) (point.x + width - 3 * spacing), labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP); StringUtils.drawCenteredText(g2d, "GND", (int) (point.getX() + width - 3 * spacing), labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP);
StringUtils.drawCenteredText(g2d, "-12V", (int) (point.x + width - 1 * spacing), labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP); StringUtils.drawCenteredText(g2d, "-12V", (int) (point.getX() + width - 1 * spacing), labelY, HorizontalAlignment.CENTER, VerticalAlignment.TOP);
// Draw vertical labels // Draw vertical labels
byte A = "A".getBytes()[0]; byte A = "A".getBytes()[0];
byte a = "a".getBytes()[0]; byte a = "a".getBytes()[0];
for (int y = 0; y < ROW_COUNT; y++) { for (int y = 0; y < ROW_COUNT; y++) {
int padY = (int) (point.y + (yOffset + y) * spacing); int padY = (int) (point.getY() + (yOffset + y) * spacing);
String label; String label;
if (y >= 26) if (y >= 26)
label = new String(new byte[] {(byte) (a + y - 26)}); label = new String(new byte[] {(byte) (a + y - 26)});
else else
label = new String(new byte[] {(byte) (A + y)}); label = new String(new byte[] {(byte) (A + y)});
StringUtils.drawCenteredText(g2d, label, (int) (point.x + spacing * 0.35), padY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); StringUtils.drawCenteredText(g2d, label, (int) (point.getX() + spacing * 0.35), padY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
StringUtils.drawCenteredText(g2d, label, (int) (point.x + width - spacing * 0.35), padY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); StringUtils.drawCenteredText(g2d, label, (int) (point.getX() + width - spacing * 0.35), padY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
} }
g2d.setColor(textColor); g2d.setColor(textColor);
g2d.setFont(LABEL_FONT.deriveFont(COORDINATE_FONT_SIZE + 2)); g2d.setFont(LABEL_FONT.deriveFont(COORDINATE_FONT_SIZE + 2));
StringUtils.drawCenteredText(g2d, "P-0+o by:\nKristian Blåsol 2019", (int) (point.x + width * 0.70d), (int) (point.y + (yOffset + ROW_COUNT + 0.9) * spacing), StringUtils.drawCenteredText(g2d, "P-0+o by:\nKristian Blåsol 2019", (int) (point.getX() + width * 0.70d), (int) (point.getY() + (yOffset + ROW_COUNT + 0.9) * spacing),
HorizontalAlignment.LEFT, VerticalAlignment.TOP); HorizontalAlignment.LEFT, VerticalAlignment.TOP);
// draw central mini pads // draw central mini pads
@@ -478,19 +480,19 @@ public class ProtoBoard extends AbstractComponent<Void> {
drawingObserver.startTrackingContinuityArea(true); drawingObserver.startTrackingContinuityArea(true);
// top row // top row
g2d.fillRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + 1, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + 1, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
drawingObserver.setContinuityMarker("columnA"); drawingObserver.setContinuityMarker("columnA");
g2d.fillRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + miniPadSize + 3, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + miniPadSize + 3, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
drawingObserver.setContinuityMarker("columnC"); drawingObserver.setContinuityMarker("columnC");
g2d.fillRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + 3, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + 3, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
drawingObserver.setContinuityMarker(null); drawingObserver.setContinuityMarker(null);
g2d.fillRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize + 5, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize + 5, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
drawingObserver.stopTrackingContinuityArea(); drawingObserver.stopTrackingContinuityArea();
g2d.setColor(padColor.darker()); g2d.setColor(padColor.darker());
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + 1, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + 1, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + miniPadSize + 3, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + miniPadSize + 3, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
g2d.setColor(undersidePadColor); g2d.setColor(undersidePadColor);
@@ -498,22 +500,22 @@ public class ProtoBoard extends AbstractComponent<Void> {
// bottom row // bottom row
g2d.fillRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize / 2, (int) (point.y + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize); g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize / 2, (int) (point.getY() + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize);
// drawingObserver.setContinuityMarker("columnB"); // drawingObserver.setContinuityMarker("columnB");
g2d.fillRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize * 3 / 2 - 2, (int) (point.y + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize); g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize * 3 / 2 - 2, (int) (point.getY() + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize);
// drawingObserver.setContinuityMarker("null"); // drawingObserver.setContinuityMarker("null");
g2d.fillRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize / 2 + 3, (int) (point.y + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize); g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize / 2 + 3, (int) (point.getY() + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize);
drawingObserver.stopTrackingContinuityArea(); drawingObserver.stopTrackingContinuityArea();
g2d.setColor(undersidePadColor.darker()); g2d.setColor(undersidePadColor.darker());
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + 3, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + 3, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize + 5, (int) (point.y + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize + 5, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize);
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize / 2, (int) (point.y + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize); g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize / 2, (int) (point.getY() + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize);
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize * 3 / 2 - 2, (int) (point.y + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize); g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) - miniPadSize * 3 / 2 - 2, (int) (point.getY() + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize);
g2d.drawRect((int) (point.x + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize / 2 + 3, (int) (point.y + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize); g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing) + miniPadSize / 2 + 3, (int) (point.getY() + (yOffset + y + 0.5d) * spacing - 1 - miniPadSize), miniPadSize, miniPadSize);
} }
} }
@@ -640,7 +642,7 @@ public class ProtoBoard extends AbstractComponent<Void> {
@SuppressWarnings("incomplete-switch") @SuppressWarnings("incomplete-switch")
@Override @Override
public Point getControlPoint(int index) { public Point2D getControlPoint(int index) {
if (index == 0) if (index == 0)
return point; return point;
@@ -661,9 +663,9 @@ public class ProtoBoard extends AbstractComponent<Void> {
} }
int width = (int) WIDTH_SIZE.convertToPixels(); int width = (int) WIDTH_SIZE.convertToPixels();
int length = (int) LENGTH_SIZE.convertToPixels(); int length = (int) LENGTH_SIZE.convertToPixels();
Point secondPoint = new Point((int) (point.x + width), (int) (point.y + length)); Point2D secondPoint = new Point2D.Double(point.getX() + width, point.getY() + length);
if (theta != 0) { if (theta != 0) {
AffineTransform tx = AffineTransform.getRotateInstance(theta, point.x, point.y); AffineTransform tx = AffineTransform.getRotateInstance(theta, point.getX(), point.getY());
tx.transform(secondPoint, secondPoint); tx.transform(secondPoint, secondPoint);
} }
return secondPoint; return secondPoint;
@@ -700,8 +702,8 @@ public class ProtoBoard extends AbstractComponent<Void> {
@Override @Override
public Rectangle2D getCachingBounds() { public Rectangle2D getCachingBounds() {
Point finalSecondPoint = getControlPoint(1); Point2D finalSecondPoint = getControlPoint(1);
return new Rectangle2D.Double(Math.min(point.x, finalSecondPoint.x), Math.min(point.y, finalSecondPoint.y), return new Rectangle2D.Double(Math.min(point.getX(), finalSecondPoint.getX()), Math.min(point.getY(), finalSecondPoint.getY()),
Math.abs(finalSecondPoint.x - point.x) + 2, Math.abs(finalSecondPoint.y - point.y) + 2); Math.abs(finalSecondPoint.getX() - point.getX()) + 2, Math.abs(finalSecondPoint.getY() - point.getY()) + 2);
} }
} }
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
@@ -72,7 +71,7 @@ public class TagStrip extends AbstractTransparentComponent<String> implements IC
private int terminalCount = 7; private int terminalCount = 7;
private static Size BOARD_THICKNESS = new Size(0.05d, SizeUnit.in); private static Size BOARD_THICKNESS = new Size(0.05d, SizeUnit.in);
private Size terminalSpacing = new Size(0.375d, SizeUnit.in); private Size terminalSpacing = new Size(0.375d, SizeUnit.in);
private Point[] controlPoints = new Point[] {new Point(0, 0)}; private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)};
private Color boardColor = BOARD_COLOR; private Color boardColor = BOARD_COLOR;
private TagStripMount mount = TagStripMount.Central; private TagStripMount mount = TagStripMount.Central;
@@ -135,7 +134,7 @@ public class TagStrip extends AbstractTransparentComponent<String> implements IC
} }
@Override @Override
public Point getControlPoint(int index) { public Point2D getControlPoint(int index) {
return controlPoints[index]; return controlPoints[index];
} }
@@ -156,8 +155,8 @@ public class TagStrip extends AbstractTransparentComponent<String> implements IC
} }
private void updateControlPoints() { private void updateControlPoints() {
Point firstPoint = controlPoints[0]; Point2D firstPoint = controlPoints[0];
controlPoints = new Point[getTerminalCount()]; controlPoints = new Point2D[getTerminalCount()];
controlPoints[0] = firstPoint; controlPoints[0] = firstPoint;
int pinSpacing = (int) this.terminalSpacing.convertToPixels(); int pinSpacing = (int) this.terminalSpacing.convertToPixels();
// Update control points. // Update control points.
@@ -184,15 +183,15 @@ public class TagStrip extends AbstractTransparentComponent<String> implements IC
default: default:
throw new RuntimeException("Unexpected orientation: " + orientation); throw new RuntimeException("Unexpected orientation: " + orientation);
} }
controlPoints[i] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); controlPoints[i] = new Point2D.Double(firstPoint.getX() + dx1, firstPoint.getY() + dy1);
} }
} }
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Area[1 + getTerminalCount()]; body = new Area[1 + getTerminalCount()];
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
int width; int width;
int height; int height;
int terminalSpacing = (int) getTerminalSpacing().convertToPixels(); int terminalSpacing = (int) getTerminalSpacing().convertToPixels();
@@ -254,9 +253,9 @@ public class TagStrip extends AbstractTransparentComponent<String> implements IC
body[0] = bodyArea; body[0] = bodyArea;
for (int i = 0; i < getTerminalCount(); i++) { for (int i = 0; i < getTerminalCount(); i++) {
Point p1 = getControlPoint(i); Point2D p1 = getControlPoint(i);
Area terminal = Area terminal =
new Area(new Rectangle2D.Double(p1.x - terminalWidth/ 2, p1.y - terminalHeight / 2, terminalWidth, terminalHeight)); new Area(new Rectangle2D.Double(p1.getX() - terminalWidth/ 2, p1.getY() - terminalHeight / 2, terminalWidth, terminalHeight));
body[1 + i] = terminal; body[1 + i] = terminal;
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
@@ -72,7 +71,7 @@ public class TerminalStrip extends AbstractTransparentComponent<String> implemen
private Size boardWidth = new Size(0.35d, SizeUnit.in); private Size boardWidth = new Size(0.35d, SizeUnit.in);
private Size terminalSpacing = new Size(0.25d, SizeUnit.in); private Size terminalSpacing = new Size(0.25d, SizeUnit.in);
private Size holeSpacing = new Size(0.5d, SizeUnit.in); private Size holeSpacing = new Size(0.5d, SizeUnit.in);
private Point[] controlPoints = new Point[] {new Point(0, 0)}; private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)};
private Color boardColor = BOARD_COLOR; private Color boardColor = BOARD_COLOR;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@Deprecated @Deprecated
@@ -172,7 +171,7 @@ public class TerminalStrip extends AbstractTransparentComponent<String> implemen
} }
@Override @Override
public Point getControlPoint(int index) { public Point2D getControlPoint(int index) {
return controlPoints[index]; return controlPoints[index];
} }
@@ -193,8 +192,8 @@ public class TerminalStrip extends AbstractTransparentComponent<String> implemen
} }
private void updateControlPoints() { private void updateControlPoints() {
Point firstPoint = controlPoints[0]; Point2D firstPoint = controlPoints[0];
controlPoints = new Point[getTerminalCount() * (getCenterHole() ? 3 : 2)]; controlPoints = new Point2D[getTerminalCount() * (getCenterHole() ? 3 : 2)];
controlPoints[0] = firstPoint; controlPoints[0] = firstPoint;
int pinSpacing = (int) this.terminalSpacing.convertToPixels(); int pinSpacing = (int) this.terminalSpacing.convertToPixels();
int rowSpacing = (int) this.holeSpacing.convertToPixels(); int rowSpacing = (int) this.holeSpacing.convertToPixels();
@@ -242,18 +241,18 @@ public class TerminalStrip extends AbstractTransparentComponent<String> implemen
default: default:
throw new RuntimeException("Unexpected orientation: " + orientation); throw new RuntimeException("Unexpected orientation: " + orientation);
} }
controlPoints[i] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); controlPoints[i] = new Point2D.Double(firstPoint.getX() + dx1, firstPoint.getY() + dy1);
controlPoints[i + getTerminalCount()] = new Point(firstPoint.x + dx2, firstPoint.y + dy2); controlPoints[i + getTerminalCount()] = new Point2D.Double(firstPoint.getX() + dx2, firstPoint.getY() + dy2);
if (centerHole) if (centerHole)
controlPoints[i + 2 * getTerminalCount()] = new Point(firstPoint.x + cx, firstPoint.y + cy); controlPoints[i + 2 * getTerminalCount()] = new Point2D.Double(firstPoint.getX() + cx, firstPoint.getY() + cy);
} }
} }
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Area[1 + getTerminalCount()]; body = new Area[1 + getTerminalCount()];
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
int width; int width;
int height; int height;
int holeSize = (int) HOLE_SIZE.convertToPixels(); int holeSize = (int) HOLE_SIZE.convertToPixels();
@@ -318,24 +317,24 @@ public class TerminalStrip extends AbstractTransparentComponent<String> implemen
for (int i = 0; i < getTerminalCount(); i++) { for (int i = 0; i < getTerminalCount(); i++) {
Point p1 = getControlPoint(i); Point2D p1 = getControlPoint(i);
Point p2 = getControlPoint(i + getTerminalCount()); Point2D p2 = getControlPoint(i + getTerminalCount());
if (p2.x < p1.x || p2.y < p1.y) { if (p2.getX() < p1.getX() || p2.getY() < p1.getY()) {
Point p = p1; Point2D p = p1;
p1 = p2; p1 = p2;
p2 = p; p2 = p;
} }
Area terminal = Area terminal =
new Area(new RoundRectangle2D.Double(p1.x - holeSize, p1.y - holeSize, p2.x - p1.x + holeSize * 2, p2.y new Area(new RoundRectangle2D.Double(p1.getX() - holeSize, p1.getY() - holeSize, p2.getX() - p1.getX() + holeSize * 2, p2.getY()
- p1.y + holeSize * 2, holeSize, holeSize)); - p1.getY() + holeSize * 2, holeSize, holeSize));
terminal.subtract(new Area(new Ellipse2D.Double(p1.x - holeSize / 2, p1.y - holeSize / 2, holeSize, holeSize))); terminal.subtract(new Area(new Ellipse2D.Double(p1.getX() - holeSize / 2, p1.getY() - holeSize / 2, holeSize, holeSize)));
terminal.subtract(new Area(new Ellipse2D.Double(p2.x - holeSize / 2, p2.y - holeSize / 2, holeSize, holeSize))); terminal.subtract(new Area(new Ellipse2D.Double(p2.getX() - holeSize / 2, p2.getY() - holeSize / 2, holeSize, holeSize)));
if (centerHole) { if (centerHole) {
Point p3 = getControlPoint(i + 2 * getTerminalCount()); Point2D p3 = getControlPoint(i + 2 * getTerminalCount());
Area centerHole = Area centerHole =
new Area(new Ellipse2D.Double(p3.x - holeSize / 2, p3.y - holeSize / 2, holeSize, holeSize)); new Area(new Ellipse2D.Double(p3.getX() - holeSize / 2, p3.getY() - holeSize / 2, holeSize, holeSize));
terminal.subtract(centerHole); terminal.subtract(centerHole);
bodyArea.subtract(centerHole); bodyArea.subtract(centerHole);
} }
@@ -79,7 +79,7 @@ public class VeroBoard extends AbstractBoard {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
} }
double x = firstPoint.getX(); double x = firstPoint.getX();
double y = finalSecondPoint.getY(); double y = firstPoint.getY();
int stripSize = getClosestOdd((int) STRIP_SIZE.convertToPixels()); int stripSize = getClosestOdd((int) STRIP_SIZE.convertToPixels());
int holeSize = getClosestOdd((int) HOLE_SIZE.convertToPixels()); int holeSize = getClosestOdd((int) HOLE_SIZE.convertToPixels());
int spacing = (int) this.spacing.convertToPixels(); int spacing = (int) this.spacing.convertToPixels();
@@ -21,7 +21,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.util.Arrays; import java.util.Arrays;
@@ -49,9 +48,10 @@ public class PolygonalCutout extends AbstractShape {
super(); super();
this.borderColor = LIGHT_METAL_COLOR.darker(); this.borderColor = LIGHT_METAL_COLOR.darker();
this.controlPoints = this.controlPoints =
new Point[] {new Point(0, 0), new Point(0, (int) DEFAULT_HEIGHT.convertToPixels()), new Point2D[] {new Point2D.Double(0, 0),
new Point((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels()), new Point2D.Double(0, (int) DEFAULT_HEIGHT.convertToPixels()),
new Point((int) DEFAULT_WIDTH.convertToPixels(), 0)}; new Point2D.Double((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels()),
new Point2D.Double((int) DEFAULT_WIDTH.convertToPixels(), 0)};
} }
@Override @Override
@@ -20,7 +20,6 @@ package org.diylc.components.connectivity;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Stroke; import java.awt.Stroke;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.CubicCurve2D; import java.awt.geom.CubicCurve2D;
@@ -278,7 +277,7 @@ public class TwistedWire extends AbstractCurvedComponent<Void> implements IConti
public void recalculate(Path2D path, float thickness, Area firstLeadArea, Area secondLeadArea, boolean stripe) { public void recalculate(Path2D path, float thickness, Area firstLeadArea, Area secondLeadArea, boolean stripe) {
PathIterator iterator = path.getPathIterator(null); PathIterator iterator = path.getPathIterator(null);
float[] coords = new float[6]; float[] coords = new float[6];
Point current = new Point(); Point2D current = new Point2D.Double();
// convert all segments to cubic curves // convert all segments to cubic curves
List<CubicCurve2D> curves = new ArrayList<CubicCurve2D>(); List<CubicCurve2D> curves = new ArrayList<CubicCurve2D>();
@@ -289,18 +288,18 @@ public class TwistedWire extends AbstractCurvedComponent<Void> implements IConti
current.setLocation(coords[0], coords[1]); current.setLocation(coords[0], coords[1]);
break; break;
case PathIterator.SEG_LINETO: case PathIterator.SEG_LINETO:
curves.add(new CubicCurve2D.Double(current.x, current.y, (current.x + coords[0]) / 2, curves.add(new CubicCurve2D.Double(current.getX(), current.getY(), (current.getX() + coords[0]) / 2,
(current.y + coords[1]) / 2, (current.x + coords[0]) / 2, (current.y + coords[1]) / 2, coords[0], (current.getY() + coords[1]) / 2, (current.getX() + coords[0]) / 2, (current.getY() + coords[1]) / 2, coords[0],
coords[1])); coords[1]));
current.setLocation(coords[0], coords[1]); current.setLocation(coords[0], coords[1]);
break; break;
case PathIterator.SEG_QUADTO: case PathIterator.SEG_QUADTO:
curves.add(new CubicCurve2D.Double(current.x, current.y, coords[0], coords[1], coords[0], coords[1], curves.add(new CubicCurve2D.Double(current.getX(), current.getY(), coords[0], coords[1], coords[0], coords[1],
coords[2], coords[3])); coords[2], coords[3]));
current.setLocation(coords[2], coords[3]); current.setLocation(coords[2], coords[3]);
break; break;
case PathIterator.SEG_CUBICTO: case PathIterator.SEG_CUBICTO:
curves.add(new CubicCurve2D.Double(current.x, current.y, coords[0], coords[1], coords[2], coords[3], curves.add(new CubicCurve2D.Double(current.getX(), current.getY(), coords[0], coords[1], coords[2], coords[3],
coords[4], coords[5])); coords[4], coords[5]));
current.setLocation(coords[4], coords[5]); current.setLocation(coords[4], coords[5]);
break; break;
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon; import java.awt.Polygon;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
@@ -67,7 +66,7 @@ public class BatterySnap9V extends AbstractTransparentComponent<String> {
private static Size TERMINAL_BORDER = new Size(0.7d, SizeUnit.mm); private static Size TERMINAL_BORDER = new Size(0.7d, SizeUnit.mm);
private String value = ""; private String value = "";
private Point controlPoint = new Point(0, 0); private Point2D controlPoint = new Point2D.Double(0, 0);
transient Shape[] body; transient Shape[] body;
private Orientation orientation = Orientation.DEFAULT; private Orientation orientation = Orientation.DEFAULT;
private Color color = BODY_COLOR; private Color color = BODY_COLOR;
@@ -117,8 +116,8 @@ public class BatterySnap9V extends AbstractTransparentComponent<String> {
if (body == null) { if (body == null) {
body = new Shape[3]; body = new Shape[3];
int x = controlPoint.x; double x = controlPoint.getX();
int y = controlPoint.y; double y = controlPoint.getY();
int width = (int) WIDTH.convertToPixels(); int width = (int) WIDTH.convertToPixels();
int length = (int) LENGTH.convertToPixels(); int length = (int) LENGTH.convertToPixels();
int totalLength = length + width / 2; int totalLength = length + width / 2;
@@ -135,7 +134,7 @@ public class BatterySnap9V extends AbstractTransparentComponent<String> {
new Area(new Ellipse2D.Double(x + (totalLength - terminalSpacing) / 2 - terminalDiameter / 2, y new Area(new Ellipse2D.Double(x + (totalLength - terminalSpacing) / 2 - terminalDiameter / 2, y
- terminalDiameter / 2, terminalDiameter, terminalDiameter)); - terminalDiameter / 2, terminalDiameter, terminalDiameter));
int centerX = x + (totalLength + terminalSpacing) / 2; double centerX = x + (totalLength + terminalSpacing) / 2;
int[] terminalX = new int[6]; int[] terminalX = new int[6];
int[] terminalY = new int[6]; int[] terminalY = new int[6];
@@ -231,7 +230,7 @@ public class BatterySnap9V extends AbstractTransparentComponent<String> {
} }
@Override @Override
public Point getControlPoint(int index) { public Point2D getControlPoint(int index) {
return controlPoint; return controlPoint;
} }
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Area; import java.awt.geom.Area;
@@ -166,8 +165,8 @@ public class OpenJack1_4 extends AbstractMultiPartComponent<String> {
Point2D tipLabel = new Point2D.Double(controlPoints[0].getX(), (int) (controlPoints[0].getY() + holeToEdge * 1.25)); 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 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); AffineTransform sleeveTransform = AffineTransform.getRotateInstance(getType() == OpenJackType.SWITCHED ? SLEEVE_SWITCHED_THETA : SLEEVE_THETA, controlPoints[0].getX(), centerY);
Point ringOrSwitchLabel = new Point(0, 0); Point2D ringOrSwitchLabel = new Point2D.Double(0, 0);
Point sleeveLabel = new Point(0, 0); Point2D sleeveLabel = new Point2D.Double(0, 0);
ringTransform.transform(tipLabel, ringOrSwitchLabel); ringTransform.transform(tipLabel, ringOrSwitchLabel);
sleeveTransform.transform(tipLabel, sleeveLabel); sleeveTransform.transform(tipLabel, sleeveLabel);
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Area; import java.awt.geom.Area;
@@ -129,7 +128,8 @@ public class PinHeader extends AbstractTransparentComponent<Void> {
for (int i = 0; i < columnCount; i++) for (int i = 0; i < columnCount; i++)
for (int j = 0; j < rowCount; j++) for (int j = 0; j < rowCount; j++)
controlPoints[i + j * columnCount] = new Point((int)Math.round(firstPoint.getX() + j * pinSpacing), (int)Math.round(firstPoint.getY() + i * pinSpacing)); controlPoints[i + j * columnCount] = new Point2D.Double(Math.round(firstPoint.getX() + j * pinSpacing),
Math.round(firstPoint.getY() + i * pinSpacing));
// Apply rotation if necessary // Apply rotation if necessary
double angle = getAngle(); double angle = getAngle();
@@ -26,7 +26,6 @@ import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon; import java.awt.Polygon;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
@@ -86,7 +85,7 @@ public class PotentiometerPanel extends AbstractPotentiometer {
transient protected Area[] body = null; transient protected Area[] body = null;
public PotentiometerPanel() { public PotentiometerPanel() {
controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)};
updateControlPoints(); updateControlPoints();
} }
@@ -22,7 +22,6 @@ import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Area; import java.awt.geom.Area;
@@ -82,7 +81,7 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
protected TrimmerType type = TrimmerType.FLAT_SMALL; protected TrimmerType type = TrimmerType.FLAT_SMALL;
public TrimmerPotentiometer() { public TrimmerPotentiometer() {
controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; controlPoints = new Point2D[] {new Point2D.Double(0, 0), new Point2D.Double(0, 0), new Point2D.Double(0, 0)};
updateControlPoints(); updateControlPoints();
} }
@@ -24,7 +24,6 @@ package org.diylc.components.semiconductors;
import java.awt.Color; import java.awt.Color;
import java.awt.Font; import java.awt.Font;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
@@ -45,7 +44,7 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo
protected String value = ""; protected String value = "";
protected TransistorPinout pinout; protected TransistorPinout pinout;
protected Orientation orientation = Orientation.DEFAULT; protected Orientation orientation = Orientation.DEFAULT;
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; transient protected Area[] body;
protected Color bodyColor; protected Color bodyColor;
@@ -143,7 +142,7 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo
} }
@Override @Override
public Point getControlPoint(int index) { public Point2D getControlPoint(int index) {
return controlPoints[index]; return controlPoints[index];
} }
@@ -257,7 +256,7 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo
if (b.getMaxY() > maxY) if (b.getMaxY() > maxY)
maxY = b.getMaxY(); maxY = b.getMaxY();
} }
for (Point p : controlPoints) { for (Point2D p : controlPoints) {
if (p.getX() < minX) if (p.getX() < minX)
minX = p.getX(); minX = p.getX();
if (p.getX() > maxX) if (p.getX() > maxX)
@@ -284,7 +283,7 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo
int d = 4; // hard-coded int d = 4; // hard-coded
String pinout = p.toPinout(); String pinout = p.toPinout();
for (int i = 0; i < pinout.length(); i++) { for (int i = 0; i < pinout.length(); i++) {
Point point = getControlPoint(i); Point2D point = getControlPoint(i);
int dx = 0; int dx = 0;
int dy = 0; int dy = 0;
HorizontalAlignment ha = HorizontalAlignment.CENTER; HorizontalAlignment ha = HorizontalAlignment.CENTER;
@@ -327,7 +326,7 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo
} }
break; break;
} }
StringUtils.drawCenteredText(g2d, pinout.charAt(i) + "", point.x + dx, point.y + dy, ha, va); StringUtils.drawCenteredText(g2d, pinout.charAt(i) + "", point.getX() + dx, point.getY() + dy, ha, va);
} }
} }
@@ -26,10 +26,11 @@ import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D; import java.awt.geom.RoundRectangle2D;
@@ -82,8 +83,8 @@ public class TransistorTO1 extends AbstractTransistorPackage {
protected void updateControlPoints() { protected void updateControlPoints() {
int pinSpacing = (int) getPinSpacing().convertToPixels(); int pinSpacing = (int) getPinSpacing().convertToPixels();
// Update control points. // Update control points.
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
controlPoints[1].setLocation(x - (folded ? 0 : pinSpacing), y + pinSpacing); controlPoints[1].setLocation(x - (folded ? 0 : pinSpacing), y + pinSpacing);
@@ -108,8 +109,8 @@ public class TransistorTO1 extends AbstractTransistorPackage {
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
int x = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x) / 3; double x = (controlPoints[0].getX() + controlPoints[1].getX() + controlPoints[2].getX()) / 3;
int y = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y) / 3; double y = (controlPoints[0].getY() + controlPoints[1].getY() + controlPoints[2].getY()) / 3;
int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels()); int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels());
int bodyLength = getClosestOdd(BODY_LENGTH.convertToPixels()); int bodyLength = getClosestOdd(BODY_LENGTH.convertToPixels());
int edgeRadius = (int) EDGE_RADIUS.convertToPixels(); int edgeRadius = (int) EDGE_RADIUS.convertToPixels();
@@ -167,13 +168,14 @@ public class TransistorTO1 extends AbstractTransistorPackage {
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f));
for (Point point : controlPoints) { for (Point2D point : controlPoints) {
Shape shape = new Ellipse2D.Double(point.getX() - pinSize / 2, point.getY() - pinSize / 2, pinSize, pinSize);
if (!outlineMode) { if (!outlineMode) {
g2d.setColor(PIN_COLOR); g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); g2d.fill(shape);
} }
g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); g2d.draw(shape);
} }
Area mainArea = getBody()[0]; Area mainArea = getBody()[0];
@@ -229,8 +231,8 @@ public class TransistorTO1 extends AbstractTransistorPackage {
int textWidth = (int) (rect.getWidth()); int textWidth = (int) (rect.getWidth());
// Center text horizontally and vertically // Center text horizontally and vertically
Rectangle bounds = mainArea.getBounds(); Rectangle bounds = mainArea.getBounds();
int x = bounds.x + (bounds.width - textWidth) / 2; int x = (int) (bounds.getX() + (bounds.width - textWidth) / 2);
int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); int y = (int) (bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent());
g2d.drawString(label, x, y); g2d.drawString(label, x, y);
} }
} }
@@ -26,11 +26,12 @@ import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.ConfigurationManager;
@@ -86,8 +87,8 @@ public class TransistorTO126 extends AbstractTransistorPackage {
protected void updateControlPoints() { protected void updateControlPoints() {
int pinSpacing = (int) PIN_SPACING.convertToPixels(); int pinSpacing = (int) PIN_SPACING.convertToPixels();
// Update control points. // Update control points.
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
controlPoints[1].setLocation(x, y + pinSpacing); controlPoints[1].setLocation(x, y + pinSpacing);
@@ -113,8 +114,8 @@ public class TransistorTO126 extends AbstractTransistorPackage {
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Area[2]; body = new Area[2];
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
int pinSpacing = (int) PIN_SPACING.convertToPixels(); int pinSpacing = (int) PIN_SPACING.convertToPixels();
int bodyWidth = getClosestOdd(BODY_WIDTH.convertToPixels()); int bodyWidth = getClosestOdd(BODY_WIDTH.convertToPixels());
int bodyThickness = getClosestOdd(BODY_THICKNESS.convertToPixels()); int bodyThickness = getClosestOdd(BODY_THICKNESS.convertToPixels());
@@ -203,51 +204,57 @@ public class TransistorTO126 extends AbstractTransistorPackage {
finalPinColor = METAL_COLOR; finalPinColor = METAL_COLOR;
finalPinBorderColor = METAL_COLOR.darker(); finalPinBorderColor = METAL_COLOR.darker();
} }
for (Point point : controlPoints) { Line2D line;
for (Point2D point : controlPoints) {
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); line = new Line2D.Double(point.getX(), point.getY(), point.getX() + leadLength - leadThickness / 2, point.getY());
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); g2d.draw(line);
break; break;
case _90: case _90:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); line = new Line2D.Double(point.getX(), point.getY(), point.getX(), point.getY() + leadLength - leadThickness / 2);
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); g2d.draw(line);
break; break;
case _180: case _180:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); line = new Line2D.Double(point.getX(), point.getY(), point.getX() - leadLength - leadThickness / 2, point.getY());
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); g2d.draw(line);
break; break;
case _270: case _270:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); line = new Line2D.Double(point.getX(), point.getY(), point.getX(), point.getY() - leadLength);
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); g2d.draw(line);
break; break;
} }
} }
} }
} else { } else {
if (!outlineMode) { if (!outlineMode) {
for (Point point : controlPoints) { for (Point2D point : controlPoints) {
g2d.setColor(PIN_COLOR); g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); Shape pin = new Ellipse2D.Double(point.getX() - pinSize / 2, point.getY() - pinSize / 2, pinSize, pinSize);
g2d.fill(pin);
g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); g2d.draw(pin);
} }
} }
} }
@@ -312,8 +319,8 @@ public class TransistorTO126 extends AbstractTransistorPackage {
int textWidth = (int) (rect.getWidth()); int textWidth = (int) (rect.getWidth());
// Center text horizontally and vertically // Center text horizontally and vertically
Rectangle bounds = mainArea.getBounds(); Rectangle bounds = mainArea.getBounds();
int x = bounds.x + (bounds.width - textWidth) / 2; int x = (int) (bounds.getX() + (bounds.width - textWidth) / 2);
int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); int y = (int) (bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent());
g2d.drawString(label, x, y); g2d.drawString(label, x, y);
} }
} }
@@ -26,11 +26,12 @@ import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.ConfigurationManager;
@@ -91,8 +92,8 @@ public class TransistorTO220 extends AbstractTransistorPackage {
protected void updateControlPoints() { protected void updateControlPoints() {
int pinSpacing = (int) PIN_SPACING.convertToPixels(); int pinSpacing = (int) PIN_SPACING.convertToPixels();
// Update control points. // Update control points.
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
controlPoints[1].setLocation(x, y + pinSpacing); controlPoints[1].setLocation(x, y + pinSpacing);
@@ -118,8 +119,8 @@ public class TransistorTO220 extends AbstractTransistorPackage {
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Area[2]; body = new Area[2];
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
int pinSpacing = (int) PIN_SPACING.convertToPixels(); int pinSpacing = (int) PIN_SPACING.convertToPixels();
int bodyWidth = getClosestOdd(BODY_WIDTH.convertToPixels()); int bodyWidth = getClosestOdd(BODY_WIDTH.convertToPixels());
int bodyThickness = getClosestOdd(BODY_THICKNESS.convertToPixels()); int bodyThickness = getClosestOdd(BODY_THICKNESS.convertToPixels());
@@ -230,51 +231,57 @@ public class TransistorTO220 extends AbstractTransistorPackage {
finalPinColor = METAL_COLOR; finalPinColor = METAL_COLOR;
finalPinBorderColor = METAL_COLOR.darker(); finalPinBorderColor = METAL_COLOR.darker();
} }
for (Point point : controlPoints) { Line2D line;
for (Point2D point : controlPoints) {
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); line = new Line2D.Double(point.getX(), point.getY(), point.getX() + leadLength - leadThickness / 2, point.getY());
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); g2d.draw(line);
break; break;
case _90: case _90:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); line = new Line2D.Double(point.getX(), point.getY(), point.getX(), point.getY() + leadLength - leadThickness / 2);
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); g2d.draw(line);
break; break;
case _180: case _180:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); line = new Line2D.Double(point.getX(), point.getY(), point.getX() - leadLength - leadThickness / 2, point.getY());
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); g2d.draw(line);
break; break;
case _270: case _270:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); line = new Line2D.Double(point.getX(), point.getY(), point.getX(), point.getY() - leadLength);
g2d.draw(line);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); g2d.draw(line);
break; break;
} }
} }
} }
} else { } else {
if (!outlineMode) { if (!outlineMode) {
for (Point point : controlPoints) { for (Point2D point : controlPoints) {
g2d.setColor(PIN_COLOR); g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); Shape pin = new Ellipse2D.Double(point.getX() - pinSize / 2, point.getY() - pinSize / 2, pinSize, pinSize);
g2d.fill(pin);
g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); g2d.draw(pin);
} }
} }
} }
@@ -349,8 +356,8 @@ public class TransistorTO220 extends AbstractTransistorPackage {
int textWidth = (int) (rect.getWidth()); int textWidth = (int) (rect.getWidth());
// Center text horizontally and vertically // Center text horizontally and vertically
Rectangle bounds = mainArea.getBounds(); Rectangle bounds = mainArea.getBounds();
int x = bounds.x + (bounds.width - textWidth) / 2; int x = (int) (bounds.getX() + (bounds.width - textWidth) / 2);
int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); int y = (int) (bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent());
g2d.drawString(label, x, y); g2d.drawString(label, x, y);
} }
} }
@@ -26,11 +26,12 @@ import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.RenderingHints; import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.ConfigurationManager;
@@ -95,8 +96,8 @@ public class TransistorTO92 extends AbstractTransistorPackage {
protected void updateControlPoints() { protected void updateControlPoints() {
int pinSpacing = (int) getPinSpacing().convertToPixels(); int pinSpacing = (int) getPinSpacing().convertToPixels();
// Update control points. // Update control points.
int x = controlPoints[0].x; double x = controlPoints[0].getX();
int y = controlPoints[0].y; double y = controlPoints[0].getY();
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
controlPoints[1].setLocation(x, y + pinSpacing); controlPoints[1].setLocation(x, y + pinSpacing);
@@ -121,8 +122,8 @@ public class TransistorTO92 extends AbstractTransistorPackage {
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
int x = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x) / 3; double x = (controlPoints[0].getX() + controlPoints[1].getX() + controlPoints[2].getX()) / 3;
int y = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y) / 3; double y = (controlPoints[0].getY() + controlPoints[1].getY() + controlPoints[2].getY()) / 3;
int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels()); int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels());
Area newBody = null; Area newBody = null;
@@ -190,11 +191,12 @@ public class TransistorTO92 extends AbstractTransistorPackage {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f));
if (!outlineMode) { if (!outlineMode) {
for (Point point : controlPoints) { for (Point2D point : controlPoints) {
Shape pin = new Ellipse2D.Double(point.getX() - pinSize / 2, point.getY() - pinSize / 2, pinSize, pinSize);
g2d.setColor(PIN_COLOR); g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); g2d.fill(pin);
g2d.setColor(PIN_BORDER_COLOR); g2d.setColor(PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); g2d.draw(pin);
} }
} }
@@ -254,8 +256,8 @@ public class TransistorTO92 extends AbstractTransistorPackage {
int textWidth = (int) (rect.getWidth()); int textWidth = (int) (rect.getWidth());
// Center text horizontally and vertically // Center text horizontally and vertically
Rectangle bounds = mainArea.getBounds(); Rectangle bounds = mainArea.getBounds();
int x = bounds.x + (bounds.width - textWidth) / 2; int x = (int) (bounds.getX() + (bounds.width - textWidth) / 2);
int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); int y = (int) (bounds.getY() + (bounds.height - textHeight) / 2 + fontMetrics.getAscent());
g2d.drawString(label, x, y); g2d.drawString(label, x, y);
} }
} }
@@ -22,7 +22,6 @@
package org.diylc.components.shapes; package org.diylc.components.shapes;
import java.awt.Color; import java.awt.Color;
import java.awt.Point;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractTransparentComponent;
@@ -42,10 +41,10 @@ public abstract class AbstractShape extends AbstractTransparentComponent<Void> {
public static Size DEFAULT_HEIGHT = new Size(0.4d, SizeUnit.in); public static Size DEFAULT_HEIGHT = new Size(0.4d, SizeUnit.in);
protected String value = ""; protected String value = "";
protected Point2D[] controlPoints = new Point2D[] {new Point(0, 0), protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0),
new Point2D.Double(DEFAULT_WIDTH.convertToPixels(), DEFAULT_HEIGHT.convertToPixels())}; new Point2D.Double(DEFAULT_WIDTH.convertToPixels(), DEFAULT_HEIGHT.convertToPixels())};
protected Point2D firstPoint = new Point(); protected Point2D firstPoint = new Point2D.Double();
protected Point2D secondPoint = new Point(); protected Point2D secondPoint = new Point2D.Double();
protected Color color = COLOR; protected Color color = COLOR;
protected Color borderColor = BORDER_COLOR; protected Color borderColor = BORDER_COLOR;
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.util.Arrays; import java.util.Arrays;
@@ -52,9 +51,10 @@ public class Polygon extends AbstractShape {
public Polygon() { public Polygon() {
super(); super();
this.controlPoints = this.controlPoints =
new Point[] {new Point(0, 0), new Point(0, (int) DEFAULT_HEIGHT.convertToPixels()), new Point2D[] {new Point2D.Double(0, 0),
new Point((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels()), new Point2D.Double(0, (int) DEFAULT_HEIGHT.convertToPixels()),
new Point((int) DEFAULT_WIDTH.convertToPixels(), 0)}; new Point2D.Double((int) DEFAULT_WIDTH.convertToPixels(), (int) DEFAULT_HEIGHT.convertToPixels()),
new Point2D.Double((int) DEFAULT_WIDTH.convertToPixels(), 0)};
} }
@Override @Override
@@ -21,7 +21,6 @@
*/ */
package org.diylc.components.transform; package org.diylc.components.transform;
import java.awt.Point;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
@@ -90,7 +89,7 @@ public class BatterySnapTransformer implements IComponentTransformer {
} }
for (int i = 0; i < snap.getControlPointCount(); i++) { for (int i = 0; i < snap.getControlPointCount(); i++) {
Point p = snap.getControlPoint(i); Point2D p = snap.getControlPoint(i);
snap.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); snap.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
} }
@@ -113,7 +112,7 @@ public class BatterySnapTransformer implements IComponentTransformer {
} }
for (int i = 0; i < snap.getControlPointCount(); i++) { for (int i = 0; i < snap.getControlPointCount(); i++) {
Point p = snap.getControlPoint(i); Point2D p = snap.getControlPoint(i);
snap.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); snap.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
} }
@@ -21,7 +21,6 @@
*/ */
package org.diylc.components.transform; package org.diylc.components.transform;
import java.awt.Point;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
@@ -91,7 +90,7 @@ public class TO1Transformer implements IComponentTransformer {
} }
for (int i = 0; i < transistor.getControlPointCount(); i++) { for (int i = 0; i < transistor.getControlPointCount(); i++) {
Point p = transistor.getControlPoint(i); Point2D p = transistor.getControlPoint(i);
transistor.setControlPoint( transistor.setControlPoint(
new Point2D.Double(p.getX() + 2 * dx, p.getY() + (transistor.getControlPoint(2).getY() - transistor.getControlPoint(0).getY())), i); new Point2D.Double(p.getX() + 2 * dx, p.getY() + (transistor.getControlPoint(2).getY() - transistor.getControlPoint(0).getY())), i);
} }
@@ -115,7 +114,7 @@ public class TO1Transformer implements IComponentTransformer {
} }
for (int i = 0; i < transistor.getControlPointCount(); i++) { for (int i = 0; i < transistor.getControlPointCount(); i++) {
Point p = transistor.getControlPoint(i); Point2D p = transistor.getControlPoint(i);
transistor.setControlPoint(new Point2D.Double(p.getX() + (transistor.getControlPoint(2).getX() - transistor.getControlPoint(0).getX()), transistor.setControlPoint(new Point2D.Double(p.getX() + (transistor.getControlPoint(2).getX() - transistor.getControlPoint(0).getX()),
p.getY() + 2 * dy), i); p.getY() + 2 * dy), i);
} }
@@ -21,7 +21,6 @@
*/ */
package org.diylc.components.transform; package org.diylc.components.transform;
import java.awt.Point;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
@@ -93,7 +92,7 @@ public class TO220Transformer implements IComponentTransformer {
} }
for (int i = 0; i < transistor.getControlPointCount(); i++) { for (int i = 0; i < transistor.getControlPointCount(); i++) {
Point p = transistor.getControlPoint(i); Point2D p = transistor.getControlPoint(i);
transistor.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); transistor.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
} }
@@ -120,7 +119,7 @@ public class TO220Transformer implements IComponentTransformer {
} }
for (int i = 0; i < transistor.getControlPointCount(); i++) { for (int i = 0; i < transistor.getControlPointCount(); i++) {
Point p = transistor.getControlPoint(i); Point2D p = transistor.getControlPoint(i);
transistor.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); transistor.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
} }
@@ -21,7 +21,6 @@
*/ */
package org.diylc.components.transform; package org.diylc.components.transform;
import java.awt.Point;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
@@ -85,7 +84,7 @@ public class TO92Transformer implements IComponentTransformer {
} }
for (int i = 0; i < transistor.getControlPointCount(); i++) { for (int i = 0; i < transistor.getControlPointCount(); i++) {
Point p = transistor.getControlPoint(i); Point2D p = transistor.getControlPoint(i);
transistor.setControlPoint( transistor.setControlPoint(
new Point2D.Double(p.getX() + 2 * dx, p.getY() + (transistor.getControlPoint(2).getY() - transistor.getControlPoint(0).getY())), i); new Point2D.Double(p.getX() + 2 * dx, p.getY() + (transistor.getControlPoint(2).getY() - transistor.getControlPoint(0).getY())), i);
} }
@@ -102,7 +101,7 @@ public class TO92Transformer implements IComponentTransformer {
} }
for (int i = 0; i < transistor.getControlPointCount(); i++) { for (int i = 0; i < transistor.getControlPointCount(); i++) {
Point p = transistor.getControlPoint(i); Point2D p = transistor.getControlPoint(i);
transistor.setControlPoint(new Point2D.Double(p.getX() + (transistor.getControlPoint(2).getX() - transistor.getControlPoint(0).getX()), transistor.setControlPoint(new Point2D.Double(p.getX() + (transistor.getControlPoint(2).getX() - transistor.getControlPoint(0).getX()),
p.getY() + 2 * dy), i); p.getY() + 2 * dy), i);
} }
@@ -21,7 +21,6 @@
*/ */
package org.diylc.components.transform; package org.diylc.components.transform;
import java.awt.Point;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
@@ -96,7 +95,7 @@ public class TerminalStripTransformer implements IComponentTransformer {
} }
for (int i = 0; i < strip.getControlPointCount(); i++) { for (int i = 0; i < strip.getControlPointCount(); i++) {
Point p = strip.getControlPoint(i); Point2D p = strip.getControlPoint(i);
strip.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); strip.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
} }
@@ -125,7 +124,7 @@ public class TerminalStripTransformer implements IComponentTransformer {
} }
for (int i = 0; i < strip.getControlPointCount(); i++) { for (int i = 0; i < strip.getControlPointCount(); i++) {
Point p = strip.getControlPoint(i); Point2D p = strip.getControlPoint(i);
strip.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i); strip.setControlPoint(new Point2D.Double(p.getX() + dx, p.getY() + dy), i);
} }
@@ -22,7 +22,6 @@
package org.diylc.components.tube; package org.diylc.components.tube;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath; import java.awt.geom.GeneralPath;
@@ -50,7 +49,8 @@ public class DuoDiodeSymbol extends AbstractTubeSymbol {
public DuoDiodeSymbol() { public DuoDiodeSymbol() {
super(); super();
this.controlPoints = 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 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)};
updateControlPoints(); updateControlPoints();
} }
@@ -25,7 +25,6 @@ import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Area; import java.awt.geom.Area;
@@ -98,7 +97,7 @@ public class TubeSocket extends AbstractTransparentComponent<String> {
private Mount mount = Mount.CHASSIS; private Mount mount = Mount.CHASSIS;
private Color labelColor = LABEL_COLOR; private Color labelColor = LABEL_COLOR;
private Point[] controlPoints = new Point[] {new Point(0, 0)}; private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)};
transient private Shape body; transient private Shape body;
@@ -168,7 +167,7 @@ public class TubeSocket extends AbstractTransparentComponent<String> {
// } // }
private void updateControlPoints() { private void updateControlPoints() {
Point firstPoint = controlPoints[0]; Point2D firstPoint = controlPoints[0];
int pinCount; int pinCount;
int pinSpacing; int pinSpacing;
boolean hasEmptySpace; boolean hasEmptySpace;
@@ -199,13 +198,13 @@ public class TubeSocket extends AbstractTransparentComponent<String> {
double angleIncrement = Math.PI * 2 / (hasEmptySpace ? (pinCount + 1) : pinCount); double angleIncrement = Math.PI * 2 / (hasEmptySpace ? (pinCount + 1) : pinCount);
double initialAngleOffset = hasEmptySpace ? angleIncrement : (angleIncrement / 2); double initialAngleOffset = hasEmptySpace ? angleIncrement : (angleIncrement / 2);
controlPoints = new Point[pinCount + 1]; controlPoints = new Point2D[pinCount + 1];
double theta = initialAngleOffset + Math.toRadians(getAngle()); double theta = initialAngleOffset + Math.toRadians(getAngle());
controlPoints[0] = firstPoint; controlPoints[0] = firstPoint;
for (int i = 0; i < pinCount; i++) { for (int i = 0; i < pinCount; i++) {
controlPoints[i + 1] = controlPoints[i + 1] =
new Point((int) (firstPoint.getX() + Math.cos(theta) * pinSpacing / 2), new Point2D.Double(firstPoint.getX() + Math.cos(theta) * pinSpacing / 2,
(int) (firstPoint.getY() + Math.sin(theta) * pinSpacing / 2)); firstPoint.getY() + Math.sin(theta) * pinSpacing / 2);
theta += angleIncrement; theta += angleIncrement;
} }
} }
@@ -231,32 +230,32 @@ public class TubeSocket extends AbstractTransparentComponent<String> {
} }
body = body =
new Ellipse2D.Double(controlPoints[0].x - bodyDiameter / 2, controlPoints[0].y - bodyDiameter / 2, new Ellipse2D.Double(controlPoints[0].getX() - bodyDiameter / 2, controlPoints[0].getY() - bodyDiameter / 2,
bodyDiameter, bodyDiameter); bodyDiameter, bodyDiameter);
Area bodyArea = new Area(body); Area bodyArea = new Area(body);
int holeSize = getClosestOdd(base == Base.B12C ? B12C_HOLE_SIZE.convertToPixels() : HOLE_SIZE.convertToPixels()); int holeSize = getClosestOdd(base == Base.B12C ? B12C_HOLE_SIZE.convertToPixels() : HOLE_SIZE.convertToPixels());
bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - holeSize / 2, controlPoints[0].y - holeSize bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].getX() - holeSize / 2, controlPoints[0].getY() - holeSize
/ 2, holeSize, holeSize))); / 2, holeSize, holeSize)));
if (base == Base.OCTAL) { if (base == Base.OCTAL) {
int tickSize = getClosestOdd(OCTAL_TICK_SIZE.convertToPixels()); int tickSize = getClosestOdd(OCTAL_TICK_SIZE.convertToPixels());
double theta = Math.toRadians(getAngle()); double theta = Math.toRadians(getAngle());
int centerX = (int) (controlPoints[0].x + Math.cos(theta) * holeSize / 2); int centerX = (int) (controlPoints[0].getX() + Math.cos(theta) * holeSize / 2);
int centerY = (int) (controlPoints[0].y + Math.sin(theta) * holeSize / 2); int centerY = (int) (controlPoints[0].getY() + Math.sin(theta) * holeSize / 2);
bodyArea.subtract(new Area(new Ellipse2D.Double(centerX - tickSize / 2, centerY - tickSize / 2, tickSize, bodyArea.subtract(new Area(new Ellipse2D.Double(centerX - tickSize / 2, centerY - tickSize / 2, tickSize,
tickSize))); tickSize)));
} else if (base == Base.B9A && getMount() == Mount.CHASSIS) { } else if (base == Base.B9A && getMount() == Mount.CHASSIS) {
double cutoutDiameter = getClosestOdd(B9A_CUTOUT_DIAMETER.convertToPixels()); double cutoutDiameter = getClosestOdd(B9A_CUTOUT_DIAMETER.convertToPixels());
bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].getX() - cutoutDiameter / 2, controlPoints[0].getY() - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter)));
bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].getX() - cutoutDiameter / 2, controlPoints[0].getY() + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter)));
} else if (base == Base.B7G && getMount() == Mount.CHASSIS) { } else if (base == Base.B7G && getMount() == Mount.CHASSIS) {
double cutoutDiameter = getClosestOdd(B7G_CUTOUT_DIAMETER.convertToPixels()); double cutoutDiameter = getClosestOdd(B7G_CUTOUT_DIAMETER.convertToPixels());
bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].getX() - cutoutDiameter / 2, controlPoints[0].getY() - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter)));
bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].getX() - cutoutDiameter / 2, controlPoints[0].getY() + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter)));
} else if (base == Base.B12C && getMount() == Mount.CHASSIS) { } else if (base == Base.B12C && getMount() == Mount.CHASSIS) {
double cutoutDiameter = getClosestOdd(B12C_CUTOUT_DIAMETER.convertToPixels()); double cutoutDiameter = getClosestOdd(B12C_CUTOUT_DIAMETER.convertToPixels());
bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].getX() - cutoutDiameter / 2, controlPoints[0].getY() - bodyDiameter / 2 - cutoutDiameter * 3 / 4, cutoutDiameter, cutoutDiameter)));
bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].x - cutoutDiameter / 2, controlPoints[0].y + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter))); bodyArea.subtract(new Area(new Ellipse2D.Double(controlPoints[0].getX() - cutoutDiameter / 2, controlPoints[0].getY() + bodyDiameter / 2 - cutoutDiameter / 4, cutoutDiameter, cutoutDiameter)));
} }
body = bodyArea; body = bodyArea;
@@ -304,14 +303,14 @@ public class TubeSocket extends AbstractTransparentComponent<String> {
Shape pinShape; Shape pinShape;
if (getMount() == Mount.PCB) { if (getMount() == Mount.PCB) {
int pinSize = getClosestOdd(PIN_DIAMETER.convertToPixels()); int pinSize = getClosestOdd(PIN_DIAMETER.convertToPixels());
pinShape = new Ellipse2D.Double(controlPoints[i].x - pinSize / 2, controlPoints[i].y - pinSize / 2, pinSize, pinSize); pinShape = new Ellipse2D.Double(controlPoints[i].getX() - pinSize / 2, controlPoints[i].getY() - pinSize / 2, pinSize, pinSize);
} else { } else {
int pinWidth = getClosestOdd(PIN_WIDTH.convertToPixels()); int pinWidth = getClosestOdd(PIN_WIDTH.convertToPixels());
int pinThickness = getClosestOdd(PIN_THICKNESS.convertToPixels()); int pinThickness = getClosestOdd(PIN_THICKNESS.convertToPixels());
pinShape = new Rectangle2D.Double(controlPoints[i].x - pinWidth / 2, controlPoints[i].y - pinThickness / 2, pinWidth, pinThickness); pinShape = new Rectangle2D.Double(controlPoints[i].getX() - pinWidth / 2, controlPoints[i].getY() - pinThickness / 2, pinWidth, pinThickness);
double theta = Math.atan2(controlPoints[i].y - controlPoints[0].y, controlPoints[i].x - controlPoints[0].x) + Math.PI / 2; double theta = Math.atan2(controlPoints[i].getY() - controlPoints[0].getY(), controlPoints[i].getX() - controlPoints[0].getX()) + Math.PI / 2;
Area rotatedPin = new Area(pinShape); Area rotatedPin = new Area(pinShape);
rotatedPin.transform(AffineTransform.getRotateInstance(theta, controlPoints[i].x, controlPoints[i].y)); rotatedPin.transform(AffineTransform.getRotateInstance(theta, controlPoints[i].getX(), controlPoints[i].getY()));
pinShape = rotatedPin; pinShape = rotatedPin;
} }
g2d.setColor(PIN_COLOR); g2d.setColor(PIN_COLOR);
@@ -330,9 +329,9 @@ public class TubeSocket extends AbstractTransparentComponent<String> {
for (int i = 0; i < labels.length; i++) { for (int i = 0; i < labels.length; i++) {
if (i < controlPoints.length - 1) { if (i < controlPoints.length - 1) {
String label = labels[i]; String label = labels[i];
double theta = Math.atan2(controlPoints[i + 1].y - controlPoints[0].y, controlPoints[i + 1].x - controlPoints[0].x); double theta = Math.atan2(controlPoints[i + 1].getY() - controlPoints[0].getY(), controlPoints[i + 1].getX() - controlPoints[0].getX());
double x = controlPoints[i + 1].x - Math.cos(theta) * electrodeLabelOffset; double x = controlPoints[i + 1].getX() - Math.cos(theta) * electrodeLabelOffset;
double y = controlPoints[i + 1].y - Math.sin(theta) * electrodeLabelOffset; double y = controlPoints[i + 1].getY() - Math.sin(theta) * electrodeLabelOffset;
StringUtils.drawCenteredText(g2d, label, (int)x, (int)y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); StringUtils.drawCenteredText(g2d, label, (int)x, (int)y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
} }
} }
Binary file not shown.
Binary file not shown.