/******************************************************************************* * Copyright (c) 2014, 2015 itemis AG and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Alexander Nyßen (itemis AG) - initial API and implementation * *******************************************************************************/ package org.eclipse.gef.fx.examples; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.gef.fx.nodes.GeometryNode; import org.eclipse.gef.geometry.planar.BezierCurve; import org.eclipse.gef.geometry.planar.CurvedPolygon; import org.eclipse.gef.geometry.planar.Line; import org.eclipse.gef.geometry.planar.PolyBezier; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.effect.Blend; import javafx.scene.effect.BlendMode; import javafx.scene.effect.DropShadow; import javafx.scene.effect.Effect; import javafx.scene.effect.Light.Distant; import javafx.scene.effect.Lighting; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; public class GeometryNodeSnippet extends AbstractFxExample { private static final Color GEF_COLOR_BLUE = Color.rgb(135, 150, 220); private static final Effect GEF_SHADOW_EFFECT = createShadowEffect(); protected static CurvedPolygon createEShapeGeometry() { final List<BezierCurve> segments = new ArrayList<>(); segments.add(new Line(1, 10, 6, 10)); segments.addAll(Arrays.asList( PolyBezier.interpolateCubic(6, 10, 5, 25, 7, 52, 6, 70, 6, 81) .toBezier())); segments.addAll(Arrays.asList( PolyBezier.interpolateCubic(6, 81, 5, 81, 3, 84).toBezier())); segments.add(new Line(3, 84, 3, 87)); segments.add(new Line(3, 87, 64, 86)); segments.add(new Line(64, 86, 65, 79)); segments.addAll(Arrays.asList(PolyBezier .interpolateCubic(65, 79, 59, 81, 51, 82).toBezier())); segments.add(new Line(51, 82, 12, 82)); segments.addAll(Arrays.asList(PolyBezier .interpolateCubic(12, 82, 11, 56, 11, 30).toBezier())); segments.addAll(Arrays.asList(PolyBezier .interpolateCubic(11, 30, 27, 30, 45, 31).toBezier())); segments.add(new Line(45, 31, 48, 25)); segments.addAll(Arrays.asList(PolyBezier .interpolateCubic(48, 25, 35, 27, 19, 27, 10, 26).toBezier())); segments.addAll(Arrays.asList(PolyBezier .interpolateCubic(10, 26, 10, 20, 11, 10).toBezier())); segments.addAll(Arrays.asList(PolyBezier .interpolateCubic(11, 10, 24, 11, 31, 11, 51, 12).toBezier())); segments.add(new Line(51, 12, 55, 6)); segments.addAll(Arrays.asList( PolyBezier.interpolateCubic(55, 6, 45, 7, 33, 8, 15, 7, 7, 6) .toBezier())); segments.add(new Line(7, 6, 1, 10)); return new CurvedPolygon(segments); } protected static Effect createShadowEffect() { final DropShadow outerShadow = new DropShadow(); outerShadow.setRadius(3); outerShadow.setSpread(0.2); outerShadow.setOffsetX(3); outerShadow.setOffsetY(3); outerShadow.setColor(new Color(0.3, 0.3, 0.3, 1)); final Distant light = new Distant(); light.setAzimuth(-135.0f); final Lighting l = new Lighting(); l.setLight(light); l.setSurfaceScale(3.0f); final Blend effects = new Blend(BlendMode.MULTIPLY); effects.setTopInput(l); effects.setBottomInput(outerShadow); return effects; } public static void main(final String[] args) { Application.launch(args); } public GeometryNodeSnippet() { super("GeometryNode Snippet"); } @Override public Scene createScene() { final GeometryNode<CurvedPolygon> eLetterShape = new GeometryNode<>( createEShapeGeometry()); eLetterShape.relocate(25, 25); eLetterShape.resize(250, 250); eLetterShape.setEffect(GEF_SHADOW_EFFECT); eLetterShape.setFill(GEF_COLOR_BLUE); eLetterShape.setManaged(false); final HBox hbox = new HBox(); hbox.getChildren().add(eLetterShape); return new Scene(hbox, 300, 300); } }