Added bevel shape option for rectangular visuals.
diff --git a/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/.ratings b/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/.ratings
index ea2b56d..921faf5 100644
--- a/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/.ratings
+++ b/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/.ratings
@@ -1,4 +1,4 @@
-BaseFunctionContentVisual.java b6b1bb1a6e30be4a4dfbba78a2810b8b7cee3ba4 YELLOW
+BaseFunctionContentVisual.java d050b49ecd7097f036a89b59957564326e67e522 RED
 ConjunctiveFunctionContentVisual.java 2e335e4562b419bc9a6c2297d9974e5ad5d65113 YELLOW
 DisjunctiveFunctionContentVisual.java 0ad4cfdac1c828a3fbcc19b07d9aa72be26f36bf YELLOW
 FunctionContentVisualBase.java 3b6c3c09771023d72c00418a24b43c6ad2bad374 YELLOW
diff --git a/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/BaseFunctionContentVisual.java b/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/BaseFunctionContentVisual.java
index b6d69b6..d050b49 100644
--- a/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/BaseFunctionContentVisual.java
+++ b/example/org.eclipse.systemfocus.examples.function.architecture/src/org/eclipse/systemfocus/examples/function/architecture/editor/visual/BaseFunctionContentVisual.java
@@ -33,4 +33,10 @@
 	protected Paint getFillColor() {
 		return ANTIQUEWHITE;
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected boolean useRoundedRectangle() {
+		return false;
+	}
 }
diff --git a/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/.ratings b/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/.ratings
index e98aa56..14c307f 100644
--- a/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/.ratings
+++ b/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/.ratings
@@ -2,5 +2,5 @@
 LineSegment.java f5da73d032d9b7a27325bcc9b46147db085de250 YELLOW
 RectangularBorderLocation.java c6c8641012c31e0bb939e6bdf0dfa1f020cc3c51 YELLOW
 RectangularContentAnchorageVisualBase.java b01234e8b3d087f946ba1663f7115ba9e0e00e2e YELLOW
-RectangularContentVisualBase.java bb4fc2609ab947797142d9f18e24d307689ceec9 YELLOW
+RectangularContentVisualBase.java 960d90cc4f14d8a191b9a8211ebd6a0fa4f92cde YELLOW
 RectangularDiagramAnchorageVisualBase.java 61969770e0bc180b2ac254f08c4006bb8d8e72d3 YELLOW
diff --git a/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/RectangularContentVisualBase.java b/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/RectangularContentVisualBase.java
index bb4fc26..960d90c 100644
--- a/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/RectangularContentVisualBase.java
+++ b/org.eclipse.systemfocus.kernel.common.ui/src/org/eclipse/systemfocus/kernel/common/ui/javafx/lwfxef/visual/rectangular/RectangularContentVisualBase.java
@@ -21,6 +21,7 @@
 import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.visual.IContentAnchorageVisual;
 import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.visual.base.ResizableContentVisualBase;
 
+import javafx.collections.ObservableList;
 import javafx.geometry.Dimension2D;
 import javafx.geometry.Insets;
 import javafx.geometry.Point2D;
@@ -28,6 +29,10 @@
 import javafx.geometry.VPos;
 import javafx.scene.Node;
 import javafx.scene.effect.DropShadow;
+import javafx.scene.shape.LineTo;
+import javafx.scene.shape.MoveTo;
+import javafx.scene.shape.Path;
+import javafx.scene.shape.PathElement;
 import javafx.scene.shape.Rectangle;
 import javafx.scene.text.Text;
 import javafx.scene.text.TextAlignment;
