| DemoProfitModel.java |
1 /****************************************************************************
2 * This demo file is part of yFiles for Java 2.14.
3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28,
4 * 72070 Tuebingen, Germany. All rights reserved.
5 *
6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution
7 * of demo files in source code or binary form, with or without
8 * modification, is not permitted.
9 *
10 * Owners of a valid software license for a yFiles for Java version that this
11 * demo is shipped with are allowed to use the demo source code as basis
12 * for their own yFiles for Java powered applications. Use of such programs is
13 * governed by the rights and conditions as set out in the yFiles for Java
14 * license agreement.
15 *
16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 ***************************************************************************/
28 package demo.layout.labeling;
29
30 import y.layout.ProfitModel;
31 import y.layout.LabelCandidate;
32 import y.layout.EdgeLabelModel;
33 import y.layout.RotatedSliderEdgeLabelModel;
34 import y.layout.RotatedDiscreteEdgeLabelModel;
35 import demo.layout.labeling.CompositeEdgeLabelModel;
36
37 /**
38 * A simple profit model used by the edge labeling demo.
39 *
40 */
41 public class DemoProfitModel implements ProfitModel {
42 private double angle;
43 private double angleProfit;
44 private double otherProfit;
45
46 /**
47 * For a given label candidate lc this profit model returns profit "angleProfit" if lc's angle == "angle"
48 * and profit "otherProfit", otherwise.
49 *
50 * @param angle the value of the angle (in radians) that has profit "angleProfit"
51 * @param angleProfit the profit used for angles with value "angle"
52 * @param otherProfit the profit used for angles with values != "angle"
53 */
54 public DemoProfitModel(double angle, double angleProfit, double otherProfit) {
55 this.angle = angle;
56 this.angleProfit = angleProfit;
57 this.otherProfit = otherProfit;
58 }
59
60 public double getProfit(LabelCandidate candidate) {
61 Object param = candidate.getModelParameter();
62 if (param instanceof CompositeEdgeLabelModel.ModelParameter) {
63 double angle = determineAngle((CompositeEdgeLabelModel.ModelParameter) param);
64 if (angle == this.angle) {
65 return angleProfit;
66 }
67 }
68 return otherProfit;
69 }
70
71 //returns the angle encoded by the given model parameter
72 private static double determineAngle(CompositeEdgeLabelModel.ModelParameter param) {
73 EdgeLabelModel elm = param.getModel();
74 double angle = 0;
75 if(elm instanceof RotatedSliderEdgeLabelModel) {
76 angle = ((RotatedSliderEdgeLabelModel) elm).getAngle();
77 } else if(elm instanceof RotatedDiscreteEdgeLabelModel) {
78 angle = ((RotatedDiscreteEdgeLabelModel) elm).getAngle();
79 } else {
80 throw new RuntimeException("Unknown EdgeLableModel!");
81 }
82 return angle;
83 }
84 }
85