]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/rendering/arrows/ArrowExampleLineEndStyle.java
Round corners between non-axis-aligned connection lines properly
[simantics/platform.git] / bundles / org.simantics.diagram.connection / src / org / simantics / diagram / connection / rendering / arrows / ArrowExampleLineEndStyle.java
1 /*******************************************************************************
2  * Copyright (c) 2011 Association for Decentralized Information Management in
3  * Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.diagram.connection.rendering.arrows;
13
14 import java.awt.Graphics2D;
15 import java.awt.geom.AffineTransform;
16 import java.awt.geom.Path2D;
17 import java.awt.geom.Rectangle2D;
18 import java.io.Serializable;
19
20
21 /**
22  * @author Hannu Niemistö
23  */
24 public enum ArrowExampleLineEndStyle implements ILineEndStyle, Serializable {
25     INSTANCE;
26
27     public static final double length = 8.0;
28     public static final double width = 4.0;
29     public static final double space = 10.0;
30     
31     @Override
32     public void render(Graphics2D g, double x, double y, int dir) {
33         AffineTransform old = g.getTransform();
34         g.translate(x, y);
35         g.rotate(dir*Math.PI*0.5);
36
37         //g.setColor(Color.BLACK);
38
39         g.fill(new Rectangle2D.Double(
40                 -10, -10, 20, 20
41                 ));
42
43         Path2D.Double path = new Path2D.Double();
44         path.moveTo(-space, 0);
45         path.lineTo(-length-space, -width);
46         path.lineTo(-length-space, +width);
47         path.closePath();
48
49         g.fill(path);
50         g.setTransform(old);
51     }
52
53     @Override
54     public double getLineEndLength(int direction) {
55         return length+space;
56     }
57 }