@@ -36,6 +41,8 @@
 public abstract class RectangularContentVisualBase extends ResizableContentVisualBase {
 	/** The rectangle node of this visual. */
 	private final Rectangle rectangle;
+	/** The path node used for bevel bordered shape. */
+	private final Path bevelShape;
 	/** The text of this visual. */
 	private final Text text;
 
@@ -43,31 +50,59 @@
 	public RectangularContentVisualBase(IContentMVCBundle mvcb) {
 		super(mvcb);
 		rectangle = new Rectangle();
+		bevelShape = new Path();
 		text = new Text();
 	}
 
 	/** Updates the properties of the rectangle and the label. */
 	protected void updateNodeProperties() {
 		Rectangle2D bounds = getCurrentBounds();
-		rectangle.setX(bounds.getMinX());
-		rectangle.setY(bounds.getMinY());
-		rectangle.setWidth(bounds.getWidth());
-		rectangle.setHeight(bounds.getHeight());
-		Dimension2D cornerArc = getCornerArcDimensions();
-		rectangle.setArcWidth(cornerArc.getWidth());
-		rectangle.setArcHeight(cornerArc.getHeight());
-		rectangle.setOpacity(getOpacity());
-		rectangle.setStroke(getBorderColor());
-		rectangle.setStrokeWidth(getBorderWidth());
-		rectangle.setStrokeType(getBorderType());
-		rectangle.setFill(getFillColor());
-
+		double leftX = bounds.getMinX();
+		double rightX = bounds.getMaxX();
+		double upperY = bounds.getMinY();
+		double lowerY = bounds.getMaxY();
+		double width = bounds.getWidth();
+		double height = bounds.getHeight();
+		if(useRoundedRectangle()) {
+			rectangle.setX(leftX);
+			rectangle.setY(upperY);
+			rectangle.setWidth(width);
+			rectangle.setHeight(height);
+			Dimension2D cornerArc = getCornerArcDimensions();
+			rectangle.setArcWidth(cornerArc.getWidth());
+			rectangle.setArcHeight(cornerArc.getHeight());
+			rectangle.setOpacity(getOpacity());
+			rectangle.setStroke(getBorderColor());
+			rectangle.setStrokeWidth(getBorderWidth());
+			rectangle.setStrokeType(getBorderType());
+			rectangle.setFill(getFillColor());
+		} else {
+			Dimension2D bevelDist = getBevelDistance();
+			double dx = bevelDist.getWidth();
+			double dy = bevelDist.getHeight();
+			ObservableList<PathElement> path = bevelShape.getElements();
+			path.clear();
+			path.add(new MoveTo(leftX, upperY + dy));
+			path.add(new LineTo(leftX + dx, upperY));
+			path.add(new LineTo(rightX - dx, upperY));
+			path.add(new LineTo(rightX, upperY + dy));
+			path.add(new LineTo(rightX, lowerY - dy));
+			path.add(new LineTo(rightX - dx, lowerY));
+			path.add(new LineTo(leftX + dx, lowerY));
+			path.add(new LineTo(leftX, lowerY - dy));
+			path.add(new LineTo(leftX, upperY + dy));
+			bevelShape.setOpacity(getOpacity());
+			bevelShape.setStroke(getBorderColor());
+			bevelShape.setStrokeWidth(getBorderWidth());
+			bevelShape.setStrokeType(getBorderType());
+			bevelShape.setFill(getFillColor());
+		}
 		text.setText(getName());
 		Insets i = getTextInsets();
 		Point2D anchorLocation = getTextAnchorLocation();
-		text.setX(bounds.getMinX() + anchorLocation.getX() + i.getLeft());
-		text.setY(bounds.getMinY() + anchorLocation.getY() + i.getTop());
-		text.setWrappingWidth(bounds.getWidth() - i.getLeft() - i.getRight());
+		text.setX(leftX + anchorLocation.getX() + i.getLeft());
+		text.setY(upperY + anchorLocation.getY() + i.getTop());
+		text.setWrappingWidth(width - i.getLeft() - i.getRight());
 		text.setTextAlignment(getHorizontalTextAlignment());
 		text.setTextOrigin(getVerticalTextAlignment());
 	}
@@ -99,7 +134,11 @@
 	public void addNodes(DiagramLayers layers) {
 		IContentMVCBundle mvcBundle = getMVCBundle();
 		updateNodeProperties();
-		layers.getContentLayer().add(rectangle, mvcBundle);
+		if(useRoundedRectangle()) {
+			layers.getContentLayer().add(rectangle, mvcBundle);
+		} else {
+			layers.getContentLayer().add(bevelShape, mvcBundle);
+		}
 		layers.getTextLayer().add(text, mvcBundle);
 	}
 
@@ -115,6 +154,7 @@
 	public void removeNodes(DiagramLayers layers) {
 		layers.getTextLayer().remove(text);
 		layers.getContentLayer().remove(rectangle);
+		layers.getContentLayer().remove(bevelShape);
 	}
 
 	/** {@inheritDoc} */
@@ -149,16 +189,29 @@
 		return new Dimension2D(15, 15);
 	}
 
+	/** Returns the dimensions of the bevel distance. */
+	protected Dimension2D getBevelDistance() {
+		return new Dimension2D(20, 20);
+	}
+
+	/** Returns whether this shape uses a rounded rectangle or a bevel eight-corner shape. */
+	protected boolean useRoundedRectangle() {
+		return true;
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	protected void createHoverEffect(DiagramLayers layers) {
-		rectangle.setEffect(new DropShadow(10, 3, 3, GRAY));
+		DropShadow ds = new DropShadow(10, 3, 3, GRAY);
+		rectangle.setEffect(ds);
+		rectangle.setEffect(ds);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	protected void removeHoverEffect(DiagramLayers layers) {
 		rectangle.setEffect(null);
+		bevelShape.setEffect(null);
 	}
 
 	/** {@inheritDoc} */
@@ -177,4 +230,9 @@
 	protected Rectangle getRectangleNode() {
 		return rectangle;
 	}
+
+	/** Returns the bevel shape. */
+	protected Path getBevelShape() {
+		return bevelShape;
+	}
 }