SSJ API Documentation
Stochastic Simulation in Java
Loading...
Searching...
No Matches
EmpiricalRenderer.java
1package umontreal.ssj.charts;
2
3import java.awt.Graphics2D;
4import java.awt.geom.Line2D;
5import java.awt.geom.Rectangle2D;
6import java.awt.Shape;
7import org.jfree.chart.axis.ValueAxis;
8import org.jfree.chart.entity.EntityCollection;
9import org.jfree.chart.entity.XYItemEntity;
10import org.jfree.chart.labels.XYToolTipGenerator;
11import org.jfree.chart.urls.XYURLGenerator;
12import org.jfree.chart.renderer.xy.XYItemRenderer;
13import org.jfree.chart.renderer.xy.XYItemRendererState;
14import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
15import org.jfree.chart.plot.XYPlot;
16import org.jfree.chart.plot.PlotRenderingInfo;
17import org.jfree.chart.plot.PlotOrientation;
18import org.jfree.chart.plot.CrosshairState;
19import org.jfree.data.xy.XYDataset;
20import org.jfree.util.PublicCloneable;
21import org.jfree.util.ShapeUtilities;
22
23/*
24 * Class: EmpiricalRenderer
25 * Description:
26 * Environment: Java
27 * Software: SSJ
28 * Copyright (C) 2001 Pierre L'Ecuyer and Universite de Montreal
29 * Organization: DIRO, Universite de Montreal
30 * @author
31 * @since
32 *
33 *
34 * Licensed under the Apache License, Version 2.0 (the "License");
35 * you may not use this file except in compliance with the License.
36 * You may obtain a copy of the License at
37 *
38 * http://www.apache.org/licenses/LICENSE-2.0
39 *
40 * Unless required by applicable law or agreed to in writing, software
41 * distributed under the License is distributed on an "AS IS" BASIS,
42 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43 * See the License for the specific language governing permissions and
44 * limitations under the License.
45 *
46 */
47
53public class EmpiricalRenderer extends XYLineAndShapeRenderer implements XYItemRenderer, Cloneable, PublicCloneable {
54
59 this(null, null);
60 }
61
68 public EmpiricalRenderer(XYToolTipGenerator toolTipGenerator, XYURLGenerator urlGenerator) {
69 setDefaultToolTipGenerator(toolTipGenerator);
70 setURLGenerator(urlGenerator);
71 setDefaultShapesFilled(true);
72 setDefaultShapesVisible(true);
73 }
74
93 public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info,
94 XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item,
95 CrosshairState crosshairState, int pass) {
96
97 if (!getItemVisible(series, item))
98 return;
99 PlotOrientation orientation = plot.getOrientation();
100 java.awt.Paint seriesPaint = getItemPaint(series, item);
101 java.awt.Stroke seriesStroke = getItemStroke(series, item);
102 g2.setPaint(seriesPaint);
103 g2.setStroke(seriesStroke);
104 double x0 = dataset.getXValue(series, item);
105 double y0 = dataset.getYValue(series, item);
106 if (java.lang.Double.isNaN(y0))
107 return;
108 org.jfree.chart.ui.RectangleEdge xAxisLocation = plot.getDomainAxisEdge();
109 org.jfree.chart.ui.RectangleEdge yAxisLocation = plot.getRangeAxisEdge();
110 double transX0 = domainAxis.valueToJava2D(x0, dataArea, xAxisLocation);
111 double transY0 = rangeAxis.valueToJava2D(y0, dataArea, yAxisLocation);
112
113 double x1 = 0, y1 = 0;
114 if (item < dataset.getItemCount(series) - 1) {
115 x1 = dataset.getXValue(series, item + 1);
116 y1 = dataset.getYValue(series, item + 1);
117 } else {
118 x1 = dataArea.getMaxX();
119 y1 = dataArea.getMaxY();
120 }
121
122 boolean useFillPaint = getUseFillPaint();
123 ;
124 boolean drawOutlines = getDrawOutlines();
125 if (!java.lang.Double.isNaN(y0)) {
126 double transX1;
127 double transY1;
128 if (item < dataset.getItemCount(series) - 1) {
129 transX1 = domainAxis.valueToJava2D(x1, dataArea, xAxisLocation);
130 transY1 = rangeAxis.valueToJava2D(y1, dataArea, yAxisLocation);
131 } else {
132 transX1 = x1;
133 transY1 = y1;
134 }
135 Line2D line = state.workingLine;
136 if (orientation == PlotOrientation.HORIZONTAL) {
137 line.setLine(transY0, transX0, transY0, transX1);
138 g2.draw(line);
139 } else if (orientation == PlotOrientation.VERTICAL) {
140 line.setLine(transX0, transY0, transX1, transY0);
141 g2.draw(line);
142 }
143 }
144 if (getItemShapeVisible(series, item)) {
145 Shape shape = getItemShape(series, item);
146 if (orientation == PlotOrientation.HORIZONTAL)
147 shape = ShapeUtilities.createTranslatedShape(shape, transY0, transX0);
148 else if (orientation == PlotOrientation.VERTICAL)
149 shape = ShapeUtilities.createTranslatedShape(shape, transX0, transY0);
150 if (shape.intersects(dataArea)) {
151 if (getItemShapeFilled(series, item)) {
152 if (useFillPaint)
153 g2.setPaint(getItemFillPaint(series, item));
154 else
155 g2.setPaint(getItemPaint(series, item));
156 g2.fill(shape);
157 }
158 if (drawOutlines) {
159 if (getUseOutlinePaint())
160 g2.setPaint(getItemOutlinePaint(series, item));
161 else
162 g2.setPaint(getItemPaint(series, item));
163 g2.setStroke(getItemOutlineStroke(series, item));
164 g2.draw(shape);
165 }
166 }
167 }
168 if (isItemLabelVisible(series, item)) {
169 double xx = transX0;
170 double yy = transY0;
171 if (orientation == PlotOrientation.HORIZONTAL) {
172 xx = transY0;
173 yy = transX0;
174 }
175 drawItemLabel(g2, orientation, dataset, series, item, xx, yy, y0 < 0.0D);
176 }
177 int domainAxisIndex = plot.getDomainAxisIndex(domainAxis);
178 // int rangeAxisIndex = plot.getRangeAxisIndex(rangeAxis);
179 // ???????????????????????????????????????????????????????
180 // int datasetIndex = getIndexOf();
181 // ? Should be dataset index, but how can we get it ????
182 //
183 updateCrosshairValues(crosshairState, x0, y0, domainAxisIndex, transX0, transY0, orientation);
184 if (state.getInfo() != null) {
185 EntityCollection entities = state.getEntityCollection();
186 if (entities != null) {
187 int r = getDefaultEntityRadius();
188 java.awt.Shape shape = orientation != PlotOrientation.VERTICAL
189 ? ((java.awt.Shape) (new java.awt.geom.Rectangle2D.Double(transY0 - (double) r, transX0 - (double) r,
190 2 * r, 2 * r)))
191 : ((java.awt.Shape) (new java.awt.geom.Rectangle2D.Double(transX0 - (double) r, transY0 - (double) r,
192 2 * r, 2 * r)));
193 if (shape != null) {
194 String tip = null;
195 XYToolTipGenerator generator = getToolTipGenerator(series, item);
196 if (generator != null)
197 tip = generator.generateToolTip(dataset, series, item);
198 String url = null;
199 if (getURLGenerator() != null)
200 url = getURLGenerator().generateURL(dataset, series, item);
201 XYItemEntity entity = new XYItemEntity(shape, dataset, series, item, tip, url);
202 entities.add(entity);
203 }
204 }
205 }
206 }
207
215 public Object clone() throws CloneNotSupportedException {
216 return super.clone();
217 }
218}
Object clone()
Returns a clone of the renderer.
EmpiricalRenderer(XYToolTipGenerator toolTipGenerator, XYURLGenerator urlGenerator)
Creates a new renderer with selected tool tip and url generators.
void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass)
Draws the visual representation of a single data item.