From eab76548833f048f8b16c86f4261042a393e94a5 Mon Sep 17 00:00:00 2001 From: bancika Date: Mon, 28 Feb 2011 00:09:13 +0000 Subject: [PATCH] Curved traces and wires can have 2, 3 and 4 control points --- .../components/AbstractCurvedComponent.java | 112 +++++++++++++++++- .../DIYLC/update.xml | 2 +- 2 files changed, 109 insertions(+), 5 deletions(-) diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java index d847dda5..bddb47e1 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java @@ -32,6 +32,7 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp new Point((int) DEFAULT_SIZE.convertToPixels(), (int) DEFAULT_SIZE.convertToPixels()) }; protected Color color = getDefaultColor(); + protected PointCount pointCount = PointCount.FOUR; /** * Draws the specified curve onto graphics. @@ -99,14 +100,35 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp g2d.setComposite(oldComposite); } + @EditableProperty(name = "Point Count") + public PointCount getPointCount() { + return pointCount; + } + + public void setPointCount(PointCount pointCount) { + this.pointCount = pointCount; + // Reset control points. + for (int i = 0; i < getControlPointCount(); i++) { + setControlPoint(getControlPoint(i), i); + } + } + @Override public int getControlPointCount() { - return controlPoints.length; + switch (pointCount) { + case TWO: + return 2; + case THREE: + return 3; + case FOUR: + return 4; + } + return 0; } @Override public boolean isControlPointSticky(int index) { - return index == 0 || index == 3; + return index == 0 || index == getControlPointCount() - 1; } @Override @@ -117,17 +139,91 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp @Override public boolean canControlPointOverlap(int index) { // Only shape control points may overlap. - return index == 1 || index == 2; + switch (pointCount) { + case TWO: + return false; + case THREE: + return index == 1; + case FOUR: + return index == 1 || index == 2; + } + return false; } @Override public Point getControlPoint(int index) { + if (index == 0) { + return controlPoints[0]; + } + switch (pointCount) { + case TWO: + switch (index) { + case 1: + return controlPoints[3]; + } + case THREE: + switch (index) { + case 1: + return controlPoints[1]; + case 2: + return controlPoints[3]; + } + case FOUR: + switch (index) { + case 1: + return controlPoints[1]; + case 2: + return controlPoints[2]; + case 3: + return controlPoints[3]; + } + } return controlPoints[index]; } @Override public void setControlPoint(Point point, int index) { - controlPoints[index].setLocation(point); + if (index == 0) { + controlPoints[0].setLocation(point); + } else { + switch (pointCount) { + case TWO: + switch (index) { + case 1: + Point center = new Point((point.x + controlPoints[0].x) / 2, + (point.y + controlPoints[0].y) / 2); + controlPoints[1].setLocation(center); + controlPoints[2].setLocation(center); + controlPoints[3].setLocation(point); + break; + } + break; + case THREE: + switch (index) { + case 1: + controlPoints[1].setLocation(point); + controlPoints[2].setLocation(point); + break; + case 2: + controlPoints[3].setLocation(point); + break; + } + break; + case FOUR: + switch (index) { + case 1: + controlPoints[1].setLocation(point); + break; + case 2: + controlPoints[2].setLocation(point); + break; + case 3: + controlPoints[3].setLocation(point); + break; + } + break; + } + } } @EditableProperty @@ -139,4 +235,12 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp this.color = color; } + enum PointCount { + TWO, THREE, FOUR; + + @Override + public String toString() { + return name().substring(0, 1) + name().substring(1).toLowerCase(); + } + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml b/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml index 1155f125..a32430d1 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml @@ -288,7 +288,7 @@ IMPROVEMENT - + Curved traces and wires can have 2, 3 and 4 control points NEW_FEATURE