krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart BarChart.java,1.1,1.2
"Nathaniel G. Auvil" <[email protected]> Wed, 26 May 2004 01:57:21 +0000
| Newsgroups | gmane.comp.krysalis.jcharts.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11439/src/java/org/krysalis/jcharts/axisChart
Modified Files:
BarChart.java
Log Message:
image maps for zero values on vertical plots. Still need to test User Defined Scale.
Index: BarChart.java
===================================================================
RCS file: /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart/BarChart.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** BarChart.java 17 May 2003 16:56:57 -0000 1.1
--- BarChart.java 26 May 2004 01:57:19 -0000 1.2
***************
*** 33,65 ****
************************************************************************************************/
-
package org.krysalis.jcharts.axisChart;
import org.krysalis.jcharts.axisChart.customRenderers.axisValue.AxisValueRenderEvent;
import org.krysalis.jcharts.chartData.interfaces.IAxisChartDataSet;
import org.krysalis.jcharts.imageMap.RectMapArea;
import org.krysalis.jcharts.properties.BarChartProperties;
import org.krysalis.jcharts.properties.DataAxisProperties;
- import java.awt.*;
- import java.awt.geom.Rectangle2D;
-
! /*************************************************************************************
! *
* @author Nathaniel Auvil
* @version $Id$
! ************************************************************************************/
abstract class BarChart
{
! /********************************************************************************************
! * Draws the chart
! * uses Rectangle2D......keep having rounding problems.
! *
* @param axisChart
* @param iAxisChartDataSet
! *********************************************************************************************/
static void render( AxisChart axisChart, IAxisChartDataSet iAxisChartDataSet )
{
--- 33,63 ----
************************************************************************************************/
package org.krysalis.jcharts.axisChart;
+ import java.awt.Graphics2D;
+ import java.awt.geom.Rectangle2D;
+
import org.krysalis.jcharts.axisChart.customRenderers.axisValue.AxisValueRenderEvent;
import org.krysalis.jcharts.chartData.interfaces.IAxisChartDataSet;
+ import org.krysalis.jcharts.chartText.TextTagGroup;
import org.krysalis.jcharts.imageMap.RectMapArea;
import org.krysalis.jcharts.properties.BarChartProperties;
import org.krysalis.jcharts.properties.DataAxisProperties;
! /*****************************************************************************************
* @author Nathaniel Auvil
* @version $Id$
! ****************************************************************************************/
abstract class BarChart
{
! /***************************************************************************************
! * Draws the chart uses Rectangle2D......keep having rounding problems.
! *
* @param axisChart
* @param iAxisChartDataSet
! **************************************************************************************/
static void render( AxisChart axisChart, IAxisChartDataSet iAxisChartDataSet )
{
***************
*** 76,80 ****
float height;
-
if( axisChart.getAxisProperties().isPlotHorizontal() )
{
--- 74,77 ----
***************
*** 88,92 ****
Rectangle2D.Float rectangle = new Rectangle2D.Float( startingX, startingY, width, height );
! BarChart.horizontalPlot( axisChart, iAxisChartDataSet, barChartProperties, dataAxisProperties, g2d, rectangle, startingX );
}
else
--- 85,95 ----
Rectangle2D.Float rectangle = new Rectangle2D.Float( startingX, startingY, width, height );
! BarChart.horizontalPlot( axisChart,
! iAxisChartDataSet,
! barChartProperties,
! dataAxisProperties,
! g2d,
! rectangle,
! startingX );
}
else
***************
*** 101,111 ****
Rectangle2D.Float rectangle = new Rectangle2D.Float( startingX, startingY, width, height );
! BarChart.verticalPlot( axisChart, iAxisChartDataSet, barChartProperties, dataAxisProperties, g2d, rectangle, startingY );
}
}
! /*********************************************************************************************
! *
* @param axisChart
* @param iAxisChartDataSet
--- 104,119 ----
Rectangle2D.Float rectangle = new Rectangle2D.Float( startingX, startingY, width, height );
! BarChart.verticalPlot( axisChart,
! iAxisChartDataSet,
! barChartProperties,
! dataAxisProperties,
! g2d,
! rectangle,
! startingY );
}
}
! /***************************************************************************************
* @param axisChart
* @param iAxisChartDataSet
***************
*** 115,128 ****
* @param rectangle
* @param startingX
! *********************************************************************************************/
private static void horizontalPlot( AxisChart axisChart,
! IAxisChartDataSet iAxisChartDataSet,
! BarChartProperties barChartProperties,
! DataAxisProperties dataAxisProperties,
! Graphics2D g2d,
! Rectangle2D.Float rectangle,
! float startingX )
{
! int imageMapLabelIndex = axisChart.getYAxis().getNumberOfScaleItems() - 1;
//---setup the total area rectangle
--- 123,136 ----
* @param rectangle
* @param startingX
! **************************************************************************************/
private static void horizontalPlot( AxisChart axisChart,
! IAxisChartDataSet iAxisChartDataSet,
! BarChartProperties barChartProperties,
! DataAxisProperties dataAxisProperties,
! Graphics2D g2d,
! Rectangle2D.Float rectangle,
! float startingX )
{
! int imageMapLabelIndex = axisChart.getYAxis().getNumberOfScaleItems() - 1;
//---setup the total area rectangle
***************
*** 133,148 ****
totalItemArea.width = axisChart.getXAxis().getPixelLength() - 1;
-
//---reuse the same Object for pre and post render events.
AxisValueRenderEvent axisValueRenderEvent = new AxisValueRenderEvent( axisChart,
! iAxisChartDataSet,
! g2d,
! totalItemArea,
! axisChart.getXAxis().getZeroLineCoordinate() );
//---there is only ever one data set for a regular bar chart
axisValueRenderEvent.setDataSetIndex( 0 );
-
//LOOP
for( int i = 0; i < iAxisChartDataSet.getNumberOfDataItems(); i++ )
--- 141,154 ----
totalItemArea.width = axisChart.getXAxis().getPixelLength() - 1;
//---reuse the same Object for pre and post render events.
AxisValueRenderEvent axisValueRenderEvent = new AxisValueRenderEvent( axisChart,
! iAxisChartDataSet,
! g2d,
! totalItemArea,
! axisChart.getXAxis().getZeroLineCoordinate() );
//---there is only ever one data set for a regular bar chart
axisValueRenderEvent.setDataSetIndex( 0 );
//LOOP
for( int i = 0; i < iAxisChartDataSet.getNumberOfDataItems(); i++ )
***************
*** 159,163 ****
barChartProperties.firePreRender( axisValueRenderEvent );
-
//---if value == 0 do not plot anything.
if( iAxisChartDataSet.getValue( 0, i ) != 0.0d )
--- 165,168 ----
***************
*** 166,171 ****
{
rectangle.x = axisChart.getXAxis().computeAxisCoordinate( axisChart.getXAxis().getOrigin(),
! iAxisChartDataSet.getValue( 0, i ),
! axisChart.getXAxis().getScaleCalculator().getMinValue() );
rectangle.width = startingX - rectangle.x;
--- 171,178 ----
{
rectangle.x = axisChart.getXAxis().computeAxisCoordinate( axisChart.getXAxis().getOrigin(),
! iAxisChartDataSet.getValue( 0, i ),
! axisChart .getXAxis()
! .getScaleCalculator()
! .getMinValue() );
rectangle.width = startingX - rectangle.x;
***************
*** 177,181 ****
rectangle.x = startingX;
rectangle.width = BarChart.computeScaleHeightOfValue( iAxisChartDataSet.getValue( 0, i ),
! axisChart.getXAxis().getOneUnitPixelSize() );
//---set values for the postRender event
--- 184,188 ----
rectangle.x = startingX;
rectangle.width = BarChart.computeScaleHeightOfValue( iAxisChartDataSet.getValue( 0, i ),
! axisChart.getXAxis().getOneUnitPixelSize() );
//---set values for the postRender event
***************
*** 183,197 ****
}
!
! //---with a user defined scale, we could have non-zero data points with a height of zero.
if( rectangle.width != 0 )
{
! /*
! System.out.println( "rectangle.x= " + rectangle.x );
! System.out.println( "rectangle.y= " + rectangle.y );
! System.out.println( "rectangle.width= " + rectangle.width );
! System.out.println( "rectangle.height= " + rectangle.height );
! */
g2d.fill( rectangle );
--- 190,204 ----
}
! //---with a user defined scale, we could have non-zero data points with a height
! // of zero.
if( rectangle.width != 0 )
{
! /*
! * System.out.println( "rectangle.x= " + rectangle.x ); System.out.println(
! * "rectangle.y= " + rectangle.y ); System.out.println( "rectangle.width= " +
! * rectangle.width ); System.out.println( "rectangle.height= " +
! * rectangle.height );
! */
g2d.fill( rectangle );
***************
*** 215,221 ****
axisChart.getImageMap().addImageMapArea( new RectMapArea( rectangle,
! iAxisChartDataSet.getValue( 0, i ),
! label,
! iAxisChartDataSet.getLegendLabel( 0 ) ) );
imageMapLabelIndex--;
--- 222,228 ----
axisChart.getImageMap().addImageMapArea( new RectMapArea( rectangle,
! iAxisChartDataSet.getValue( 0, i ),
! label,
! iAxisChartDataSet.getLegendLabel( 0 ) ) );
imageMapLabelIndex--;
***************
*** 224,228 ****
}
-
//---notify everyone we just rendered
barChartProperties.firePostRender( axisValueRenderEvent );
--- 231,234 ----
***************
*** 234,239 ****
! /**************************************************************************************
! *
* @param axisChart
* @param iAxisChartDataSet
--- 240,244 ----
! /***************************************************************************************
* @param axisChart
* @param iAxisChartDataSet
***************
*** 245,256 ****
**************************************************************************************/
private static void verticalPlot( AxisChart axisChart,
! IAxisChartDataSet iAxisChartDataSet,
! BarChartProperties barChartProperties,
! DataAxisProperties dataAxisProperties,
! Graphics2D g2d,
! Rectangle2D.Float rectangle,
! float startingY )
{
-
//---setup the total area rectangle
Rectangle2D.Float totalItemArea = new Rectangle2D.Float();
--- 250,260 ----
**************************************************************************************/
private static void verticalPlot( AxisChart axisChart,
! IAxisChartDataSet iAxisChartDataSet,
! BarChartProperties barChartProperties,
! DataAxisProperties dataAxisProperties,
! Graphics2D g2d,
! Rectangle2D.Float rectangle,
! float startingY )
{
//---setup the total area rectangle
Rectangle2D.Float totalItemArea = new Rectangle2D.Float();
***************
*** 260,276 ****
totalItemArea.height = axisChart.getYAxis().getPixelLength() - 1;
-
//---reuse the same Object for pre and post render events.
AxisValueRenderEvent axisValueRenderEvent = new AxisValueRenderEvent( axisChart,
! iAxisChartDataSet,
! g2d,
! totalItemArea,
! axisChart.getYAxis().getZeroLineCoordinate() );
//---there is only ever one data set for a regular bar chart
axisValueRenderEvent.setDataSetIndex( 0 );
-
-
//LOOP
for( int i = 0; i < iAxisChartDataSet.getNumberOfDataItems(); i++ )
--- 264,277 ----
totalItemArea.height = axisChart.getYAxis().getPixelLength() - 1;
//---reuse the same Object for pre and post render events.
AxisValueRenderEvent axisValueRenderEvent = new AxisValueRenderEvent( axisChart,
! iAxisChartDataSet,
! g2d,
! totalItemArea,
! axisChart.getYAxis().getZeroLineCoordinate() );
//---there is only ever one data set for a regular bar chart
axisValueRenderEvent.setDataSetIndex( 0 );
//LOOP
for( int i = 0; i < iAxisChartDataSet.getNumberOfDataItems(); i++ )
***************
*** 287,291 ****
barChartProperties.firePreRender( axisValueRenderEvent );
-
//---if value == 0 do not plot anything.
if( iAxisChartDataSet.getValue( 0, i ) != 0.0d )
--- 288,291 ----
***************
*** 294,299 ****
{
rectangle.y = startingY;
! rectangle.height = BarChart.computeScaleHeightOfValue( iAxisChartDataSet.getValue( 0, i ),
! axisChart.getYAxis().getOneUnitPixelSize() );
axisValueRenderEvent.setValueY( rectangle.y + rectangle.height );
--- 294,298 ----
{
rectangle.y = startingY;
! rectangle.height = BarChart.computeScaleHeightOfValue( iAxisChartDataSet.getValue( 0, i ), axisChart.getYAxis().getOneUnitPixelSize() );
axisValueRenderEvent.setValueY( rectangle.y + rectangle.height );
***************
*** 309,312 ****
--- 308,312 ----
}
+ //TODO not sure this makes sense. How could this be zero?
//---with a user defined scale, we could have non-zero data points with a height of zero.
if( rectangle.height != 0 )
***************
*** 319,343 ****
g2d.setPaint( iAxisChartDataSet.getPaint( 0 ) );
}
//---if we are generating an ImageMap, store the image coordinates
if( axisChart.getGenerateImageMapFlag() )
{
! String label;
! if( axisChart.getXAxis().getAxisLabelsGroup() != null )
! {
! label = axisChart.getXAxis().getAxisLabelsGroup().getTextTag( i ).getText();
! }
! else
! {
! label = null;
! }
! axisChart.getImageMap().addImageMapArea( new RectMapArea( rectangle,
! iAxisChartDataSet.getValue( 0, i ),
! label,
! iAxisChartDataSet.getLegendLabel( 0 ) ) );
}
}
! }
//---notify everyone we just rendered
--- 319,364 ----
g2d.setPaint( iAxisChartDataSet.getPaint( 0 ) );
}
+ }
+
+ //---even if the bar is not visible, we still need to generate an ImageMapArea
+ if( axisChart.getGenerateImageMapFlag() )
+ {
+ RectMapArea rectMapArea = createImageMapArea( axisChart.getXAxis().getAxisLabelsGroup(),
+ i,
+ rectangle,
+ iAxisChartDataSet.getValue( 0, i ),
+ iAxisChartDataSet.getLegendLabel( 0 ) );
+
+ axisChart.getImageMap().addImageMapArea( rectMapArea );
+ }
+ }
+ else
+ {
+ // System.out.println( "value was zero" );
+
+ //---make sure zero is even visible on the scale
+ if( axisChart.getYAxis().getScaleCalculator().getMaxValue() >= 0
+ && axisChart.getYAxis().getScaleCalculator().getMinValue() <= 0 )
+ {
+ rectangle.y = startingY;
+ rectangle.height = 1;
//---if we are generating an ImageMap, store the image coordinates
if( axisChart.getGenerateImageMapFlag() )
{
! RectMapArea rectMapArea = createImageMapArea( axisChart.getXAxis().getAxisLabelsGroup(),
! i,
! rectangle,
! iAxisChartDataSet.getValue( 0, i ),
! iAxisChartDataSet.getLegendLabel( 0 ) );
! axisChart.getImageMap().addImageMapArea( rectMapArea );
}
}
! /* else
! {
! System.out.println( "Not in scale range so skip." );
! }
! */ }
//---notify everyone we just rendered
***************
*** 350,362 ****
! /*******************************************************************************************************
! * Takes a value and determines the number of pixels it should fill on the screen.
! * If there is a user defined scale and the passed value is greater than the MAX or less than the MIN,
! * the height will be forced to the MAX or MIN respectively.
! *
* @param value
* @param oneUnitPixelSize
* @return float the screen pixel coordinate
! ********************************************************************************************************/
static float computeScaleHeightOfValue( double value, double oneUnitPixelSize )
{
--- 371,383 ----
! /***************************************************************************************
! * Takes a value and determines the number of pixels it should fill on the screen. If
! * there is a user defined scale and the passed value is greater than the MAX or less
! * than the MIN, the height will be forced to the MAX or MIN respectively.
! *
* @param value
* @param oneUnitPixelSize
* @return float the screen pixel coordinate
! **************************************************************************************/
static float computeScaleHeightOfValue( double value, double oneUnitPixelSize )
{
***************
*** 364,366 ****
}
! }
--- 385,414 ----
}
!
! /***************************************************************************************
! * @param axisLabelsGroup
! * @param index
! * @param rectangle
! * @param value
! * @param legendLabel
! * @return
! **************************************************************************************/
! private static RectMapArea createImageMapArea( TextTagGroup axisLabelsGroup,
! int index,
! Rectangle2D.Float rectangle,
! double value,
! String legendLabel )
! {
! String label;
! if( axisLabelsGroup != null )
! {
! label = axisLabelsGroup.getTextTag( index ).getText();
! }
! else
! {
! label = null;
! }
!
! return new RectMapArea( rectangle, value, label, legendLabel );
! }
! }
\ No newline at end of file
-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g.
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click