Ability to change PCB board shape from rectangular to oval

This commit is contained in:
bancika
2017-04-27 17:15:38 +02:00
parent 0fcd523d6b
commit c37b0f3071
5 changed files with 54 additions and 1 deletions
Binary file not shown.
@@ -1,8 +1,11 @@
package org.diylc.components.boards;
import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.Shape;
import org.diylc.common.ObjectCache;
import org.diylc.common.SimpleComponentTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
@@ -10,6 +13,7 @@ import org.diylc.core.IDrawingObserver;
import org.diylc.core.Project;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
@ComponentDescriptor(name = "Blank Board", category = "Boards", author = "Branislav Stojkovic",
zOrder = IDIYComponent.BOARD, instanceNamePrefix = "Board", description = "Blank circuit board",
@@ -18,6 +22,8 @@ public class BlankBoard extends AbstractBoard {
private static final long serialVersionUID = 1L;
private Type type = Type.SQUARE;
@Override
public void drawIcon(Graphics2D g2d, int width, int height) {
int factor = 32 / width;
@@ -35,7 +41,29 @@ public class BlankBoard extends AbstractBoard {
&& !clip.contains(secondPoint.x, firstPoint.y)) {
return;
}
super.draw(g2d, componentState, outlineMode, project, drawingObserver);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
if (componentState != ComponentState.DRAGGING) {
Composite oldComposite = g2d.getComposite();
if (alpha < MAX_ALPHA) {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
}
g2d.setColor(boardColor);
if (getType() == Type.SQUARE)
g2d.fillRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y);
else
g2d.fillOval(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y);
g2d.setComposite(oldComposite);
}
// Do not track any changes that follow because the whole board has been
// tracked so far.
drawingObserver.stopTracking();
g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: borderColor);
if (getType() == Type.SQUARE)
g2d.drawRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y);
else
g2d.drawOval(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y);
}
@Override
@@ -43,4 +71,25 @@ public class BlankBoard extends AbstractBoard {
// Override to prevent editing.
return super.getDrawCoordinates();
}
@EditableProperty(name = "Shape")
public Type getType() {
if (type == null) {
type = Type.SQUARE;
}
return type;
}
public void setType(Type type) {
this.type = type;
}
static enum Type {
ROUND, SQUARE;
@Override
public String toString() {
return name().substring(0, 1) + name().substring(1).toLowerCase();
}
}
}
Binary file not shown.
Binary file not shown.
+4
View File
@@ -1770,6 +1770,10 @@
<changeType>NEW_FEATURE</changeType>
<description>Ability to force components to the front or back of other components even outisde their designated layers, allowing placing components or jumpers below boards, etc.</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Ability to change PCB board shape from rectangular to oval.</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
<description>Do not block the UI while checking for new version at startup (can be problematic when there's connectivity issues)</description>