Added connector dot component

Zero-sized holes on pads
This commit is contained in:
bancika
2012-09-13 15:12:36 +00:00
parent 92495b1cf0
commit 25cdfd199a
2 changed files with 132 additions and 14 deletions
@@ -0,0 +1,111 @@
package org.diylc.components.connectivity;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import org.diylc.components.AbstractComponent;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.Project;
import org.diylc.core.VisibilityPolicy;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
import org.diylc.core.measures.Size;
import org.diylc.core.measures.SizeUnit;
import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Dot", category = "Connectivity", author = "Branislav Stojkovic", description = "Connector dot", instanceNamePrefix = "Dot", stretchable = false, zOrder = IDIYComponent.COMPONENT, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false)
public class Dot extends AbstractComponent<Void> {
private static final long serialVersionUID = 1L;
public static Size SIZE = new Size(1d, SizeUnit.mm);
public static Color COLOR = Color.black;
private Size size = SIZE;
private Color color = COLOR;
private Point point = new Point(0, 0);
@Override
public void draw(Graphics2D g2d, ComponentState componentState,
boolean outlineMode, Project project,
IDrawingObserver drawingObserver) {
if (checkPointsClipped(g2d.getClip())) {
return;
}
int diameter = getClosestOdd((int) getSize().convertToPixels());
g2d.setColor(componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: color);
g2d.fillOval(point.x - diameter / 2, point.y - diameter / 2, diameter,
diameter);
}
@Override
public void drawIcon(Graphics2D g2d, int width, int height) {
int diameter = 7 * width / 32;
g2d.setColor(COLOR);
g2d.fillOval((width - diameter) / 2, (height - diameter) / 2, diameter,
diameter);
}
@EditableProperty
public Size getSize() {
return size;
}
public void setSize(Size size) {
this.size = size;
}
@Override
public String getName() {
return super.getName();
}
@Override
public int getControlPointCount() {
return 1;
}
@Override
public boolean isControlPointSticky(int index) {
return true;
}
@Override
public VisibilityPolicy getControlPointVisibilityPolicy(int index) {
return VisibilityPolicy.NEVER;
}
@Override
public Point getControlPoint(int index) {
return point;
}
@Override
public void setControlPoint(Point point, int index) {
this.point.setLocation(point);
}
@EditableProperty(name = "Color")
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
@Override
public Void getValue() {
return null;
}
@Override
public void setValue(Void value) {
}
}
@@ -18,7 +18,7 @@ import org.diylc.core.measures.Size;
import org.diylc.core.measures.SizeUnit; import org.diylc.core.measures.SizeUnit;
import org.diylc.utils.Constants; import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic", description = "test", instanceNamePrefix = "Pad", stretchable = false, zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false) @ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic", description = "Copper solder pad, round or square", instanceNamePrefix = "Pad", stretchable = false, zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false)
public class SolderPad extends AbstractComponent<Void> { public class SolderPad extends AbstractComponent<Void> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -35,23 +35,29 @@ public class SolderPad extends AbstractComponent<Void> {
private PCBLayer layer = PCBLayer._1; private PCBLayer layer = PCBLayer._1;
@Override @Override
public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, public void draw(Graphics2D g2d, ComponentState componentState,
Project project, IDrawingObserver drawingObserver) { boolean outlineMode, Project project,
IDrawingObserver drawingObserver) {
if (checkPointsClipped(g2d.getClip())) { if (checkPointsClipped(g2d.getClip())) {
return; return;
} }
int diameter = getClosestOdd((int) getSize().convertToPixels()); int diameter = getClosestOdd((int) getSize().convertToPixels());
int holeDiameter = getClosestOdd((int) getHoleSize().convertToPixels()); int holeDiameter = getClosestOdd((int) getHoleSize().convertToPixels());
g2d.setColor(componentState == ComponentState.SELECTED g2d.setColor(componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color); || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: color);
if (type == Type.ROUND) { if (type == Type.ROUND) {
g2d.fillOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); g2d.fillOval(point.x - diameter / 2, point.y - diameter / 2,
diameter, diameter);
} else { } else {
g2d.fillRect(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); g2d.fillRect(point.x - diameter / 2, point.y - diameter / 2,
diameter, diameter);
}
if (getHoleSize().getValue() > 0) {
g2d.setColor(Constants.CANVAS_COLOR);
g2d.fillOval(point.x - holeDiameter / 2,
point.y - holeDiameter / 2, holeDiameter, holeDiameter);
} }
g2d.setColor(Constants.CANVAS_COLOR);
g2d.fillOval(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter,
holeDiameter);
} }
@Override @Override
@@ -59,10 +65,11 @@ public class SolderPad extends AbstractComponent<Void> {
int diameter = getClosestOdd(width / 2); int diameter = getClosestOdd(width / 2);
int holeDiameter = 5; int holeDiameter = 5;
g2d.setColor(COLOR); g2d.setColor(COLOR);
g2d.fillOval((width - diameter) / 2, (height - diameter) / 2, diameter, diameter); g2d.fillOval((width - diameter) / 2, (height - diameter) / 2, diameter,
diameter);
g2d.setColor(Constants.CANVAS_COLOR); g2d.setColor(Constants.CANVAS_COLOR);
g2d.fillOval((width - holeDiameter) / 2, (height - holeDiameter) / 2, holeDiameter, g2d.fillOval((width - holeDiameter) / 2, (height - holeDiameter) / 2,
holeDiameter); holeDiameter, holeDiameter);
} }
@EditableProperty @EditableProperty