From 58ac3d8148e32290f886f407b0b9c7d901441230 Mon Sep 17 00:00:00 2001 From: bancika Date: Thu, 23 Aug 2012 15:12:10 +0000 Subject: [PATCH] Polygon Ground Fill component --- .../diylc-library/lib/diylc-core.jar | Bin 200853 -> 201208 bytes .../diylc/components/boards/BlankBoard.java | 5 +- .../diylc/components/boards/EyeletBoard.java | 9 +- .../components/boards/MarshallPerfBoard.java | 51 ++++--- .../diylc/components/boards/PerfBoard.java | 39 +++-- .../diylc/components/boards/VeroBoard.java | 63 +++++--- .../components/connectivity/GroundFill.java | 144 ++++++++++++++++++ 7 files changed, 246 insertions(+), 65 deletions(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/GroundFill.java diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar index 35a24d20d592cc67523e925c0cf3010bc1d11a99..d5a9688e725ccef2b2333f8388896a70ffe5c3cf 100644 GIT binary patch delta 25019 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 delta 24691 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 diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java index 3902835f..0457a2ce 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java @@ -13,10 +13,11 @@ public class BlankBoard extends AbstractBoard { @Override public void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; g2d.setColor(BOARD_COLOR); - g2d.fillRect(2, 2, width - 4, height - 4); + g2d.fillRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 / factor); g2d.setColor(BORDER_COLOR); - g2d.drawRect(2, 2, width - 4, height - 4); + g2d.drawRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 / factor); } @Override diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java index 6cea6c3f..0cebbbc4 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java @@ -100,17 +100,18 @@ public class EyeletBoard extends AbstractBoard { @Override public void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; g2d.setColor(BOARD_COLOR); - g2d.fillRect(2, 2, width - 4, height - 4); + g2d.fillRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 / factor); g2d.setColor(BORDER_COLOR); - g2d.drawRect(2, 2, width - 4, height - 4); + g2d.drawRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 / factor); g2d.setColor(EYELET_COLOR); g2d.fillOval(width / 4, width / 4, width / 2, width / 2); g2d.setColor(EYELET_COLOR.darker()); g2d.drawOval(width / 4, width / 4, width / 2, width / 2); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(width / 2 - 2, width / 2 - 2, 5, 5); + g2d.fillOval(width / 2 - 2 / factor, width / 2 - 2 / factor, getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(EYELET_COLOR.darker()); - g2d.drawOval(width / 2 - 2, width / 2 - 2, 5, 5); + g2d.drawOval(width / 2 - 2 / factor, width / 2 - 2 / factor, getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java index 84c76d43..38d4af72 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java @@ -37,18 +37,20 @@ public class MarshallPerfBoard extends AbstractBoard { } @Override - public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, - Project project, IDrawingObserver drawingObserver) { + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, secondPoint.y) + if (checkPointsClipped(clip) + && !clip.contains(firstPoint.x, secondPoint.y) && !clip.contains(secondPoint.x, firstPoint.y)) { return; } super.draw(g2d, componentState, outlineMode, project, drawingObserver); if (componentState != ComponentState.DRAGGING) { if (alpha < MAX_ALPHA) { - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha - / MAX_ALPHA)); + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } Point p = new Point(firstPoint); int holeDiameter = getClosestOdd((int) HOLE_SIZE.convertToPixels()); @@ -60,11 +62,11 @@ public class MarshallPerfBoard extends AbstractBoard { while (p.x < secondPoint.x - spacing - holeDiameter) { p.x += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, - holeDiameter); + g2d.fillOval(p.x - holeDiameter / 2, + p.y - holeDiameter / 2, holeDiameter, holeDiameter); g2d.setColor(borderColor); - g2d.drawOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, - holeDiameter); + g2d.drawOval(p.x - holeDiameter / 2, + p.y - holeDiameter / 2, holeDiameter, holeDiameter); } } super.drawCoordinates(g2d, spacing); @@ -82,29 +84,40 @@ public class MarshallPerfBoard extends AbstractBoard { @Override public void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; g2d.setColor(BOARD_COLOR); - g2d.fillRect(2, 2, width - 4, height - 4); + g2d.fillRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); g2d.setColor(BORDER_COLOR); - g2d.drawRect(2, 2, width - 4, height - 4); + g2d.drawRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(width / 3 - 2, width / 3 - 2, 5, 5); + g2d.fillOval(width / 3 - 2 / factor, width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(BORDER_COLOR); - g2d.drawOval(width / 3 - 2, width / 3 - 2, 5, 5); + g2d.drawOval(width / 3 - 2 / factor, width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(2 * width / 3 - 2, width / 3 - 2, 5, 5); + g2d.fillOval(2 * width / 3 - 2 / factor, width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(BORDER_COLOR); - g2d.drawOval(2 * width / 3 - 2, width / 3 - 2, 5, 5); + g2d.drawOval(2 * width / 3 - 2 / factor, width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(width / 3 - 2, 2 * width / 3 - 2, 5, 5); + g2d.fillOval(width / 3 - 2 / factor, 2 * width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(BORDER_COLOR); - g2d.drawOval(width / 3 - 2, 2 * width / 3 - 2, 5, 5); + g2d.drawOval(width / 3 - 2 / factor, 2 * width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(2 * width / 3 - 2, 2 * width / 3 - 2, 5, 5); + g2d.fillOval(2 * width / 3 - 2 / factor, 2 * width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(BORDER_COLOR); - g2d.drawOval(2 * width / 3 - 2, 2 * width / 3 - 2, 5, 5); + g2d.drawOval(2 * width / 3 - 2 / factor, 2 * width / 3 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java index 82851287..f338a000 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java @@ -33,18 +33,20 @@ public class PerfBoard extends AbstractBoard { protected Color padColor = COPPER_COLOR; @Override - public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, - Project project, IDrawingObserver drawingObserver) { + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, secondPoint.y) + if (checkPointsClipped(clip) + && !clip.contains(firstPoint.x, secondPoint.y) && !clip.contains(secondPoint.x, firstPoint.y)) { return; } super.draw(g2d, componentState, outlineMode, project, drawingObserver); if (componentState != ComponentState.DRAGGING) { if (alpha < MAX_ALPHA) { - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha - / MAX_ALPHA)); + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } Point p = new Point(firstPoint); int diameter = getClosestOdd((int) PAD_SIZE.convertToPixels()); @@ -57,15 +59,17 @@ public class PerfBoard extends AbstractBoard { while (p.x < secondPoint.x - spacing - diameter) { p.x += spacing; g2d.setColor(padColor); - g2d.fillOval(p.x - diameter / 2, p.y - diameter / 2, diameter, diameter); + g2d.fillOval(p.x - diameter / 2, p.y - diameter / 2, + diameter, diameter); g2d.setColor(padColor.darker()); - g2d.drawOval(p.x - diameter / 2, p.y - diameter / 2, diameter, diameter); + g2d.drawOval(p.x - diameter / 2, p.y - diameter / 2, + diameter, diameter); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, - holeDiameter); + g2d.fillOval(p.x - holeDiameter / 2, + p.y - holeDiameter / 2, holeDiameter, holeDiameter); g2d.setColor(padColor.darker()); - g2d.drawOval(p.x - holeDiameter / 2, p.y - holeDiameter / 2, holeDiameter, - holeDiameter); + g2d.drawOval(p.x - holeDiameter / 2, + p.y - holeDiameter / 2, holeDiameter, holeDiameter); } } super.drawCoordinates(g2d, spacing); @@ -92,17 +96,22 @@ public class PerfBoard extends AbstractBoard { @Override public void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; g2d.setColor(BOARD_COLOR); - g2d.fillRect(2, 2, width - 4, height - 4); + g2d.fillRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); g2d.setColor(BORDER_COLOR); - g2d.drawRect(2, 2, width - 4, height - 4); + g2d.drawRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); g2d.setColor(COPPER_COLOR); g2d.fillOval(width / 4, width / 4, width / 2, width / 2); g2d.setColor(COPPER_COLOR.darker()); g2d.drawOval(width / 4, width / 4, width / 2, width / 2); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(width / 2 - 2, width / 2 - 2, 5, 5); + g2d.fillOval(width / 2 - 2 / factor, width / 2 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(COPPER_COLOR.darker()); - g2d.drawOval(width / 2 - 2, width / 2 - 2, 5, 5); + g2d.drawOval(width / 2 - 2 / factor, width / 2 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java index 4fb25475..3a8ba7de 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java @@ -36,10 +36,12 @@ public class VeroBoard extends AbstractBoard { protected OrientationHV orientation = OrientationHV.HORIZONTAL; @Override - public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, - Project project, IDrawingObserver drawingObserver) { + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { Shape clip = g2d.getClip(); - if (checkPointsClipped(clip) && !clip.contains(firstPoint.x, secondPoint.y) + if (checkPointsClipped(clip) + && !clip.contains(firstPoint.x, secondPoint.y) && !clip.contains(secondPoint.x, firstPoint.y)) { return; } @@ -47,8 +49,8 @@ public class VeroBoard extends AbstractBoard { if (componentState != ComponentState.DRAGGING) { Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha - / MAX_ALPHA)); + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } Point p = new Point(firstPoint); int stripSize = getClosestOdd((int) STRIP_SIZE.convertToPixels()); @@ -60,17 +62,19 @@ public class VeroBoard extends AbstractBoard { p.x = firstPoint.x; p.y += spacing; g2d.setColor(stripColor); - g2d.fillRect(p.x + spacing / 2, p.y - stripSize / 2, secondPoint.x - spacing - - p.x, stripSize); + g2d.fillRect(p.x + spacing / 2, p.y - stripSize / 2, + secondPoint.x - spacing - p.x, stripSize); g2d.setColor(stripColor.darker()); - g2d.drawRect(p.x + spacing / 2, p.y - stripSize / 2, secondPoint.x - spacing - - p.x, stripSize); + g2d.drawRect(p.x + spacing / 2, p.y - stripSize / 2, + secondPoint.x - spacing - p.x, stripSize); while (p.x < secondPoint.x - spacing - holeSize) { p.x += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, + holeSize, holeSize); g2d.setColor(stripColor.darker()); - g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, + holeSize, holeSize); } } } else { @@ -78,17 +82,19 @@ public class VeroBoard extends AbstractBoard { p.x += spacing; p.y = firstPoint.y; g2d.setColor(stripColor); - g2d.fillRect(p.x - stripSize / 2, p.y + spacing / 2, stripSize, secondPoint.y - - spacing - p.y); + g2d.fillRect(p.x - stripSize / 2, p.y + spacing / 2, + stripSize, secondPoint.y - spacing - p.y); g2d.setColor(stripColor.darker()); - g2d.drawRect(p.x - stripSize / 2, p.y + spacing / 2, stripSize, secondPoint.y - - spacing - p.y); + g2d.drawRect(p.x - stripSize / 2, p.y + spacing / 2, + stripSize, secondPoint.y - spacing - p.y); while (p.y < secondPoint.y - spacing - holeSize) { p.y += spacing; g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.fillOval(p.x - holeSize / 2, p.y - holeSize / 2, + holeSize, holeSize); g2d.setColor(stripColor.darker()); - g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, holeSize, holeSize); + g2d.drawOval(p.x - holeSize / 2, p.y - holeSize / 2, + holeSize, holeSize); } } } @@ -126,19 +132,26 @@ public class VeroBoard extends AbstractBoard { @Override public void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; g2d.setColor(BOARD_COLOR); - g2d.fillRect(2, 2, width - 4, height - 4); + g2d.fillRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); g2d.setColor(BORDER_COLOR); - g2d.drawRect(2, 2, width - 4, height - 4); + g2d.drawRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); g2d.setColor(STRIP_COLOR); - g2d.fillRect(4, width / 4, width - 8, width / 2); + g2d.fillRect(4 / factor, width / 4, width - 8 / factor, width / 2); g2d.setColor(STRIP_COLOR.darker()); - g2d.drawRect(4, width / 4, width - 8, width / 2); + g2d.drawRect(4 / factor, width / 4, width - 8 / factor, width / 2); g2d.setColor(Constants.CANVAS_COLOR); - g2d.fillOval(width / 3 - 2, width / 2 - 2, 5, 5); - g2d.fillOval(2 * width / 3 - 2, width / 2 - 2, 5, 5); + g2d.fillOval(width / 3 - 2 / factor, width / 2 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); + g2d.fillOval(2 * width / 3 - 2 / factor, width / 2 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); g2d.setColor(STRIP_COLOR.darker()); - g2d.drawOval(width / 3 - 2, width / 2 - 2, 5, 5); - g2d.drawOval(2 * width / 3 - 2, width / 2 - 2, 5, 5); + g2d.drawOval(width / 3 - 2 / factor, width / 2 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); + g2d.drawOval(2 * width / 3 - 2 / factor, width / 2 - 2 / factor, + getClosestOdd(5.0 / factor), getClosestOdd(5.0 / factor)); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/GroundFill.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/GroundFill.java new file mode 100644 index 00000000..c76b601a --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/GroundFill.java @@ -0,0 +1,144 @@ +package org.diylc.components.connectivity; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.util.Arrays; + +import org.diylc.common.ObjectCache; +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; + +@ComponentDescriptor(name = "Ground Fill", author = "Branislav Stojkovic", category = "Connectivity", instanceNamePrefix = "GF", description = "Polygonal ground fill area", zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false) +public class GroundFill extends AbstractComponent { + + private static final long serialVersionUID = 1L; + + public static Color COLOR = Color.black; + public static Size DEFAULT_WIDTH = new Size(1.5d, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in); + + protected Point[] controlPoints = new Point[] { + new Point(0, 0), + new Point(0, (int) DEFAULT_HEIGHT.convertToPixels()), + new Point((int) DEFAULT_WIDTH.convertToPixels(), + (int) DEFAULT_HEIGHT.convertToPixels()), + new Point((int) DEFAULT_WIDTH.convertToPixels(), 0) }; + + protected Color color = COLOR; + protected PointCount pointCount = PointCount._4; + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + Color fillColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : color; + g2d.setColor(fillColor); + int[] xPoints = new int[controlPoints.length]; + int[] yPoints = new int[controlPoints.length]; + for (int i = 0; i < controlPoints.length; i++) { + xPoints[i] = controlPoints[i].x; + yPoints[i] = controlPoints[i].y; + } + g2d.fillPolygon(xPoints, yPoints, controlPoints.length); + // Do not track any changes that follow because the whole board has been + // tracked so far. + drawingObserver.stopTracking(); + } + + @EditableProperty(name = "Color") + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.WHEN_SELECTED; + } + + @Override + public void setControlPoint(Point point, int index) { + controlPoints[index].setLocation(point); + } + + @EditableProperty(name = "Edges") + public PointCount getPointCount() { + return pointCount; + } + + public void setPointCount(PointCount pointCount) { + if (this.pointCount == pointCount) + return; + int oldPointCount = Integer.parseInt(this.pointCount.toString()); + int newPointCount = Integer.parseInt(pointCount.toString()); + this.controlPoints = Arrays.copyOf(this.controlPoints, newPointCount); + if (oldPointCount < newPointCount) { + this.controlPoints[newPointCount - 1] = this.controlPoints[oldPointCount - 1]; + for (int i = oldPointCount - 1; i < newPointCount - 1; i++) { + this.controlPoints[i] = new Point( + (this.controlPoints[i - 1].x + this.controlPoints[newPointCount - 1].x) / 2, + (this.controlPoints[i - 1].y + this.controlPoints[newPointCount - 1].y) / 2); + } + } + this.pointCount = pointCount; + } + + @Deprecated + @Override + public Void getValue() { + return null; + } + + @Deprecated + @Override + public void setValue(Void value) { + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; + g2d.setColor(COLOR); + int[] x = {2 / factor, width - 2 / factor, width - 4 / factor, 3 / factor}; + int[] y = {4 / factor, 2 / factor, height - 5 / factor, height - 2 / factor}; + g2d.fillPolygon(x, y, 4); + } + + public enum PointCount { + _3, _4, _5, _6, _7, _8; + + public String toString() { + return name().substring(1); + }; + } +}