mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 09:12:09 +10:00
changed curve position
synchronous messages added pot
This commit is contained in:
Binary file not shown.
Binary file not shown.
+4
-5
@@ -24,11 +24,10 @@ public abstract class AbstractCurvedComponent<T> extends AbstractTransparentComp
|
|||||||
public static Color GUIDELINE_COLOR = Color.blue;
|
public static Color GUIDELINE_COLOR = Color.blue;
|
||||||
public static Size DEFAULT_SIZE = new Size(1d, SizeUnit.in);
|
public static Size DEFAULT_SIZE = new Size(1d, SizeUnit.in);
|
||||||
|
|
||||||
protected Point[] controlPoints = new Point[] {
|
protected Point[] controlPoints = new Point[] { new Point(0, 0),
|
||||||
new Point(-DEFAULT_SIZE.convertToPixels() / 2, -DEFAULT_SIZE.convertToPixels() / 2),
|
new Point(DEFAULT_SIZE.convertToPixels() / 2, 0),
|
||||||
new Point(0, -DEFAULT_SIZE.convertToPixels() / 2),
|
new Point(DEFAULT_SIZE.convertToPixels() / 2, DEFAULT_SIZE.convertToPixels()),
|
||||||
new Point(0, DEFAULT_SIZE.convertToPixels() / 2),
|
new Point(DEFAULT_SIZE.convertToPixels(), DEFAULT_SIZE.convertToPixels()) };
|
||||||
new Point(DEFAULT_SIZE.convertToPixels() / 2, DEFAULT_SIZE.convertToPixels() / 2) };
|
|
||||||
|
|
||||||
protected Color color = getDefaultColor();
|
protected Color color = getDefaultColor();
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ public class Presenter implements IPlugInPort {
|
|||||||
super();
|
super();
|
||||||
this.view = view;
|
this.view = view;
|
||||||
plugIns = new ArrayList<IPlugIn>();
|
plugIns = new ArrayList<IPlugIn>();
|
||||||
messageDispatcher = new MessageDispatcher<EventType>();
|
messageDispatcher = new MessageDispatcher<EventType>(true);
|
||||||
selectedComponents = new ComponentSelection();
|
selectedComponents = new ComponentSelection();
|
||||||
lockedComponents = new HashSet<IDIYComponent<?>>();
|
lockedComponents = new HashSet<IDIYComponent<?>>();
|
||||||
currentProject = new Project();
|
currentProject = new Project();
|
||||||
|
|||||||
+84
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
+212
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
+28
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package org.diylc.components.passive;
|
||||||
|
|
||||||
|
public enum Taper {
|
||||||
|
|
||||||
|
LINEAR, LOG, REVERSE_LOG, W, S
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user