1
14 package demo.layout.labeling;
15
16 import y.layout.ProfitModel;
17 import y.layout.LabelCandidate;
18 import y.layout.EdgeLabelModel;
19 import y.layout.RotatedSliderEdgeLabelModel;
20 import y.layout.RotatedDiscreteEdgeLabelModel;
21 import demo.layout.labeling.CompositeEdgeLabelModel;
22
23
27 public class DemoProfitModel implements ProfitModel {
28 private double angle;
29 private double angleProfit;
30 private double otherProfit;
31
32
40 public DemoProfitModel(double angle, double angleProfit, double otherProfit) {
41 this.angle = angle;
42 this.angleProfit = angleProfit;
43 this.otherProfit = otherProfit;
44 }
45
46 public double getProfit(LabelCandidate candidate) {
47 Object param = candidate.getModelParameter();
48 if (param instanceof CompositeEdgeLabelModel.ModelParameter) {
49 double angle = determineAngle((CompositeEdgeLabelModel.ModelParameter) param);
50 if (angle == this.angle) {
51 return angleProfit;
52 }
53 }
54 return otherProfit;
55 }
56
57 private static double determineAngle(CompositeEdgeLabelModel.ModelParameter param) {
59 EdgeLabelModel elm = param.getModel();
60 double angle = 0;
61 if(elm instanceof RotatedSliderEdgeLabelModel) {
62 angle = ((RotatedSliderEdgeLabelModel) elm).getAngle();
63 } else if(elm instanceof RotatedDiscreteEdgeLabelModel) {
64 angle = ((RotatedDiscreteEdgeLabelModel) elm).getAngle();
65 } else {
66 throw new RuntimeException("Unknown EdgeLableModel!");
67 }
68 return angle;
69 }
70 }
71