001: /***********************************************************************************************
002: * Copyright 2002 (C) Nathaniel G. Auvil. All Rights Reserved.
003: *
004: * Redistribution and use of this software and associated documentation ("Software"), with or
005: * without modification, are permitted provided that the following conditions are met:
006: *
007: * 1. Redistributions of source code must retain copyright statements and notices.
008: * Redistributions must also contain a copy of this document.
009: *
010: * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
011: * conditions and the following disclaimer in the documentation and/or other materials
012: * provided with the distribution.
013: *
014: * 3. The name "jCharts" or "Nathaniel G. Auvil" must not be used to endorse or promote
015: * products derived from this Software without prior written permission of Nathaniel G.
016: * Auvil. For written permission, please contact nathaniel_auvil@users.sourceforge.net
017: *
018: * 4. Products derived from this Software may not be called "jCharts" nor may "jCharts" appear
019: * in their names without prior written permission of Nathaniel G. Auvil. jCharts is a
020: * registered trademark of Nathaniel G. Auvil.
021: *
022: * 5. Due credit should be given to the jCharts Project (http://jcharts.sourceforge.net/).
023: *
024: * THIS SOFTWARE IS PROVIDED BY Nathaniel G. Auvil AND CONTRIBUTORS ``AS IS'' AND ANY
025: * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
026: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
027: * jCharts OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
028: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
029: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
030: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,STRICT LIABILITY, OR TORT
031: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
032: * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
033: ************************************************************************************************/package org.krysalis.jcharts.axisChart;
034:
035: import org.krysalis.jcharts.chartData.interfaces.IStockChartDataSet;
036: import org.krysalis.jcharts.chartData.interfaces.IDataSeries;
037: import org.krysalis.jcharts.imageMap.CircleMapArea;
038: import org.krysalis.jcharts.properties.StockChartProperties;
039: import org.krysalis.jcharts.properties.DataAxisProperties;
040: import org.krysalis.jcharts.types.StockChartDataType;
041:
042: import java.awt.*;
043: import java.awt.geom.Line2D;
044:
045: /*************************************************************************************
046: *
047: * @author Nathaniel Auvil
048: * @version $Id: StockChart.java,v 1.1 2003/05/17 16:56:57 nathaniel_auvil Exp $
049: ************************************************************************************/
050: abstract class StockChart {
051:
052: /********************************************************************************************
053: * Draws the chart
054: *
055: * @param axisChart
056: * @param iStockChartDataSet
057: *********************************************************************************************/
058: static final void render(AxisChart axisChart,
059: IStockChartDataSet iStockChartDataSet) {
060: StockChartProperties stockChartProperties = (StockChartProperties) iStockChartDataSet
061: .getChartTypeProperties();
062: Graphics2D g2d = axisChart.getGraphics2D();
063:
064: DataAxisProperties dataAxisProperties = (DataAxisProperties) axisChart
065: .getAxisProperties().getYAxisProperties();
066: IDataSeries iDataSeries = (IDataSeries) axisChart
067: .getIAxisDataSeries();
068:
069: //---cache the computed values
070: //float[][] yAxisCoordinates=new float[ iStockChartDataSet.getNumberOfDataSets() ][ iStockChartDataSet.getNumberOfDataItems() ];
071:
072: //---init for first segment
073: Line2D.Float line = new Line2D.Float(axisChart.getXAxis()
074: .getTickStart(), 0,
075: axisChart.getXAxis().getTickStart(), 0);
076:
077: Line2D.Float openLine = null;
078: if (iStockChartDataSet.hasOpenValues()) {
079: openLine = new Line2D.Float(axisChart.getXAxis()
080: .getTickStart()
081: - stockChartProperties.getOpenPixelLength() - 1, 0,
082: axisChart.getXAxis().getTickStart() - 1, 0);
083: }
084:
085: Line2D.Float closeLine = null;
086: if (iStockChartDataSet.hasCloseValues()) {
087: closeLine = new Line2D.Float(axisChart.getXAxis()
088: .getTickStart() + 1, 0, axisChart.getXAxis()
089: .getTickStart()
090: + stockChartProperties.getClosePixelLength() + 1, 0);
091: }
092:
093: //LOOP
094: //---draw each line to the image
095: for (int i = 0; i < iStockChartDataSet.getNumberOfDataItems(); i++) {
096: line.y1 = axisChart.getYAxis().computeAxisCoordinate(
097: axisChart.getYAxis().getOrigin(),
098: iStockChartDataSet.getLowValue(i),
099: axisChart.getYAxis().getScaleCalculator()
100: .getMinValue());
101: line.y2 = axisChart.getYAxis().computeAxisCoordinate(
102: axisChart.getYAxis().getOrigin(),
103: iStockChartDataSet.getHighValue(i),
104: axisChart.getYAxis().getScaleCalculator()
105: .getMinValue());
106:
107: String label;
108: if (axisChart.getXAxis().getAxisLabelsGroup() != null) {
109: label = axisChart.getXAxis().getAxisLabelsGroup()
110: .getTextTag(i).getText();
111: } else {
112: label = null;
113: }
114:
115: //---if we are generating an ImageMap, store the image coordinates
116: if (axisChart.getGenerateImageMapFlag()) {
117: axisChart
118: .getImageMap()
119: .addImageMapArea(
120: new CircleMapArea(
121: line.x1,
122: line.y1,
123: iStockChartDataSet
124: .getLowValue(i),
125: label,
126: iStockChartDataSet
127: .getLegendLabel(StockChartDataType.LOW
128: .getInt())));
129:
130: axisChart
131: .getImageMap()
132: .addImageMapArea(
133: new CircleMapArea(
134: line.x2,
135: line.y2,
136: iStockChartDataSet
137: .getHighValue(i),
138: label,
139: iStockChartDataSet
140: .getLegendLabel(StockChartDataType.HIGH
141: .getInt())));
142: }
143:
144: g2d.setPaint(iStockChartDataSet
145: .getPaint(StockChartDataType.HIGH.getInt()));
146: g2d.setStroke(stockChartProperties.getHiLowStroke());
147: g2d.draw(line);
148:
149: line.x1 += axisChart.getXAxis().getScalePixelWidth();
150: line.x2 = line.x1;
151:
152: if (openLine != null) {
153: if (iStockChartDataSet.getOpenValue(i) != Double.NaN) {
154: openLine.y1 = axisChart.getYAxis()
155: .computeAxisCoordinate(
156: axisChart.getYAxis().getOrigin(),
157: iStockChartDataSet.getOpenValue(i),
158: axisChart.getYAxis()
159: .getScaleCalculator()
160: .getMinValue());
161: openLine.y2 = openLine.y1;
162:
163: g2d
164: .setPaint(iStockChartDataSet
165: .getPaint(StockChartDataType.OPEN
166: .getInt()));
167: g2d.setStroke(stockChartProperties.getOpenStroke());
168: g2d.draw(openLine);
169:
170: //---if we are generating an ImageMap, store the image coordinates
171: if (axisChart.getGenerateImageMapFlag()) {
172: axisChart
173: .getImageMap()
174: .addImageMapArea(
175: new CircleMapArea(
176: openLine.x1,
177: openLine.y1,
178: iStockChartDataSet
179: .getOpenValue(i),
180: label,
181: iStockChartDataSet
182: .getLegendLabel(StockChartDataType.OPEN
183: .getInt())));
184: }
185:
186: openLine.x1 += axisChart.getXAxis()
187: .getScalePixelWidth();
188: openLine.x2 += axisChart.getXAxis()
189: .getScalePixelWidth();
190: }
191: }
192:
193: if (closeLine != null) {
194: if (iStockChartDataSet.getOpenValue(i) != Double.NaN) {
195: closeLine.y1 = axisChart
196: .getYAxis()
197: .computeAxisCoordinate(
198: axisChart.getYAxis().getOrigin(),
199: iStockChartDataSet.getCloseValue(i),
200: axisChart.getYAxis()
201: .getScaleCalculator()
202: .getMinValue());
203: closeLine.y2 = closeLine.y1;
204:
205: g2d
206: .setPaint(iStockChartDataSet
207: .getPaint(StockChartDataType.CLOSE
208: .getInt()));
209: g2d
210: .setStroke(stockChartProperties
211: .getCloseStroke());
212: g2d.draw(closeLine);
213:
214: //---if we are generating an ImageMap, store the image coordinates
215: if (axisChart.getGenerateImageMapFlag()) {
216: axisChart
217: .getImageMap()
218: .addImageMapArea(
219: new CircleMapArea(
220: closeLine.x2,
221: closeLine.y2,
222: iStockChartDataSet
223: .getCloseValue(i),
224: label,
225: iStockChartDataSet
226: .getLegendLabel(StockChartDataType.CLOSE
227: .getInt())));
228: }
229:
230: closeLine.x1 += axisChart.getXAxis()
231: .getScalePixelWidth();
232: closeLine.x2 += axisChart.getXAxis()
233: .getScalePixelWidth();
234: }
235: }
236: }
237: }
238:
239: }
|