mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 09:12:09 +10:00
143 lines
5.0 KiB
Java
143 lines
5.0 KiB
Java
package org.diylc.components.boards;
|
|
|
|
import java.awt.AlphaComposite;
|
|
import java.awt.Color;
|
|
import java.awt.Composite;
|
|
import java.awt.Graphics2D;
|
|
import java.awt.Point;
|
|
import java.awt.Shape;
|
|
|
|
import org.diylc.common.OrientationHV;
|
|
import org.diylc.core.ComponentState;
|
|
import org.diylc.core.IDIYComponent;
|
|
import org.diylc.core.IDrawingObserver;
|
|
import org.diylc.core.Project;
|
|
import org.diylc.core.annotations.ComponentDescriptor;
|
|
import org.diylc.core.annotations.EditableProperty;
|
|
import org.diylc.core.measures.Size;
|
|
import org.diylc.core.measures.SizeUnit;
|
|
import org.diylc.utils.Constants;
|
|
|
|
@ComponentDescriptor(name = "Vero Board", category = "Boards", author = "Branislav Stojkovic", zOrder = IDIYComponent.BOARD, instanceNamePrefix = "Board", description = "Perforated FR4 board with copper strips connecting all holes in a row")
|
|
public class VeroBoard extends AbstractBoard {
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
public static Color STRIP_COLOR = Color.decode("#DA8A67");
|
|
public static Color BORDER_COLOR = BOARD_COLOR.darker();
|
|
|
|
public static Size SPACING = new Size(0.1d, SizeUnit.in);
|
|
public static Size STRIP_SIZE = new Size(0.07d, SizeUnit.in);
|
|
public static Size HOLE_SIZE = new Size(0.7d, SizeUnit.mm);
|
|
|
|
protected Size spacing = SPACING;
|
|
protected Color stripColor = STRIP_COLOR;
|
|
protected OrientationHV orientation = OrientationHV.HORIZONTAL;
|
|
|
|
@Override
|
|
public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode,
|
|
Project project, IDrawingObserver drawingObserver) {
|
|
Shape clip = g2d.getClip();
|
|
if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, secondPoint.y)
|
|
&& !clip.contains(secondPoint.x, firstPoint.y)) {
|
|
return;
|
|
}
|
|
super.draw(g2d, componentState, outlineMode, project, drawingObserver);
|
|
if (componentState != ComponentState.DRAGGING) {
|
|
Composite oldComposite = g2d.getComposite();
|
|
if (alpha < MAX_ALPHA) {
|
|
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha
|
|
/ MAX_ALPHA));
|
|
}
|
|
Point p = new Point(firstPoint);
|
|
int stripSize = getClosestOdd((int) STRIP_SIZE.convertToPixels());
|
|
int holeSize = getClosestOdd((int) HOLE_SIZE.convertToPixels());
|
|
int spacing = (int) this.spacing.convertToPixels();
|
|
|
|
if (orientation == OrientationHV.HORIZONTAL) {
|
|
while (p.y < secondPoint.y - spacing) {
|
|
p.x = firstPoint.x;
|
|
p.y += spacing;
|
|
g2d.setColor(stripColor);
|
|
g2d.fillRect(p.x + spacing / 2, p.y - stripSize / 2, secondPoint.x - spacing
|
|
- p.x, stripSize);
|
|
g2d.setColor(stripColor.darker());
|
|
g2d.drawRect(p.x + spacing / 2, p.y - stripSize / 2, secondPoint.x - spacing
|
|
- p.x, stripSize);
|
|
while (p.x < secondPoint.x - spacing - holeSize) {
|
|
p.x += spacing;
|
|
g2d.setColor(Constants.CANVAS_COLOR);
|
|
g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize);
|
|
g2d.setColor(stripColor.darker());
|
|
g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize);
|
|
}
|
|
}
|
|
} else {
|
|
while (p.x < secondPoint.x - spacing) {
|
|
p.x += spacing;
|
|
p.y = firstPoint.y;
|
|
g2d.setColor(stripColor);
|
|
g2d.fillRect(p.x - stripSize / 2, p.y + spacing / 2, stripSize, secondPoint.y
|
|
- spacing - p.y);
|
|
g2d.setColor(stripColor.darker());
|
|
g2d.drawRect(p.x - stripSize / 2, p.y + spacing / 2, stripSize, secondPoint.y
|
|
- spacing - p.y);
|
|
while (p.y < secondPoint.y - spacing - holeSize) {
|
|
p.y += spacing;
|
|
g2d.setColor(Constants.CANVAS_COLOR);
|
|
g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize);
|
|
g2d.setColor(stripColor.darker());
|
|
g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize);
|
|
}
|
|
}
|
|
}
|
|
g2d.setComposite(oldComposite);
|
|
}
|
|
}
|
|
|
|
@EditableProperty(name = "Strip color")
|
|
public Color getStripColor() {
|
|
return stripColor;
|
|
}
|
|
|
|
public void setStripColor(Color padColor) {
|
|
this.stripColor = padColor;
|
|
}
|
|
|
|
@EditableProperty
|
|
public Size getSpacing() {
|
|
return spacing;
|
|
}
|
|
|
|
public void setSpacing(Size spacing) {
|
|
this.spacing = spacing;
|
|
}
|
|
|
|
@EditableProperty
|
|
public OrientationHV getOrientation() {
|
|
return orientation;
|
|
}
|
|
|
|
public void setOrientation(OrientationHV orientation) {
|
|
this.orientation = orientation;
|
|
}
|
|
|
|
@Override
|
|
public void drawIcon(Graphics2D g2d, int width, int height) {
|
|
g2d.setColor(BOARD_COLOR);
|
|
g2d.fillRect(2, 2, width - 4, height - 4);
|
|
g2d.setColor(BORDER_COLOR);
|
|
g2d.drawRect(2, 2, width - 4, height - 4);
|
|
g2d.setColor(STRIP_COLOR);
|
|
g2d.fillRect(4, width / 4, width - 8, width / 2);
|
|
g2d.setColor(STRIP_COLOR.darker());
|
|
g2d.drawRect(4, width / 4, width - 8, width / 2);
|
|
g2d.setColor(Constants.CANVAS_COLOR);
|
|
g2d.fillOval(width / 3 - 2, width / 2 - 2, 5, 5);
|
|
g2d.fillOval(2 * width / 3 - 2, width / 2 - 2, 5, 5);
|
|
g2d.setColor(STRIP_COLOR.darker());
|
|
g2d.drawOval(width / 3 - 2, width / 2 - 2, 5, 5);
|
|
g2d.drawOval(2 * width / 3 - 2, width / 2 - 2, 5, 5);
|
|
}
|
|
}
|