changed curve position

synchronous messages
added pot
This commit is contained in:
bancika
2011-01-23 17:26:34 +00:00
parent a422c9ad2d
commit f9c08ecbaa
8 changed files with 335 additions and 6 deletions
@@ -24,11 +24,10 @@ public abstract class AbstractCurvedComponent<T> extends AbstractTransparentComp
public static Color GUIDELINE_COLOR = Color.blue;
public static Size DEFAULT_SIZE = new Size(1d, SizeUnit.in);
protected Point[] controlPoints = new Point[] {
new Point(-DEFAULT_SIZE.convertToPixels() / 2, -DEFAULT_SIZE.convertToPixels() / 2),
new Point(0, -DEFAULT_SIZE.convertToPixels() / 2),
new Point(0, DEFAULT_SIZE.convertToPixels() / 2),
new Point(DEFAULT_SIZE.convertToPixels() / 2, DEFAULT_SIZE.convertToPixels() / 2) };
protected Point[] controlPoints = new Point[] { new Point(0, 0),
new Point(DEFAULT_SIZE.convertToPixels() / 2, 0),
new Point(DEFAULT_SIZE.convertToPixels() / 2, DEFAULT_SIZE.convertToPixels()),
new Point(DEFAULT_SIZE.convertToPixels(), DEFAULT_SIZE.convertToPixels()) };
protected Color color = getDefaultColor();
@@ -102,7 +102,7 @@ public class Presenter implements IPlugInPort {
super();
this.view = view;
plugIns = new ArrayList<IPlugIn>();
messageDispatcher = new MessageDispatcher<EventType>();
messageDispatcher = new MessageDispatcher<EventType>(true);
selectedComponents = new ComponentSelection();
lockedComponents = new HashSet<IDIYComponent<?>>();
currentProject = new Project();
@@ -0,0 +1,84 @@
package org.diylc.components.passive;
import java.awt.Point;
import org.diylc.common.Orientation;
import org.diylc.components.AbstractComponent;
import org.diylc.core.VisibilityPolicy;
import org.diylc.core.annotations.EditableProperty;
import org.diylc.core.measures.Resistance;
import org.diylc.core.measures.ResistanceUnit;
public abstract class AbstractPotentiometer extends AbstractComponent<PotentiometerValue> {
private static final long serialVersionUID = 1L;
protected Point[] controlPoints;
protected Resistance resistance = new Resistance(100d, ResistanceUnit.K);
protected Orientation orientation = Orientation.DEFAULT;
protected Taper taper;
@Override
public int getControlPointCount() {
return controlPoints.length;
}
@Override
public Point getControlPoint(int index) {
return controlPoints[index];
}
@Override
public void setControlPoint(Point point, int index) {
controlPoints[index].setLocation(point);
}
@Override
public VisibilityPolicy getControlPointVisibilityPolicy(int index) {
return VisibilityPolicy.NEVER;
}
@Override
public boolean isControlPointSticky(int index) {
return true;
}
@EditableProperty
public Resistance getResistance() {
return resistance;
}
public void setResistance(Resistance resistance) {
this.resistance = resistance;
}
@Override
public PotentiometerValue getValue() {
return new PotentiometerValue(resistance, taper);
}
@Override
public void setValue(PotentiometerValue value) {
this.resistance = value.getResistance();
this.taper = value.getTaper();
}
@EditableProperty
public Taper getTaper() {
return taper;
}
public void setTaper(Taper taper) {
this.taper = taper;
}
@EditableProperty
public Orientation getOrientation() {
return orientation;
}
public void setOrientation(Orientation orientation) {
this.orientation = orientation;
}
}
@@ -0,0 +1,212 @@
package org.diylc.components.passive;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation;
import org.diylc.core.ComponentState;
import org.diylc.core.CreationMethod;
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;
@ComponentDescriptor(name = "Potentiometer (panel mount)", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "VR", description = "test", zOrder = IDIYComponent.ABOVE_COMPONENT, stretchable = false)
public class PotentiometerPanel extends AbstractPotentiometer {
private static final long serialVersionUID = 1L;
protected static Size BODY_DIAMETER = new Size(1d, SizeUnit.in);
protected static Size SPACING = new Size(0.3d, SizeUnit.in);
protected static Size LUG_DIAMETER = new Size(0.15d, SizeUnit.in);
protected static Color BODY_COLOR = Color.gray.brighter();
protected static Color BORDER_COLOR = Color.gray;
protected Size bodyDiameter = BODY_DIAMETER;
protected Size spacing = SPACING;
protected Color bodyColor = BODY_COLOR;
protected Color borderColor = BORDER_COLOR;
protected Area[] body = null;
public PotentiometerPanel() {
controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) };
updateControlPoints();
}
protected void updateControlPoints() {
int spacing = this.spacing.convertToPixels();
switch (orientation) {
case DEFAULT:
controlPoints[1].setLocation(controlPoints[0].x + spacing, controlPoints[0].y);
controlPoints[2].setLocation(controlPoints[0].x + 2 * spacing, controlPoints[0].y);
break;
case _90:
controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y + spacing);
controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y + 2 * spacing);
break;
case _180:
controlPoints[1].setLocation(controlPoints[0].x - spacing, controlPoints[0].y);
controlPoints[2].setLocation(controlPoints[0].x - 2 * spacing, controlPoints[0].y);
break;
case _270:
controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y - spacing);
controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y - 2 * spacing);
break;
default:
break;
}
}
public Area[] getBody() {
int spacing = this.spacing.convertToPixels();
int diameter = getClosestOdd(bodyDiameter.convertToPixels());
if (body == null) {
body = new Area[7];
// Add lugs.
int lugDiameter = getClosestOdd(LUG_DIAMETER.convertToPixels());
int holeDiameter = getClosestOdd(LUG_DIAMETER.convertToPixels() / 2);
for (int i = 0; i < 3; i++) {
Area area = new Area(new Ellipse2D.Double(controlPoints[i].x - lugDiameter / 2,
controlPoints[i].y - lugDiameter / 2, lugDiameter, lugDiameter));
body[4 + i] = area;
}
switch (orientation) {
case DEFAULT:
body[3] = new Area(new Ellipse2D.Double(
controlPoints[0].x + spacing - diameter / 2, controlPoints[0].y - spacing
/ 2 - diameter, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(
controlPoints[i].x - holeDiameter / 2, controlPoints[i].y
- (spacing + diameter) / 2, holeDiameter,
(spacing + diameter) / 2));
}
break;
case _90:
body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x + spacing / 2,
controlPoints[0].y + spacing - diameter / 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(controlPoints[i].x,
controlPoints[i].y - holeDiameter / 2, (spacing + diameter) / 2,
holeDiameter));
}
break;
case _180:
body[3] = new Area(new Ellipse2D.Double(
controlPoints[0].x + spacing - diameter / 2, controlPoints[0].y + spacing
/ 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(
controlPoints[i].x - holeDiameter / 2, controlPoints[i].y,
holeDiameter, (spacing + diameter) / 2));
}
break;
case _270:
body[3] = new Area(new Ellipse2D.Double(
controlPoints[0].x - spacing / 2 - diameter, controlPoints[0].y - spacing
- diameter / 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(controlPoints[i].x
- (spacing + diameter) / 2, controlPoints[i].y - holeDiameter / 2,
(spacing + diameter) / 2, holeDiameter));
}
break;
default:
break;
}
for (int i = 0; i < 3; i++) {
for (int j = 3; j < 7; j++) {
body[i].subtract(body[j]);
}
}
// Make holes in the lugs.
for (int i = 0; i < 3; i++) {
body[4 + i].subtract(new Area(new Ellipse2D.Double(controlPoints[i].x
- holeDiameter / 2, controlPoints[i].y - holeDiameter / 2, holeDiameter,
holeDiameter)));
}
}
return body;
}
@Override
public void setControlPoint(Point point, int index) {
super.setControlPoint(point, index);
body = null;
}
@Override
public void setOrientation(Orientation orientation) {
super.setOrientation(orientation);
updateControlPoints();
body = null;
}
@Override
public void draw(Graphics2D g2d, ComponentState componentState, Project project,
IDrawingObserver drawingObserver) {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
for (Area shape : getBody()) {
if (shape != null) {
g2d.setColor(bodyColor);
g2d.fill(shape);
g2d.setColor(borderColor);
g2d.draw(shape);
}
}
}
@Override
public void drawIcon(Graphics2D g2d, int width, int height) {
// TODO Auto-generated method stub
}
@EditableProperty
public Size getSpacing() {
return spacing;
}
public void setSpacing(Size spacing) {
this.spacing = spacing;
updateControlPoints();
body = null;
}
@EditableProperty(name = "Diameter")
public Size getBodyDiameter() {
return bodyDiameter;
}
public void setBodyDiameter(Size bodyDiameter) {
this.bodyDiameter = bodyDiameter;
}
@EditableProperty(name = "Body")
public Color getBodyColor() {
return bodyColor;
}
public void setBodyColor(Color bodyColor) {
this.bodyColor = bodyColor;
}
@EditableProperty(name = "Border")
public Color getBorderColor() {
return borderColor;
}
public void setBorderColor(Color borderColor) {
this.borderColor = borderColor;
}
}
@@ -0,0 +1,28 @@
package org.diylc.components.passive;
import org.diylc.core.measures.Resistance;
public class PotentiometerValue {
private Resistance resistance;
private Taper taper;
public PotentiometerValue(Resistance resistance, Taper taper) {
super();
this.resistance = resistance;
this.taper = taper;
}
public Resistance getResistance() {
return resistance;
}
public Taper getTaper() {
return taper;
}
@Override
public String toString() {
return resistance.toString() + taper.toString();
}
}
@@ -0,0 +1,6 @@
package org.diylc.components.passive;
public enum Taper {
LINEAR, LOG, REVERSE_LOG, W, S
}