krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart/axis XAxis.java,1.3,1.4

Chris McKay <[email protected]> Mon, 14 Jun 2004 01:24:18 +0000
Newsgroups gmane.comp.krysalis.jcharts.cvs
Message-ID <[email protected]>
Update of /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart/axis
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7285/src/java/org/krysalis/jcharts/axisChart/axis

Modified Files:
	XAxis.java 
Log Message:
Addition of X axis label rotation functionality. New method added to AxisTypeProperties:
e.g.: call with axisProperties.getXAxisProperties().setLabelRotationAngle(30);

Index: XAxis.java
===================================================================
RCS file: /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart/axis/XAxis.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** XAxis.java	29 Jun 2003 14:14:28 -0000	1.3
--- XAxis.java	14 Jun 2004 01:24:15 -0000	1.4
***************
*** 47,50 ****
--- 47,51 ----
  import java.awt.*;
  import java.awt.geom.Line2D;
+ import java.awt.geom.AffineTransform;
  import java.lang.reflect.Field;
  import java.util.Iterator;
***************
*** 99,108 ****
  			else
  			{
! 				//---tallest label for horizontal labels
! 				//heightNeeded = axisChartDataProcessor.getAxisLabelProcessor().getTallestLabel();
! 				heightNeeded = super.getAxisLabelsGroup().getTallestLabel();
  
! 				//---not sure why i need more padding
! 				heightNeeded += 3;
  			}
  		}
--- 100,122 ----
  			else
  			{
! 				if ( axisTypeProperties.getLabelRotationAngle() != 0 )
! 				{       // heightNeeded is calculated for positioning X axis title
! 					//---widest label for rotated labels converted to vertical distance
! 					// A special thanks to the Oswego School District maths prep exam web page (http://regentsprep.org/Regents/math/rtritrig/Ltrig.htm)
! 					heightNeeded = super.getAxisLabelsGroup().getWidestLabel() 
! 							* (float)Math.abs(Math.sin(Math.toRadians(axisTypeProperties.getLabelRotationAngle())));
! 					// height is currently at top of characters calculate vertical for text height
! 					heightNeeded += super.getAxisLabelsGroup().getTallestLabel()
! 							* (float)Math.abs(Math.cos(Math.toRadians(axisTypeProperties.getLabelRotationAngle()))); 
! 				}
! 				else
! 				{
! 					//---tallest label for horizontal labels
! 				    //heightNeeded = axisChartDataProcessor.getAxisLabelProcessor().getTallestLabel();
! 					heightNeeded = super.getAxisLabelsGroup().getTallestLabel();
  
! 					//---not sure why i need more padding
! 					heightNeeded += 3;
! 				}
  			}
  		}
***************
*** 257,261 ****
  
  	/*********************************************************************************************
! 	 * Renders the YAxis on the passes Graphics2D object
  	 *
  	 * @param graphics2D
--- 271,275 ----
  
  	/*********************************************************************************************
! 	 * Renders the XAxis on the passed Graphics2D object
  	 *
  	 * @param graphics2D
***************
*** 298,303 ****
  			if( !axisProperties.xAxisLabelsAreVertical() )
  			{
! 				stringY += super.getAxisLabelsGroup().getTallestLabel();
! 				graphics2D.setFont( axisTypeProperties.getScaleChartFont().getFont() );
  			}
  			else
--- 312,328 ----
  			if( !axisProperties.xAxisLabelsAreVertical() )
  			{
! 				if ( axisTypeProperties.getLabelRotationAngle() != 0 )
! 				{
! 					stringY += super.getAxisLabelsGroup().getWidestLabel() 
! 						* (float)Math.abs(Math.sin(Math.toRadians(axisTypeProperties.getLabelRotationAngle())));                                // Find the vertical drop of the tallest text label
! 					stringY += super.getAxisLabelsGroup().getTallestLabel()
! 						* (float)Math.abs(Math.cos(Math.toRadians(axisTypeProperties.getLabelRotationAngle())));
! 					graphics2D.setFont( axisTypeProperties.getScaleChartFont().getFont() );
! 				}
! 				else
! 				{
! 					stringY += super.getAxisLabelsGroup().getTallestLabel();
! 					graphics2D.setFont( axisTypeProperties.getScaleChartFont().getFont() );
! 				}
  			}
  			else
***************
*** 357,367 ****
  				if( !axisProperties.xAxisLabelsAreVertical() )
  				{
! 					//graphics2D.drawString( iDataSeries.getXAxisLabel( i ), stringX - super.getAxisLabelsGroup().getTextTag( i ).getWidth() / 2, stringY );
! 					float x = stringX - super.getAxisLabelsGroup().getTextTag( i ).getWidth() / 2;
  
! 					//---we can not only look at the last label as there could be a filter and labels near the last might go off the edge of the screen.
! 					if( x + super.getAxisLabelsGroup().getTextTag( i ).getWidth() < super.getAxisChart().getImageWidth() )
  					{
! 						super.getAxisLabelsGroup().getTextTag( i ).render( graphics2D, x, stringY );
  					}
  				}
--- 382,419 ----
  				if( !axisProperties.xAxisLabelsAreVertical() )
  				{
! 					if ( axisTypeProperties.getLabelRotationAngle() != 0) 
! 					{
! 						// x1 is the 1/2 the horizontal width of the rotated label
! 						float x1 = (super.getAxisLabelsGroup().getTextTag( i ).getWidth() / 2) * (float)Math.abs(Math.cos(Math.toRadians(axisTypeProperties.getLabelRotationAngle()))); 
! 						//---we can not only look at the last label as there could be a filter and labels near the last might go off the edge of the screen.
! 						if( stringX + x1 < super.getAxisChart().getImageWidth() )
! 						{
! 							//---get the original transform so we can reset it.
! 							AffineTransform originalTransform=graphics2D.getTransform();
  
! 							// Position to tick mark and down the required height, then back half the horizontal label width
! 							// calculate the X coord to center the top of the label text to the axis tick as opposed to the bottom
! 							// x2 takes this into account
! 							float x2 = super.getAxisLabelsGroup().getTextTag( i ).getFontDescent() * (float)Math.abs(Math.sin(Math.toRadians(axisTypeProperties.getLabelRotationAngle()))); 
! 							graphics2D.translate(stringX - x1 + x2, stringY);
! 							// rotate entire context
! 							graphics2D.rotate(Math.toRadians(-axisTypeProperties.getLabelRotationAngle()));
! 							// draw the label text
! 							super.getAxisLabelsGroup().getTextTag( i ).render( graphics2D, 0, 0 );
! 
! 							//---translate back to the original position
! 							graphics2D.setTransform( originalTransform );
! 						}
! 					}
! 					else
  					{
! 						//graphics2D.drawString( iDataSeries.getXAxisLabel( i ), stringX - super.getAxisLabelsGroup().getTextTag( i ).getWidth() / 2, stringY );
! 						float x = stringX - super.getAxisLabelsGroup().getTextTag( i ).getWidth() / 2;
! 
! 						//---we can not only look at the last label as there could be a filter and labels near the last might go off the edge of the screen.
! 						if( x + super.getAxisLabelsGroup().getTextTag( i ).getWidth() < super.getAxisChart().getImageWidth() )
! 						{
! 							super.getAxisLabelsGroup().getTextTag( i ).render( graphics2D, x, stringY );
! 						}
  					}
  				}



-------------------------------------------------------
This SF.Net email is sponsored by the new InstallShield X.
From Windows to Linux, servers to mobile, InstallShield X is the
one installation-authoring solution that does it all. Learn more and
evaluate today! http://www.installshield.com/Dev2Dev/0504