From: <an...@us...> - 2006-11-13 21:38:07
|
Revision: 11 http://svn.sourceforge.net/nplot/?rev=11&view=rev Author: anmar Date: 2006-11-13 13:38:03 -0800 (Mon, 13 Nov 2006) Log Message: ----------- Fixed [SF bug 1590992] The Axis suggested in a few places wasn't handling properly the case when there is no data available. They now default to the same behavior as the other IAxisSuggester classes. * [src/AdapterUtils.cs] AxisSuggester_StartStep, AxisSuggester_Auto and AxisSuggester_RowAuto were suggesting wrong axis if there were no data. * [src/HistogramPlot.cs] SuggestXAxis: If there is no data, you can't use it to adjust the suggested axis. Signed off by: anmar Modified Paths: -------------- trunk/src/AdapterUtils.cs trunk/src/HistogramPlot.cs Modified: trunk/src/AdapterUtils.cs =================================================================== --- trunk/src/AdapterUtils.cs 2006-11-11 19:05:37 UTC (rev 10) +++ trunk/src/AdapterUtils.cs 2006-11-13 21:38:03 UTC (rev 11) @@ -213,9 +213,17 @@ /// <returns>the suggested axis</returns> public Axis Get() { - return new LinearAxis( - abscissaData_.Start, - abscissaData_.Start + (double)(ordinateData_.Count - 1) * abscissaData_.Step); + if (ordinateData_!=null && ordinateData_.Count>0) + { + return new LinearAxis( + abscissaData_.Start, + abscissaData_.Start + (double)(ordinateData_.Count - 1) * abscissaData_.Step); + } + + else + { + return new LinearAxis(0.0, 1.0); + } } } @@ -243,7 +251,16 @@ /// <returns>the suggested axis</returns> public Axis Get() { - return new LinearAxis(0, ordinateData_.Count - 1); + if (ordinateData_!=null && ordinateData_.Count>0) + { + return new LinearAxis(0, ordinateData_.Count - 1); + + } + + else + { + return new LinearAxis(0.0, 1.0); + } } } @@ -270,7 +287,15 @@ /// <returns>the suggested axis</returns> public Axis Get() { - return new LinearAxis(0, ordinateData_.Count - 1); + if (ordinateData_!=null && ordinateData_.Count>0) + { + return new LinearAxis(0, ordinateData_.Count - 1); + } + + else + { + return new LinearAxis(0.0, 1.0); + } } } Modified: trunk/src/HistogramPlot.cs =================================================================== --- trunk/src/HistogramPlot.cs 2006-11-11 19:05:37 UTC (rev 10) +++ trunk/src/HistogramPlot.cs 2006-11-13 21:38:03 UTC (rev 11) @@ -243,6 +243,10 @@ new SequenceAdapter( this.DataSource, this.DataMember, this.OrdinateData, this.AbscissaData ); Axis a = data.SuggestXAxis(); + if (data.Count==0) + { + return a; + } PointD p1; PointD p2; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2006-12-28 09:32:49
|
Revision: 17 http://svn.sourceforge.net/nplot/?rev=17&view=rev Author: anmar Date: 2006-12-28 01:32:48 -0800 (Thu, 28 Dec 2006) Log Message: ----------- Fixed [SF bug 1622918] Padding is a new property for System.Windows.Forms.Control in .NET 2.0 so NPlot.Windows.PlotSurface2D was hiding it. It has been renamed to SurfacePadding and kept as an obsolete property for .NET 1.1 builds for backwards compatibility. * [src/IPlotSurface2D.cs] Rename Padding to SurfacePadding * [src/PlotSurface2D.cs] Rename Padding to SurfacePadding and make Padding an obsolete alias to SurfacePadding that is only compiled for .NET 1.1 * [src/Bitmap.PlotSurface2D.cs] Rename Padding to SurfacePadding and make Padding an obsolete alias to SurfacePadding that is only compiled for .NET 1.1 * [src/Web.PlotSurface2D.cs] Rename Padding to SurfacePadding and make Padding an obsolete alias to SurfacePadding that is only compiled for .NET 1.1 * [src/Windows.PlotSurface2D.cs] Rename Padding to SurfacePadding and make Padding an obsolete alias to SurfacePadding that is only compiled for .NET 1.1 Signed off by: anmar Modified Paths: -------------- trunk/src/Bitmap.PlotSurface2D.cs trunk/src/IPlotSurface2D.cs trunk/src/PlotSurface2D.cs trunk/src/Web.PlotSurface2D.cs trunk/src/Windows.PlotSurface2D.cs Modified: trunk/src/Bitmap.PlotSurface2D.cs =================================================================== --- trunk/src/Bitmap.PlotSurface2D.cs 2006-12-28 09:14:03 UTC (rev 16) +++ trunk/src/Bitmap.PlotSurface2D.cs 2006-12-28 09:32:48 UTC (rev 17) @@ -168,21 +168,38 @@ ps_.TitleFont = value; } } - - +#if API_1_1 /// <summary> + /// It has been renamed to <see cref="SurfacePadding" /> and can be used with .NET 1.1 only. + /// </summary> + [ + Obsolete("This property is only maintained in .NET 1.1 profile for compatibility, but it might be removed in the future. Use SurfacePadding instead") + ] + public int Padding + { + get + { + return SurfacePadding; + } + set + { + SurfacePadding = value; + } + } +#endif + /// <summary> /// The distance in pixels to leave between of the edge of the bounding rectangle /// supplied to the Draw method, and the markings that make up the plot. /// </summary> - public int Padding + public int SurfacePadding { get { - return ps_.Padding; + return ps_.SurfacePadding; } set { - ps_.Padding = value; + ps_.SurfacePadding = value; } } Modified: trunk/src/IPlotSurface2D.cs =================================================================== --- trunk/src/IPlotSurface2D.cs 2006-12-28 09:14:03 UTC (rev 16) +++ trunk/src/IPlotSurface2D.cs 2006-12-28 09:32:48 UTC (rev 17) @@ -102,7 +102,7 @@ /// The distance in pixels to leave between of the edge of the bounding rectangle /// supplied to the Draw method, and the markings that make up the plot. /// </summary> - int Padding { get; set; } + int SurfacePadding { get; set; } /// <summary> Modified: trunk/src/PlotSurface2D.cs =================================================================== --- trunk/src/PlotSurface2D.cs 2006-12-28 09:14:03 UTC (rev 16) +++ trunk/src/PlotSurface2D.cs 2006-12-28 09:32:48 UTC (rev 17) @@ -333,12 +333,30 @@ } } - +#if API_1_1 /// <summary> + /// It has been renamed to <see cref="SurfacePadding" /> and can be used with .NET 1.1 only. + /// </summary> + [ + Obsolete("This property is only maintained in .NET 1.1 profile for compatibility, but it might be removed in the future. Use SurfacePadding instead") + ] + public int Padding + { + get + { + return SurfacePadding; + } + set + { + SurfacePadding = value; + } + } +#endif + /// <summary> /// The distance in pixels to leave between of the edge of the bounding rectangle /// supplied to the Draw method, and the markings that make up the plot. /// </summary> - public int Padding + public int SurfacePadding { get { Modified: trunk/src/Web.PlotSurface2D.cs =================================================================== --- trunk/src/Web.PlotSurface2D.cs 2006-12-28 09:14:03 UTC (rev 16) +++ trunk/src/Web.PlotSurface2D.cs 2006-12-28 09:32:48 UTC (rev 17) @@ -192,8 +192,29 @@ } } - +#if API_1_1 /// <summary> + /// It has been renamed to <see cref="SurfacePadding" /> and can be used with .NET 1.1 only. + /// </summary> + [ + Browsable(true), + Category("Data"), + Bindable(true), + Obsolete("This property is only maintained in .NET 1.1 profile for compatibility, but it might be removed in the future. Use SurfacePadding instead") + ] + public int Padding + { + get + { + return SurfacePadding; + } + set + { + SurfacePadding = value; + } + } +#endif + /// <summary> /// The distance in pixels to leave between of the edge of the bounding rectangle /// supplied to the Draw method, and the markings that make up the plot. /// </summary> @@ -202,15 +223,15 @@ Category("Data"), Bindable(true) ] - public int Padding + public int SurfacePadding { get { - return ps_.Padding; + return ps_.SurfacePadding; } set { - ps_.Padding = value; + ps_.SurfacePadding = value; } } Modified: trunk/src/Windows.PlotSurface2D.cs =================================================================== --- trunk/src/Windows.PlotSurface2D.cs 2006-12-28 09:14:03 UTC (rev 16) +++ trunk/src/Windows.PlotSurface2D.cs 2006-12-28 09:32:48 UTC (rev 17) @@ -434,8 +434,30 @@ } } - +#if API_1_1 /// <summary> + /// It has been renamed to <see cref="SurfacePadding" /> and can be used with .NET 1.1 only. + /// </summary> + [ + Category("PlotSurface2D"), + Description("See SurfacePadding."), + Browsable(true), + Bindable(true), + Obsolete("This property is only maintained in .NET 1.1 profile for compatibility, but it might be removed in the future. Use SurfacePadding instead") + ] + public int Padding + { + get + { + return SurfacePadding; + } + set + { + SurfacePadding = value; + } + } +#endif + /// <summary> /// Padding of this width will be left between what is drawn and the control border. /// </summary> [ @@ -444,19 +466,18 @@ Browsable(true), Bindable(true) ] - public int Padding + public int SurfacePadding { get { - return ps_.Padding; + return ps_.SurfacePadding; } set { - ps_.Padding = value; + ps_.SurfacePadding = value; } } - /// <summary> /// The first abscissa axis. /// </summary> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jam...@us...> - 2007-01-24 23:02:36
|
Revision: 24 http://svn.sourceforge.net/nplot/?rev=24&view=rev Author: jamcquay Date: 2007-01-24 15:02:37 -0800 (Wed, 24 Jan 2007) Log Message: ----------- Fixed [SF patch 1639722] There was a problem displaying a HistogramPlot when the displayed plot width is smaller than the length of the DataSource array. I made a fix by changing the brushes to take in RectangleF in addition to Rectangle. Code fixed by: rshyffer Signed off by: jamcquay Modified Paths: -------------- trunk/src/HistogramPlot.cs trunk/src/RectangleBrushes.cs Modified: trunk/src/HistogramPlot.cs =================================================================== --- trunk/src/HistogramPlot.cs 2007-01-23 00:02:09 UTC (rev 23) +++ trunk/src/HistogramPlot.cs 2007-01-24 23:02:37 UTC (rev 24) @@ -174,8 +174,8 @@ } float xoff = (1.0f - baseWidth_)/2.0f*width; - Rectangle r = new Rectangle( (int)(xPos1.X+xoff), (int)yPos1.Y, (int)(width-2*xoff), (int)height ); - + RectangleF r = new RectangleF( xPos1.X+xoff, yPos1.Y, width-2*xoff, height ); + if (this.Filled) { if (r.Height != 0 && r.Width != 0) Modified: trunk/src/RectangleBrushes.cs =================================================================== --- trunk/src/RectangleBrushes.cs 2007-01-23 00:02:09 UTC (rev 23) +++ trunk/src/RectangleBrushes.cs 2007-01-24 23:02:37 UTC (rev 24) @@ -48,6 +48,13 @@ /// <param name="rectangle">the rectangle used to construct the brush</param> /// <returns>The brush</returns> Brush Get( Rectangle rectangle ); + + /// <summary> + /// Gets a brush according to the supplied rectangle. + /// </summary> + /// <param name="rectangle">the rectangle used to construct the brush</param> + /// <returns>The brush</returns> + Brush Get(RectangleF rectangle); } /// <summary> @@ -82,7 +89,12 @@ return brush_; } - #region Default Brushes + public Brush Get(RectangleF rectangle) + { + return brush_; + } + + #region Default Brushes /// <summary> /// AliceBlue solid brush. /// </summary> @@ -1668,8 +1680,13 @@ return new LinearGradientBrush( rectangle, c1_, c2_, LinearGradientMode.Horizontal ); } - #region DefaultBrushes + public Brush Get(RectangleF rectangle) + { + return new LinearGradientBrush(rectangle, c1_, c2_, LinearGradientMode.Horizontal); + } + #region DefaultBrushes + /// <summary> /// Default brush - fades from faint blue to white. /// </summary> @@ -1737,8 +1754,12 @@ return new LinearGradientBrush( rectangle, c1_, c2_, LinearGradientMode.Vertical ); } + public Brush Get(RectangleF rectangle) + { + return new LinearGradientBrush(rectangle, c1_, c2_, LinearGradientMode.Vertical); + } - #region DefaultBrushes + #region DefaultBrushes /// <summary> /// Default brush - fades from faint blue to white. @@ -1813,8 +1834,20 @@ return brush; } - #region DefaultBrushes + public Brush Get(RectangleF rectangle) + { + LinearGradientBrush brush = new LinearGradientBrush(rectangle, c1_, c2_, LinearGradientMode.Horizontal); + float[] relativeIntensities = { 0.0f, 0.9f, 1.0f, 0.9f, 0.0f }; + float[] relativePositions = { 0.0f, 0.4f, 0.5f, 0.6f, 1.0f }; + Blend blend = new Blend(); + blend.Factors = relativeIntensities; + blend.Positions = relativePositions; + brush.Blend = blend; + return brush; + } + #region DefaultBrushes + /// <summary> /// Default brush - fades from faint blue to white. /// </summary> @@ -1889,8 +1922,20 @@ return brush; } - #region DefaultBrushes + public Brush Get(RectangleF rectangle) + { + LinearGradientBrush brush = new LinearGradientBrush(rectangle, c1_, c2_, LinearGradientMode.Vertical); + float[] relativeIntensities = { 0.0f, 0.9f, 1.0f, 0.9f, 0.0f }; + float[] relativePositions = { 0.0f, 0.4f, 0.5f, 0.6f, 1.0f }; + Blend blend = new Blend(); + blend.Factors = relativeIntensities; + blend.Positions = relativePositions; + brush.Blend = blend; + return brush; + } + #region DefaultBrushes + /// <summary> /// Default brush - fades from faint blue to white. /// </summary> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jam...@us...> - 2007-01-24 23:14:37
|
Revision: 25 http://svn.sourceforge.net/nplot/?rev=25&view=rev Author: jamcquay Date: 2007-01-24 15:14:35 -0800 (Wed, 24 Jan 2007) Log Message: ----------- Fixed [SF patch 1622687] On large zoom levels it may happen that one part of the points is behind the left edge of the plot area while the rest is behind the right edge. Still the line between two points closest to the left and right edge should be drawn as it could fall within the viewport of the plot area. Currently, the line simply disappears. Code fixed by: konieczp Signed off by: jamcquay Modified Paths: -------------- trunk/src/LinePlot.cs trunk/src/StepPlot.cs Modified: trunk/src/LinePlot.cs =================================================================== --- trunk/src/LinePlot.cs 2007-01-24 23:02:37 UTC (rev 24) +++ trunk/src/LinePlot.cs 2007-01-24 23:14:35 UTC (rev 25) @@ -152,13 +152,13 @@ } // do horizontal clipping here, to speed up - if ((dx1 < leftCutoff || rightCutoff < dx1) && - (dx2 < leftCutoff || rightCutoff < dx2)) + if ((dx1 < leftCutoff && dx2 < leftCutoff) || + (rightCutoff < dx1 && rightCutoff < dx2)) { continue; } - // else draw line. + // else draw line. PointF p1 = t.Transform( data[i-1] ); PointF p2 = t.Transform( data[i] ); Modified: trunk/src/StepPlot.cs =================================================================== --- trunk/src/StepPlot.cs 2007-01-24 23:02:37 UTC (rev 24) +++ trunk/src/StepPlot.cs 2007-01-24 23:14:35 UTC (rev 25) @@ -121,9 +121,8 @@ PointF yPos3 = yAxis.WorldToPhysical( p3.Y, false ); // do horizontal clipping here, to speed up - if ((p1.X < leftCutoff || p1.X > rightCutoff ) && - (p2.X < leftCutoff || p2.X > rightCutoff ) && - (p3.X < leftCutoff || p3.X > rightCutoff ) ) + if ((p1.X < leftCutoff && p2.X < leftCutoff && p3.X < leftCutoff) || + (p1.X > rightCutoff && p2.X > rightCutoff && p3.X > rightCutoff)) { continue; } @@ -150,7 +149,7 @@ } - } + } /// <summary> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jam...@us...> - 2007-03-30 19:12:06
|
Revision: 29 http://svn.sourceforge.net/nplot/?rev=29&view=rev Author: jamcquay Date: 2007-03-30 12:12:03 -0700 (Fri, 30 Mar 2007) Log Message: ----------- Fixed whitespace and other inconsistencies in the NPlot Source Modified Paths: -------------- trunk/src/AdapterUtils.cs trunk/src/ArrowItem.cs trunk/src/AssemblyInfo.cs trunk/src/AxesConstraint.cs trunk/src/Axis.cs trunk/src/BarPlot.cs trunk/src/BasePlot.cs trunk/src/BaseSequencePlot.cs trunk/src/Bitmap.PlotSurface2D.cs trunk/src/CandlePlot.cs trunk/src/DateTimeAxis.cs trunk/src/FilledRegion.cs trunk/src/Grid.cs trunk/src/HistogramPlot.cs trunk/src/HorizontalLine.cs trunk/src/IDrawable.cs trunk/src/IGradient.cs trunk/src/IPlot.cs trunk/src/IPlotSurface2D.cs trunk/src/ISequencePlot.cs trunk/src/ISurface.cs trunk/src/ITransform2D.cs trunk/src/ImagePlot.cs trunk/src/LabelAxis.cs trunk/src/LabelPointPlot.cs trunk/src/Legend.cs trunk/src/LegendBase.cs trunk/src/LinePlot.cs trunk/src/LinearAxis.cs trunk/src/LinearGradient.cs trunk/src/LogAxis.cs trunk/src/Marker.cs trunk/src/MarkerItem.cs trunk/src/NPlotException.cs trunk/src/PageAlignedPhysicalAxis.cs trunk/src/PhysicalAxis.cs trunk/src/PiAxis.cs trunk/src/PlotSurface2D.cs trunk/src/PointD.cs trunk/src/PointPlot.cs trunk/src/RectangleBrushes.cs trunk/src/SequenceAdapter.cs trunk/src/StartStep.cs trunk/src/StepGradient.cs trunk/src/StepPlot.cs trunk/src/TextItem.cs trunk/src/TradingDateTimeAxis.cs trunk/src/Transform2D.cs trunk/src/Utils.cs trunk/src/VerticalLine.cs trunk/src/Web.Design.PlotSurface2D.cs trunk/src/Web.PlotSurface2D.cs trunk/src/Windows.PlotSurface2D.cs Modified: trunk/src/AdapterUtils.cs =================================================================== --- trunk/src/AdapterUtils.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/AdapterUtils.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -156,7 +156,6 @@ { return new DateTimeAxis(min, max); } - else { return new LinearAxis(min, max); @@ -219,7 +218,6 @@ abscissaData_.Start, abscissaData_.Start + (double)(ordinateData_.Count - 1) * abscissaData_.Step); } - else { return new LinearAxis(0.0, 1.0); @@ -233,7 +231,6 @@ /// </summary> public class AxisSuggester_Auto : IAxisSuggester { - IList ordinateData_; /// <summary> @@ -254,9 +251,7 @@ if (ordinateData_!=null && ordinateData_.Count>0) { return new LinearAxis(0, ordinateData_.Count - 1); - } - else { return new LinearAxis(0.0, 1.0); @@ -291,7 +286,6 @@ { return new LinearAxis(0, ordinateData_.Count - 1); } - else { return new LinearAxis(0.0, 1.0); @@ -333,7 +327,6 @@ { return new DateTimeAxis(min, max); } - else { return new LinearAxis(min, max); @@ -379,7 +372,6 @@ { return new DateTimeAxis(min, max); } - else { return new LinearAxis(min, max); @@ -508,7 +500,6 @@ return dataView_.Count; } } - } #endregion @@ -717,7 +708,6 @@ /// <remarks>Note: Does not implement IDataGetter... Currently this class is not used.</remarks> public class DataGetter_MultiRows { - DataRowCollection rows_; string abscissaName_; int abscissaColumnNumber_; @@ -733,8 +723,10 @@ abscissaName_ = omitThisColumn; abscissaColumnNumber_ = rows_[0].Table.Columns.IndexOf( omitThisColumn ); - if (abscissaColumnNumber_ < 0) - throw new NPlotException( "invalid column name" ); + if (abscissaColumnNumber_ < 0) + { + throw new NPlotException("invalid column name"); + } } /// <summary> @@ -756,10 +748,14 @@ /// <returns>the required data point.</returns> public double PointAt( int index, int seriesIndex ) { - if (seriesIndex < abscissaColumnNumber_) - return Utils.ToDouble( rows_[index][seriesIndex] ); - else - return Utils.ToDouble( rows_[index][seriesIndex+1] ); + if (seriesIndex < abscissaColumnNumber_) + { + return Utils.ToDouble(rows_[index][seriesIndex]); + } + else + { + return Utils.ToDouble(rows_[index][seriesIndex + 1]); + } } } Modified: trunk/src/ArrowItem.cs =================================================================== --- trunk/src/ArrowItem.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/ArrowItem.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -210,10 +210,14 @@ public void Draw( System.Drawing.Graphics g, PhysicalAxis xAxis, PhysicalAxis yAxis ) { if (this.To.X > xAxis.Axis.WorldMax || this.To.X < xAxis.Axis.WorldMin) + { return; + } if (this.To.Y > yAxis.Axis.WorldMax || this.To.Y < yAxis.Axis.WorldMin) + { return; + } double angle = this.angle_; @@ -320,7 +324,6 @@ { offsetFromMiddle = new PointF( halfSize.Width, -dist ); } - break; case 3: @@ -333,7 +336,6 @@ { offsetFromMiddle = new PointF( -dist, -halfSize.Height ); } - break; default: Modified: trunk/src/AssemblyInfo.cs =================================================================== --- trunk/src/AssemblyInfo.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/AssemblyInfo.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -38,7 +38,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("NPlot project")] [assembly: AssemblyProduct("NPlot")] -[assembly: AssemblyCopyright("Copyright (C) 2003-2006 Matt Howlett and others")] +[assembly: AssemblyCopyright("Copyright (C) 2003-2007 Matt Howlett and others")] [assembly: AssemblyTrademark("This program is under The BSD license")] [assembly: AssemblyCulture("")] [assembly: AssemblyVersion("0.9.10.1")] Modified: trunk/src/AxesConstraint.cs =================================================================== --- trunk/src/AxesConstraint.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/AxesConstraint.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -215,7 +215,6 @@ /// </summary> public class AxisPosition : AxesConstraint { - private object xAxisPosition_; private object yAxisPosition_; private int position_; @@ -439,7 +438,6 @@ pXAxis2.PhysicalMax = new Point( pXAxis2.PhysicalMax.X, pXAxis2.PhysicalMax.Y+changeTop ); } - else { Modified: trunk/src/Axis.cs =================================================================== --- trunk/src/Axis.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/Axis.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -562,7 +562,6 @@ /// </summary> protected static void DoClone( Axis b, Axis a ) { - // value items a.autoScaleText_ = b.autoScaleText_; a.autoScaleTicks_ = b.autoScaleTicks_; @@ -602,7 +601,6 @@ a.FontScale = b.FontScale; a.TickScale = b.TickScale; - } @@ -824,19 +822,26 @@ // Force clipping at bounding box largeClip times that of real bounding box // anyway. This is effectively at infinity. const double largeClip = 100.0; - if (prop > largeClip && clip) - prop = largeClip; + if (prop > largeClip && clip) + { + prop = largeClip; + } - if (prop < -largeClip && clip) - prop = -largeClip; + if (prop < -largeClip && clip) + { + prop = -largeClip; + } if (range == 0) { - if (coord >= WorldMin) - prop = largeClip; - - if (coord < WorldMin) - prop = -largeClip; + if (coord >= WorldMin) + { + prop = largeClip; + } + else + { + prop = -largeClip; + } } // calculate the physical coordinate. @@ -1059,8 +1064,10 @@ PointF tickEnd = new PointF( tickStart.X + tickVector.X, tickStart.Y + tickVector.Y ); // and draw it! - if (g != null) - g.DrawLine( this.linePen_, (int)tickStart.X, (int)tickStart.Y, (int)tickEnd.X, (int)tickEnd.Y ); + if (g != null) + { + g.DrawLine(this.linePen_, (int)tickStart.X, (int)tickStart.Y, (int)tickEnd.X, (int)tickEnd.Y); + } // note: casting to int for tick positions was necessary to ensure ticks drawn where we wanted // them. Not sure of the reason. @@ -1191,7 +1198,6 @@ } else { - float bx1 = (textCenterX - textSize.Width/2.0f); float by1 = (textCenterY - textSize.Height/2.0f); float bx2 = textSize.Width; @@ -1220,7 +1226,6 @@ labelOffset = new Point( (int)textCenterX, (int)textCenterY ); } } - } @@ -1249,7 +1254,6 @@ if (!Hidden) { - // (1) Draw the axis line. g.DrawLine( this.linePen_, physicalMin.X, physicalMin.Y, physicalMax.X, physicalMax.Y ); @@ -1267,12 +1271,15 @@ } // (4) merge bounds and return. - if (labelBounds != null) - bounds = Rectangle.Union( bounds, (Rectangle)labelBounds ); + if (labelBounds != null) + { + bounds = Rectangle.Union(bounds, (Rectangle)labelBounds); + } - if (tickBounds != null) - bounds = Rectangle.Union( bounds, (Rectangle)tickBounds ); - + if (tickBounds != null) + { + bounds = Rectangle.Union(bounds, (Rectangle)tickBounds); + } } boundingBox = bounds; @@ -1391,8 +1398,10 @@ ArrayList largeTickPositions, ref ArrayList smallTickPositions ) { - if (smallTickPositions == null) - smallTickPositions = new ArrayList(); + if (smallTickPositions == null) + { + smallTickPositions = new ArrayList(); + } } @@ -1454,7 +1463,6 @@ { return fontScale_; } - set { fontScale_ = value; @@ -1484,11 +1492,15 @@ private void UpdateScale() { - if (labelFont_ != null) - this.labelFontScaled_ = Utils.ScaleFont( labelFont_, FontScale ); - - if (tickTextFont_ != null) - this.tickTextFontScaled_ = Utils.ScaleFont( tickTextFont_, FontScale ); + if (labelFont_ != null) + { + this.labelFontScaled_ = Utils.ScaleFont(labelFont_, FontScale); + } + + if (tickTextFont_ != null) + { + this.tickTextFontScaled_ = Utils.ScaleFont(tickTextFont_, FontScale); + } } Modified: trunk/src/BarPlot.cs =================================================================== --- trunk/src/BarPlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/BarPlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -130,7 +130,6 @@ g.DrawRectangle( borderPen_, r ); } } - } /// <summary> @@ -151,8 +150,6 @@ } - - /// <summary> /// Returns a y-axis that is suitable for drawing this plot. /// </summary> @@ -185,6 +182,7 @@ g.DrawRectangle( borderPen_, newRectangle ); } + /// <summary> /// The pen used to draw the plot /// </summary> @@ -238,7 +236,6 @@ { rectangleBrush_ = value; } - } private IRectangleBrush rectangleBrush_ = new RectangleBrushes.Solid( Color.LightGray ); @@ -271,8 +268,5 @@ { sb.Append( "Write data not implemented yet for BarPlot\r\n" ); } - - } - } Modified: trunk/src/BasePlot.cs =================================================================== --- trunk/src/BasePlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/BasePlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -110,8 +110,5 @@ } } private string dataMember_ = null; - - - } } Modified: trunk/src/BaseSequencePlot.cs =================================================================== --- trunk/src/BaseSequencePlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/BaseSequencePlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -93,6 +93,5 @@ sb.Append( "\r\n" ); data_.WriteData( sb, region, onlyInRegion ); } - } } Modified: trunk/src/Bitmap.PlotSurface2D.cs =================================================================== --- trunk/src/Bitmap.PlotSurface2D.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/Bitmap.PlotSurface2D.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -34,505 +34,503 @@ using System.Drawing.Drawing2D; using System.Collections; -namespace NPlot +namespace NPlot.Bitmap { - - namespace Bitmap + /// <summary> + /// Wrapper around NPlot.PlotSurface2D that provides extra functionality + /// specific to drawing to Bitmaps. + /// </summary> + public class PlotSurface2D: IPlotSurface2D { /// <summary> - /// Wrapper around NPlot.PlotSurface2D that provides extra functionality - /// specific to drawing to Bitmaps. + /// Constructor. /// </summary> - public class PlotSurface2D: IPlotSurface2D + /// <param name="width">width of the bitmap.</param> + /// <param name="height">height of the bitmap.</param> + public PlotSurface2D( int width, int height ) { + b_ = new System.Drawing.Bitmap( width, height ); + ps_ = new NPlot.PlotSurface2D(); + } - /// <summary> - /// Constructor. - /// </summary> - /// <param name="width">width of the bitmap.</param> - /// <param name="height">height of the bitmap.</param> - public PlotSurface2D( int width, int height ) - { - b_ = new System.Drawing.Bitmap( width, height ); - ps_ = new NPlot.PlotSurface2D(); - } - /// <summary> - /// Constructor. - /// </summary> - /// <param name="b">The Bitmap where the plot is to be rendered.</param> - public PlotSurface2D( System.Drawing.Bitmap b ) - { - b_ = b; - ps_ = new NPlot.PlotSurface2D(); - } + /// <summary> + /// Constructor. + /// </summary> + /// <param name="b">The Bitmap where the plot is to be rendered.</param> + public PlotSurface2D( System.Drawing.Bitmap b ) + { + b_ = b; + ps_ = new NPlot.PlotSurface2D(); + } - /// <summary> - /// Renders the plot. - /// </summary> - /// <param name="g">The graphics surface.</param> - /// <param name="bounds">The rectangle storing the bounds for rendering.</param> - public void Draw( Graphics g, Rectangle bounds ) - { - ps_.Draw( g, bounds ); - } + /// <summary> + /// Renders the plot. + /// </summary> + /// <param name="g">The graphics surface.</param> + /// <param name="bounds">The rectangle storing the bounds for rendering.</param> + public void Draw( Graphics g, Rectangle bounds ) + { + ps_.Draw( g, bounds ); + } - /// <summary> - /// Clears the plot. - /// </summary> - public void Clear() - { - ps_.Clear(); - } + /// <summary> + /// Clears the plot. + /// </summary> + public void Clear() + { + ps_.Clear(); + } - /// <summary> - /// Adds a drawable object to the plot surface. If the object is an IPlot, - /// the PlotSurface2D axes will also be updated. - /// </summary> - /// <param name="p">The IDrawable object to add to the plot surface.</param> - public void Add( IDrawable p ) - { - ps_.Add( p ); - } + /// <summary> + /// Adds a drawable object to the plot surface. If the object is an IPlot, + /// the PlotSurface2D axes will also be updated. + /// </summary> + /// <param name="p">The IDrawable object to add to the plot surface.</param> + public void Add( IDrawable p ) + { + ps_.Add( p ); + } - /// <summary> - /// Adds a drawable object to the plot surface against the specified axes. If - /// the object is an IPlot, the PlotSurface2D axes will also be updated. - /// </summary> - /// <param name="p">the IDrawable object to add to the plot surface</param> - /// <param name="xp">the x-axis to add the plot against.</param> - /// <param name="yp">the y-axis to add the plot against.</param> - public void Add( IDrawable p, NPlot.PlotSurface2D.XAxisPosition xp, NPlot.PlotSurface2D.YAxisPosition yp ) + /// <summary> + /// Adds a drawable object to the plot surface against the specified axes. If + /// the object is an IPlot, the PlotSurface2D axes will also be updated. + /// </summary> + /// <param name="p">the IDrawable object to add to the plot surface</param> + /// <param name="xp">the x-axis to add the plot against.</param> + /// <param name="yp">the y-axis to add the plot against.</param> + public void Add( IDrawable p, NPlot.PlotSurface2D.XAxisPosition xp, NPlot.PlotSurface2D.YAxisPosition yp ) + { + ps_.Add( p, xp, yp ); + } + + + /// <summary> + /// Adds a drawable object to the plot surface. If the object is an IPlot, + /// the PlotSurface2D axes will also be updated. + /// </summary> + /// <param name="p">The IDrawable object to add to the plot surface.</param> + /// <param name="zOrder">The z-ordering when drawing (objects with lower numbers are drawn first)</param> + public void Add( IDrawable p, int zOrder ) + { + ps_.Add( p, zOrder ); + } + + + /// <summary> + /// Adds a drawable object to the plot surface against the specified axes. If + /// the object is an IPlot, the PlotSurface2D axes will also be updated. + /// </summary> + /// <param name="p">the IDrawable object to add to the plot surface</param> + /// <param name="xp">the x-axis to add the plot against.</param> + /// <param name="yp">the y-axis to add the plot against.</param> + /// <param name="zOrder">The z-ordering when drawing (objects with lower numbers are drawn first)</param> + public void Add( IDrawable p, NPlot.PlotSurface2D.XAxisPosition xp, + NPlot.PlotSurface2D.YAxisPosition yp, int zOrder ) + { + ps_.Add( p, xp, yp , zOrder); + } + + + /// <summary> + /// The plot surface title. + /// </summary> + public string Title + { + get { - ps_.Add( p, xp, yp ); + return ps_.Title; } - - /// <summary> - /// Adds a drawable object to the plot surface. If the object is an IPlot, - /// the PlotSurface2D axes will also be updated. - /// </summary> - /// <param name="p">The IDrawable object to add to the plot surface.</param> - /// <param name="zOrder">The z-ordering when drawing (objects with lower numbers are drawn first)</param> - public void Add( IDrawable p, int zOrder ) + set { - ps_.Add( p, zOrder ); + ps_.Title = value; } + } - /// <summary> - /// Adds a drawable object to the plot surface against the specified axes. If - /// the object is an IPlot, the PlotSurface2D axes will also be updated. - /// </summary> - /// <param name="p">the IDrawable object to add to the plot surface</param> - /// <param name="xp">the x-axis to add the plot against.</param> - /// <param name="yp">the y-axis to add the plot against.</param> - /// <param name="zOrder">The z-ordering when drawing (objects with lower numbers are drawn first)</param> - public void Add( IDrawable p, NPlot.PlotSurface2D.XAxisPosition xp, - NPlot.PlotSurface2D.YAxisPosition yp, int zOrder ) + /// <summary> + /// The plot title font. + /// </summary> + public Font TitleFont + { + get { - ps_.Add( p, xp, yp , zOrder); + return ps_.TitleFont; } - - /// <summary> - /// The plot surface title. - /// </summary> - public string Title + set { - get - { - return ps_.Title; - } - set - { - ps_.Title = value; - } + ps_.TitleFont = value; } + } - - /// <summary> - /// The plot title font. - /// </summary> - public Font TitleFont +#if API_1_1 + /// <summary> + /// It has been renamed to <see cref="SurfacePadding" /> and can be used with .NET 1.1 only. + /// </summary> + [ + Obsolete("This property is only maintained in .NET 1.1 profile for compatibility, but it might be removed in the future. Use SurfacePadding instead") + ] + public int Padding + { + get { - get - { - return ps_.TitleFont; - } - set - { - ps_.TitleFont = value; - } + return SurfacePadding; } -#if API_1_1 - /// <summary> - /// It has been renamed to <see cref="SurfacePadding" /> and can be used with .NET 1.1 only. - /// </summary> - [ - Obsolete("This property is only maintained in .NET 1.1 profile for compatibility, but it might be removed in the future. Use SurfacePadding instead") - ] - public int Padding + set { - get - { - return SurfacePadding; - } - set - { - SurfacePadding = value; - } + SurfacePadding = value; } + } #endif - /// <summary> - /// The distance in pixels to leave between of the edge of the bounding rectangle - /// supplied to the Draw method, and the markings that make up the plot. - /// </summary> - public int SurfacePadding + /// <summary> + /// The distance in pixels to leave between of the edge of the bounding rectangle + /// supplied to the Draw method, and the markings that make up the plot. + /// </summary> + public int SurfacePadding + { + get { - get - { - return ps_.SurfacePadding; - } - set - { - ps_.SurfacePadding = value; - } + return ps_.SurfacePadding; } + set + { + ps_.SurfacePadding = value; + } + } - /// <summary> - /// The bottom abscissa axis. - /// </summary> - public Axis XAxis1 + /// <summary> + /// The bottom abscissa axis. + /// </summary> + public Axis XAxis1 + { + get { - get - { - return ps_.XAxis1; - } - set - { - ps_.XAxis1 = value; - } + return ps_.XAxis1; } + set + { + ps_.XAxis1 = value; + } + } - /// <summary> - /// The left ordinate axis. - /// </summary> - public Axis YAxis1 + /// <summary> + /// The left ordinate axis. + /// </summary> + public Axis YAxis1 + { + get { - get - { - return ps_.YAxis1; - } - set - { - ps_.YAxis1 = value; - } + return ps_.YAxis1; } + set + { + ps_.YAxis1 = value; + } + } - /// <summary> - /// The top abscissa axis. - /// </summary> - public Axis XAxis2 + /// <summary> + /// The top abscissa axis. + /// </summary> + public Axis XAxis2 + { + get { - get - { - return ps_.XAxis2; - } - set - { - ps_.XAxis2 = value; - } + return ps_.XAxis2; } + set + { + ps_.XAxis2 = value; + } + } - /// <summary> - /// The right ordinate axis. - /// </summary> - public Axis YAxis2 + /// <summary> + /// The right ordinate axis. + /// </summary> + public Axis YAxis2 + { + get { - get - { - return ps_.YAxis2; - } - set - { - ps_.YAxis2 = value; - } + return ps_.YAxis2; } + set + { + ps_.YAxis2 = value; + } + } - /// <summary> - /// Gets or Sets the legend to use with this plot surface. - /// </summary> - public NPlot.Legend Legend + /// <summary> + /// Gets or Sets the legend to use with this plot surface. + /// </summary> + public NPlot.Legend Legend + { + get { - get - { - return ps_.Legend; - } - set - { - ps_.Legend = value; - } + return ps_.Legend; } - - /// <summary> - /// Gets or Sets the legend z-order. - /// </summary> - public int LegendZOrder + set { - get - { - return ps_.LegendZOrder; - } - set - { - ps_.LegendZOrder = value; - } + ps_.Legend = value; } + } - /// <summary> - /// A color used to paint the plot background. Mutually exclusive with PlotBackImage and PlotBackBrush - /// </summary> - public System.Drawing.Color PlotBackColor + /// <summary> + /// Gets or Sets the legend z-order. + /// </summary> + public int LegendZOrder + { + get { - set - { - ps_.PlotBackColor = value; - } + return ps_.LegendZOrder; } + set + { + ps_.LegendZOrder = value; + } + } - - /// <summary> - /// An imaged used to paint the plot background. Mutually exclusive with PlotBackColor and PlotBackBrush - /// </summary> - public System.Drawing.Bitmap PlotBackImage + /// <summary> + /// A color used to paint the plot background. Mutually exclusive with PlotBackImage and PlotBackBrush + /// </summary> + public System.Drawing.Color PlotBackColor + { + set { - set - { - ps_.PlotBackImage = value; - } + ps_.PlotBackColor = value; } + } - /// <summary> - /// A Rectangle brush used to paint the plot background. Mutually exclusive with PlotBackColor and PlotBackBrush - /// </summary> - public IRectangleBrush PlotBackBrush + /// <summary> + /// An imaged used to paint the plot background. Mutually exclusive with PlotBackColor and PlotBackBrush + /// </summary> + public System.Drawing.Bitmap PlotBackImage + { + set { - set - { - ps_.PlotBackBrush = value; - } + ps_.PlotBackImage = value; } + } - /// <summary> - /// Smoothing mode to use when drawing plots. - /// </summary> - public System.Drawing.Drawing2D.SmoothingMode SmoothingMode - { - get - { - return ps_.SmoothingMode; - } - set - { - ps_.SmoothingMode = value; - } + /// <summary> + /// A Rectangle brush used to paint the plot background. Mutually exclusive with PlotBackColor and PlotBackBrush + /// </summary> + public IRectangleBrush PlotBackBrush + { + set + { + ps_.PlotBackBrush = value; } + } - /// <summary> - /// The bitmap width - /// </summary> - public int Width + /// <summary> + /// Smoothing mode to use when drawing plots. + /// </summary> + public System.Drawing.Drawing2D.SmoothingMode SmoothingMode + { + get { - get - { - return b_.Width; - } + return ps_.SmoothingMode; } + set + { + ps_.SmoothingMode = value; + } + } - /// <summary> - /// The bitmap height - /// </summary> - public int Height + /// <summary> + /// The bitmap width + /// </summary> + public int Width + { + get { - get - { - return b_.Height; - } + return b_.Width; } + } - /// <summary> - /// Renders the bitmap to a MemoryStream. Useful for returning the bitmap from - /// an ASP.NET page. - /// </summary> - /// <returns>The MemoryStream object.</returns> - public System.IO.MemoryStream ToStream( System.Drawing.Imaging.ImageFormat imageFormat ) + /// <summary> + /// The bitmap height + /// </summary> + public int Height + { + get { - System.IO.MemoryStream stream = new System.IO.MemoryStream(); - ps_.Draw(Graphics.FromImage(this.Bitmap),new System.Drawing.Rectangle(0,0,b_.Width,b_.Height)); - this.Bitmap.Save(stream, imageFormat); - return stream; + return b_.Height; } + } - /// <summary> - /// The bitmap to use as the drawing surface. - /// </summary> - public System.Drawing.Bitmap Bitmap + /// <summary> + /// Renders the bitmap to a MemoryStream. Useful for returning the bitmap from + /// an ASP.NET page. + /// </summary> + /// <returns>The MemoryStream object.</returns> + public System.IO.MemoryStream ToStream( System.Drawing.Imaging.ImageFormat imageFormat ) + { + System.IO.MemoryStream stream = new System.IO.MemoryStream(); + ps_.Draw(Graphics.FromImage(this.Bitmap),new System.Drawing.Rectangle(0,0,b_.Width,b_.Height)); + this.Bitmap.Save(stream, imageFormat); + return stream; + } + + + /// <summary> + /// The bitmap to use as the drawing surface. + /// </summary> + public System.Drawing.Bitmap Bitmap + { + get { - get - { - return b_; - } - set - { - b_ = value; - } + return b_; } + set + { + b_ = value; + } + } - /// <summary> - /// The bitmap background color outside the bounds of the plot surface. - /// </summary> - public Color BackColor + /// <summary> + /// The bitmap background color outside the bounds of the plot surface. + /// </summary> + public Color BackColor + { + set { - set - { - backColor_ = value; - } + backColor_ = value; } - object backColor_ = null; - + } + object backColor_ = null; + - /// <summary> - /// Refreshes (draws) the plot. - /// </summary> - public void Refresh() + /// <summary> + /// Refreshes (draws) the plot. + /// </summary> + public void Refresh() + { + if (this.backColor_!=null) { - if (this.backColor_!=null) - { - Graphics g = Graphics.FromImage( b_ ); - g.FillRectangle( (new Pen( (Color)this.backColor_)).Brush,0,0,b_.Width,b_.Height ); - } - ps_.Draw( Graphics.FromImage(b_), new System.Drawing.Rectangle(0,0,b_.Width,b_.Height) ); + Graphics g = Graphics.FromImage( b_ ); + g.FillRectangle( (new Pen( (Color)this.backColor_)).Brush,0,0,b_.Width,b_.Height ); } + ps_.Draw( Graphics.FromImage(b_), new System.Drawing.Rectangle(0,0,b_.Width,b_.Height) ); + } - private NPlot.PlotSurface2D ps_; - private System.Drawing.Bitmap b_; + private NPlot.PlotSurface2D ps_; + private System.Drawing.Bitmap b_; - - /// <summary> - /// Add an axis constraint to the plot surface. Axis constraints can - /// specify relative world-pixel scalings, absolute axis positions etc. - /// </summary> - /// <param name="c">The axis constraint to add.</param> - public void AddAxesConstraint( AxesConstraint c ) - { - ps_.AddAxesConstraint( c ); - } + + /// <summary> + /// Add an axis constraint to the plot surface. Axis constraints can + /// specify relative world-pixel scalings, absolute axis positions etc. + /// </summary> + /// <param name="c">The axis constraint to add.</param> + public void AddAxesConstraint( AxesConstraint c ) + { + ps_.AddAxesConstraint( c ); + } - /// <summary> - /// Whether or not the title will be scaled according to size of the plot - /// surface. - /// </summary> - public bool AutoScaleTitle + /// <summary> + /// Whether or not the title will be scaled according to size of the plot + /// surface. + /// </summary> + public bool AutoScaleTitle + { + get { - get - { - return ps_.AutoScaleTitle; - } - set - { - ps_.AutoScaleTitle = value; - } + return ps_.AutoScaleTitle; } + set + { + ps_.AutoScaleTitle = value; + } + } - /// <summary> - /// When plots are added to the plot surface, the axes they are attached to - /// are immediately modified to reflect data of the plot. If - /// AutoScaleAutoGeneratedAxes is true when a plot is added, the axes will - /// be turned in to auto scaling ones if they are not already [tick marks, - /// tick text and label size scaled to size of plot surface]. If false, - /// axes will not be autoscaling. - /// </summary> - public bool AutoScaleAutoGeneratedAxes + /// <summary> + /// When plots are added to the plot surface, the axes they are attached to + /// are immediately modified to reflect data of the plot. If + /// AutoScaleAutoGeneratedAxes is true when a plot is added, the axes will + /// be turned in to auto scaling ones if they are not already [tick marks, + /// tick text and label size scaled to size of plot surface]. If false, + /// axes will not be autoscaling. + /// </summary> + public bool AutoScaleAutoGeneratedAxes + { + get { - get - { - return ps_.AutoScaleAutoGeneratedAxes; - } - set - { - ps_.AutoScaleAutoGeneratedAxes = value; - } + return ps_.AutoScaleAutoGeneratedAxes; } + set + { + ps_.AutoScaleAutoGeneratedAxes = value; + } + } - /// <summary> - /// Sets the title to be drawn using a solid brush of this color. - /// </summary> - public Color TitleColor + /// <summary> + /// Sets the title to be drawn using a solid brush of this color. + /// </summary> + public Color TitleColor + { + set { - set - { - ps_.TitleColor = value; - } + ps_.TitleColor = value; } + } - /// <summary> - /// The brush used for drawing the title. - /// </summary> - public Brush TitleBrush + /// <summary> + /// The brush used for drawing the title. + /// </summary> + public Brush TitleBrush + { + get { - get - { - return ps_.TitleBrush; - } - set - { - ps_.TitleBrush = value; - } + return ps_.TitleBrush; } + set + { + ps_.TitleBrush = value; + } + } - /// <summary> - /// Remove a drawable object from the plot surface. - /// </summary> - /// <param name="p">the drawable to remove</param> - /// <param name="updateAxes">whether or not to update the axes after removing the idrawable.</param> - public void Remove(IDrawable p, bool updateAxes) - { - ps_.Remove(p, updateAxes); - } + /// <summary> + /// Remove a drawable object from the plot surface. + /// </summary> + /// <param name="p">the drawable to remove</param> + /// <param name="updateAxes">whether or not to update the axes after removing the idrawable.</param> + public void Remove(IDrawable p, bool updateAxes) + { + ps_.Remove(p, updateAxes); + } - /// <summary> - /// Gets an array list containing all drawables currently added to the PlotSurface2D. - /// </summary> - public ArrayList Drawables + /// <summary> + /// Gets an array list containing all drawables currently added to the PlotSurface2D. + /// </summary> + public ArrayList Drawables + { + get { - get - { - return ps_.Drawables; - } + return ps_.Drawables; } - } } } Modified: trunk/src/CandlePlot.cs =================================================================== --- trunk/src/CandlePlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/CandlePlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -145,7 +145,6 @@ } } private double high_; - } @@ -248,12 +247,10 @@ rows_ = ((DataTable)((DataSet)dataSource_).Tables[0]).Rows; } } - else if (dataSource_ is DataTable ) { rows_ = ((DataTable)dataSource_).Rows; } - else { throw new NPlotException ( "not implemented yet" ); @@ -285,7 +282,6 @@ { get { - // try a fast track first if (useDoublesArrays_) { @@ -296,7 +292,6 @@ highDataArray_[i], closeDataArray_[i]); } - // is the data coming from a data source? else if (rows_ != null) { @@ -308,7 +303,6 @@ return new PointOLHC(x, open, low, high, close); } - // the data is coming from individual arrays. else if (abscissaData_ is Array && openData_ is Array && lowData_ is Array && highData_ is Array && closeData_ is Array) { @@ -320,12 +314,10 @@ return new PointOLHC(x, open, low, high, close); } - else { throw new NPlotException("not implemented yet"); } - } } @@ -339,7 +331,6 @@ get { // this is inefficient [could set up delegates in constructor]. - if (useDoublesArrays_) { return openDataArray_.Length; @@ -359,11 +350,17 @@ { int size = ((Array)openData_).Length; if (size != ((Array)closeData_).Length) + { throw new NPlotException("open and close arrays are not of same length"); + } if (size != ((Array)lowData_).Length) + { throw new NPlotException("open and close arrays are not of same length"); + } if (size != ((Array)highData_).Length) + { throw new NPlotException("open and close arrays are not of same length"); + } return size; } @@ -392,6 +389,7 @@ double second = Utils.ToDouble(((Array)abscissaData_).GetValue(1)); minStep = Math.Abs(second - first); } + if (((System.Collections.IList)abscissaData_).Count > 2) { double first = Utils.ToDouble(((Array)abscissaData_).GetValue(1)); @@ -399,6 +397,7 @@ if (Math.Abs(second - first) < minStep) minStep = Math.Abs(second - first); } + if (((System.Collections.IList)abscissaData_)[0] is DateTime) { return new DateTimeAxis(min - minStep / 2.0, max + minStep / 2.0); @@ -410,7 +409,6 @@ } else { - Utils.RowArrayMinMax(this.rows_, out min, out max, (string)this.abscissaData_); if (rows_.Count > 1) @@ -419,6 +417,7 @@ double second = Utils.ToDouble(rows_[1][(string)abscissaData_]); minStep = Math.Abs(second - first); } + if (rows_.Count > 2) { double first = Utils.ToDouble(rows_[1][(string)abscissaData_]); @@ -436,7 +435,6 @@ return new LinearAxis(min - minStep / 2.0, max + minStep / 2.0); } } - } @@ -446,7 +444,6 @@ /// <returns>A suitable y-axis.</returns> public Axis SuggestYAxis() { - double min_l; double max_l; double min_h; @@ -467,7 +464,6 @@ a.IncreaseRange( 0.08 ); return a; } - } @@ -496,12 +492,18 @@ if (cd.Count > 2) { // to be pretty sure we get the smallest gap. int xPos3 = (int)(xAxis.WorldToPhysical(((PointOLHC)cd[2]).X, false)).X; - if (xPos3 - xPos2 < minDist) minDist = xPos3 - xPos2; + if (xPos3 - xPos2 < minDist) + { + minDist = xPos3 - xPos2; + } if (cd.Count > 3) { int xPos4 = (int)(xAxis.WorldToPhysical(((PointOLHC)cd[3]).X, false)).X; - if (xPos4 - xPos3 < minDist) minDist = xPos4 - xPos3; + if (xPos4 - xPos3 < minDist) + { + minDist = xPos4 - xPos3; + } } } @@ -564,11 +566,12 @@ PointOLHC point = (PointOLHC)cd[i]; if ( (!double.IsNaN (point.Open)) && (!double.IsNaN(point.High)) && (!double.IsNaN (point.Low)) && (!double.IsNaN(point.Close)) ) { - int xPos = (int)(xAxis.WorldToPhysical( point.X, false )).X; - if (xPos + offset + addAmount < xAxis.PhysicalMin.X || xAxis.PhysicalMax.X < xPos + offset - addAmount) - continue; + if (xPos + offset + addAmount < xAxis.PhysicalMin.X || xAxis.PhysicalMax.X < xPos + offset - addAmount) + { + continue; + } int yPos1 = (int)(yAxis.WorldToPhysical( point.Low, false )).Y; int yPos2 = (int)(yAxis.WorldToPhysical( point.High, false )).Y; @@ -577,7 +580,6 @@ if (this.Style == Styles.Stick) { - /* // brant hyatt proposed. if (i > 0) @@ -597,7 +599,6 @@ g.DrawLine( p, xPos-addAmount+offset, yPos3, xPos+offset, yPos3 ); g.DrawLine( p, xPos+offset, yPos4, xPos+addAmount+offset, yPos4 ); } - else if (this.Style == Styles.Filled) { g.DrawLine( p, xPos+offset, yPos1, xPos+offset, yPos2 ); @@ -615,12 +616,9 @@ { g.DrawLine( p, xPos-addAmount+offset, yPos3, xPos-addAmount+stickWidth+offset, yPos3 ); } - } - } } - } @@ -746,7 +744,6 @@ g.DrawLine( p, startEnd.Left, (startEnd.Top + startEnd.Bottom)/2, startEnd.Right, (startEnd.Top + startEnd.Bottom)/2 ); - } @@ -774,7 +771,6 @@ /// </summary> public enum Styles { - /// <summary> /// Draw vertical line between low and high, tick on left for open and tick on right for close. /// </summary> @@ -786,7 +782,6 @@ /// in BullishColor and BearishColor properties. /// </summary> Filled - } @@ -865,6 +860,5 @@ public void WriteData( System.Text.StringBuilder sb, RectangleD region, bool onlyInRegion ) { } - } } Modified: trunk/src/DateTimeAxis.cs =================================================================== --- trunk/src/DateTimeAxis.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/DateTimeAxis.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -152,8 +152,7 @@ Point physicalMax, out object labelOffset, out object boundingBox ) - { - + { // TODO: Look at offset and bounding box logic again here. why temp and other vars? Point tLabelOffset; @@ -179,7 +178,6 @@ // draw large ticks. for (int i=0; i<largeTicks.Count; ++i) { - DateTime tickDate = new DateTime( (long)((double)largeTicks[i]) ); string label = LargeTickLabel(tickDate); @@ -207,21 +205,18 @@ { label = tickDate.Year.ToString(); } - else if ( this.LargeTickLabelType_ == LargeTickLabelType.month ) { label = tickDate.ToString("MMM"); label += " "; label += tickDate.Year.ToString().Substring(2,2); } - else if ( this.LargeTickLabelType_ == LargeTickLabelType.day ) { label = (tickDate.Day).ToString(); label += " "; label += tickDate.ToString("MMM"); - } - + } else if ( this.LargeTickLabelType_ == LargeTickLabelType.hourMinute ) { string minutes = tickDate.Minute.ToString(); @@ -246,7 +241,6 @@ } label = tickDate.Hour.ToString() + ":" + minutes + "." + seconds; } - } else { @@ -328,25 +322,33 @@ if(largeTickStep_ == TimeSpan.Zero) { - // if less than 10 minutes, then large ticks on second spacings. - if ( timeLength < new TimeSpan(0,0,2,0,0) ) { this.LargeTickLabelType_ = LargeTickLabelType.hourMinuteSeconds; double secondsSkip; - if (timeLength < new TimeSpan( 0,0,0,10,0 ) ) - secondsSkip = 1.0; - else if ( timeLength < new TimeSpan(0,0,0,20,0) ) - secondsSkip = 2.0; - else if ( timeLength < new TimeSpan(0,0,0,50,0) ) - secondsSkip = 5.0; - else if ( timeLength < new TimeSpan(0,0,2,30,0) ) - secondsSkip = 15.0; - else - secondsSkip = 30.0; + if (timeLength < new TimeSpan(0, 0, 0, 10, 0)) + { + secondsSkip = 1.0; + } + else if (timeLength < new TimeSpan(0, 0, 0, 20, 0)) + { + secondsSkip = 2.0; + } + else if (timeLength < new TimeSpan(0, 0, 0, 50, 0)) + { + secondsSkip = 5.0; + } + else if (timeLength < new TimeSpan(0, 0, 2, 30, 0)) + { + secondsSkip = 15.0; + } + else + { + secondsSkip = 30.0; + } int second = worldMinDate.Second; second -= second % (int)secondsSkip; @@ -371,25 +373,33 @@ currentTickDate = currentTickDate.AddSeconds( secondsSkip ); } } - // Less than 2 hours, then large ticks on minute spacings. - else if ( timeLength < new TimeSpan(0,2,0,0,0) ) { this.LargeTickLabelType_ = LargeTickLabelType.hourMinute; double minuteSkip; - if ( timeLength < new TimeSpan(0,0,10,0,0) ) - minuteSkip = 1.0; - else if ( timeLength < new TimeSpan(0,0,20,0,0) ) - minuteSkip = 2.0; - else if ( timeLength < new TimeSpan(0,0,50,0,0) ) - minuteSkip = 5.0; - else if ( timeLength < new TimeSpan(0,2,30,0,0) ) - minuteSkip = 15.0; - else //( timeLength < new TimeSpan( 0,5,0,0,0) ) - minuteSkip = 30.0; + if (timeLength < new TimeSpan(0, 0, 10, 0, 0)) + { + minuteSkip = 1.0; + } + else if (timeLength < new TimeSpan(0, 0, 20, 0, 0)) + { + minuteSkip = 2.0; + } + else if (timeLength < new TimeSpan(0, 0, 50, 0, 0)) + { + minuteSkip = 5.0; + } + else if (timeLength < new TimeSpan(0, 2, 30, 0, 0)) + { + minuteSkip = 15.0; + } + else //( timeLength < new TimeSpan( 0,5,0,0,0) ) + { + minuteSkip = 30.0; + } int minute = worldMinDate.Minute; minute -= minute % (int)minuteSkip; @@ -415,20 +425,24 @@ } // Less than 2 days, then large ticks on hour spacings. - else if ( timeLength < new TimeSpan(2,0,0,0,0) ) { this.LargeTickLabelType_ = LargeTickLabelType.hourMinute; double hourSkip; - if ( timeLength < new TimeSpan(0,10,0,0,0) ) - hourSkip = 1.0; - else if ( timeLength < new TimeSpan(0,20,0,0,0) ) - hourSkip = 2.0; - else - hourSkip = 6.0; + if (timeLength < new TimeSpan(0, 10, 0, 0, 0)) + { + hourSkip = 1.0; + } + else if (timeLength < new TimeSpan(0, 20, 0, 0, 0)) + { + hourSkip = 2.0; + } + else + { + hourSkip = 6.0; + } - int hour = worldMinDate.Hour; hour -= hour % (int)hourSkip; @@ -449,25 +463,29 @@ currentTickDate = currentTickDate.AddHours( hourSkip ); } - } - - // less than 5 months, then large ticks on day spacings. - else if ( timeLength < new TimeSpan(daysInMonth*4,0,0,0,0)) { this.LargeTickLabelType_ = LargeTickLabelType.day; double daySkip; - if ( timeLength < new TimeSpan(10,0,0,0,0) ) - daySkip = 1.0; - else if (timeLength < new TimeSpan(20,0,0,0,0) ) - daySkip = 2.0; - else if (timeLength < new TimeSpan(7*10,0,0,0,0) ) - daySkip = 7.0; - else - daySkip = 14.0; + if (timeLength < new TimeSpan(10, 0, 0, 0, 0)) + { + daySkip = 1.0; + } + else if (timeLength < new TimeSpan(20, 0, 0, 0, 0)) + { + daySkip = 2.0; + } + else if (timeLength < new TimeSpan(7 * 10, 0, 0, 0, 0)) + { + daySkip = 7.0; + } + else + { + daySkip = 14.0; + } DateTime currentTickDate = new DateTime( worldMinDate.Year, @@ -476,11 +494,12 @@ if (daySkip == 2.0) { - TimeSpan timeSinceBeginning = currentTickDate - DateTime.MinValue; if (timeSinceBeginning.Days % 2 == 1) + { currentTickDate = currentTickDate.AddDays(-1.0); + } } if (daySkip == 7 || daySkip == 14.0) @@ -508,8 +527,9 @@ case DayOfWeek.Sunday: currentTickDate = currentTickDate.AddDays(-6.0); break; + default: + break; } - } if (daySkip == 14.0f) @@ -534,38 +554,48 @@ currentTickDate = currentTickDate.AddDays(daySkip); } } - - - // else ticks on month or year spacings. - + // else ticks on month or year spacings. else if ( timeLength >= new TimeSpan(daysInMonth*4,0,0,0,0) ) { - int monthSpacing = 0; if ( timeLength.Days < daysInMonth*(12*3+6) ) { LargeTickLabelType_ = LargeTickLabelType.month; - if ( timeLength.Days < daysInMonth*10 ) - monthSpacing = 1; - else if ( timeLength.Days < daysInMonth*(12*2) ) - monthSpacing = 3; - else // if ( timeLength.Days < daysInMonth*(12*3+6) ) - monthSpacing = 6; + if (timeLength.Days < daysInMonth * 10) + { + monthSpacing = 1; + } + else if (timeLength.Days < daysInMonth * (12 * 2)) + { + monthSpacing = 3; + } + else // if ( timeLength.Days < daysInMonth*(12*3+6) ) + { + monthSpacing = 6; + } } else { LargeTickLabelType_ = LargeTickLabelType.year; if (timeLength.Days < daysInMonth * (12 * 6)) + { monthSpacing = 12; + } else if (timeLength.Days < daysInMonth * (12 * 12)) + { monthSpacing = 24; + } else if (timeLength.Days < daysInMonth * (12 * 30)) + { monthSpacing = 60; + } else + { monthSpacing = 120; + } //LargeTickLabelType_ = LargeTickLabelType.none; } @@ -675,7 +705,5 @@ } } private TimeSpan largeTickStep_ = TimeSpan.Zero; - - } } Modified: trunk/src/FilledRegion.cs =================================================================== --- trunk/src/FilledRegion.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/FilledRegion.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -116,11 +116,9 @@ } else if (lp1_ != null && lp2_ != null) { - SequenceAdapter a1 = new SequenceAdapter(lp1_.DataSource, lp1_.DataMember, lp1_.OrdinateData, lp1_.AbscissaData); SequenceAdapter a2 = new SequenceAdapter(lp2_.DataSource, lp2_.DataMember, lp2_.OrdinateData, lp2_.AbscissaData); - int count = a1.Count + a2.Count; PointF[] points = new PointF[count]; for (int i = 0; i < a1.Count; ++i) @@ -179,5 +177,4 @@ private Brush brush_ = new SolidBrush( Color.GhostWhite ); private IRectangleBrush areaBrush_ = null; } - } Modified: trunk/src/Grid.cs =================================================================== --- trunk/src/Grid.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/Grid.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -191,7 +191,6 @@ /// <param name="yAxis">The physical y axis to draw vertical lines parallel to.</param> public void Draw( Graphics g, PhysicalAxis xAxis, PhysicalAxis yAxis ) { - ArrayList xLargePositions = null; ArrayList yLargePositions = null; ArrayList xSmallPositions = null; @@ -209,7 +208,6 @@ DrawGridLines( g, yAxis, xAxis, yLargePositions, false, this.MajorGridPen ); } - if (this.horizontalGridType_ == GridType.Fine) { xAxis.Axis.WorldTickPositions_SecondPass( xAxis.PhysicalMin, xAxis.PhysicalMax, xLargePositions, ref xSmallPositions ); @@ -221,8 +219,6 @@ yAxis.Axis.WorldTickPositions_SecondPass( yAxis.PhysicalMin, yAxis.PhysicalMax, yLargePositions, ref ySmallPositions ); DrawGridLines( g, yAxis, xAxis, ySmallPositions, false, this.MinorGridPen ); } - } - } -} +} \ No newline at end of file Modified: trunk/src/HistogramPlot.cs =================================================================== --- trunk/src/HistogramPlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/HistogramPlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -87,23 +87,29 @@ // (1) determine the top left hand point of the bar (assuming not centered) PointD p1 = data[i]; - if ( double.IsNaN(p1.X) || double.IsNaN(p1.Y) ) - continue; + if (double.IsNaN(p1.X) || double.IsNaN(p1.Y)) + { + continue; + } // (2) determine the top right hand point of the bar (assuming not centered) PointD p2; if (i+1 != data.Count) { p2 = data[i+1]; - if ( double.IsNaN(p2.X) || double.IsNaN(p2.Y) ) - continue; + if (double.IsNaN(p2.X) || double.IsNaN(p2.Y)) + { + continue; + } p2.Y = p1.Y; } else if (i != 0) { p2 = data[i-1]; - if ( double.IsNaN(p2.X) || double.IsNaN(p2.Y) ) - continue; + if (double.IsNaN(p2.X) || double.IsNaN(p2.Y)) + { + continue; + } double offset = p1.X - p2.X; p2.X = p1.X + offset; p2.Y = p1.Y; @@ -186,7 +192,6 @@ } g.DrawRectangle( Pen, r.X, r.Y, r.Width, r.Height ); - } } @@ -295,8 +300,7 @@ /// <returns>A suitable y-axis.</returns> public Axis SuggestYAxis() { - - if ( this.isStacked_ ) + if (this.isStacked_) { double tmpMax = 0.0f; ArrayList adapterList = new ArrayList(); @@ -433,14 +437,12 @@ /// <param name="startEnd">A rectangle specifying the bounds of the area in the legend set aside for drawing.</param> public void DrawInLegend( Graphics g, Rectangle startEnd ) { - if (Filled) { g.FillRectangle( rectangleBrush_.Get(startEnd), startEnd ); } g.DrawRectangle( Pen, startEnd.X, startEnd.Y, startEnd.Width, startEnd.Height ); - } @@ -499,7 +501,5 @@ } } private double baseOffset_; - - } } Modified: trunk/src/HorizontalLine.cs =================================================================== --- trunk/src/HorizontalLine.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/HorizontalLine.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -62,6 +62,7 @@ this.pen_ = new Pen( color ); } + /// <summary> /// Constructor /// </summary> @@ -100,7 +101,6 @@ this.label_ = value; } } - private string label_ = ""; @@ -140,6 +140,7 @@ return new LinearAxis( this.value_, this.value_ ); } + /// <summary> /// Writes text data describing the horizontal line object to the supplied string builder. It is /// possible to specify that the data will be written only if the line is in the specified @@ -150,7 +151,6 @@ /// <param name="onlyInRegion">If true, data will be written only if the line is in the specified region.</param> public void WriteData(System.Text.StringBuilder sb, RectangleD region, bool onlyInRegion) { - // return if line is not in plot region and if (value_ > region.Y+region.Height || value_ < region.Y) { @@ -165,9 +165,9 @@ sb.Append( "\r\n" ); sb.Append( value_.ToString() ); sb.Append( "\r\n" ); - } + /// <summary> /// Draws the horizontal line plot on a GDI+ surface against the provided x and y axes. /// </summary> @@ -196,7 +196,7 @@ // todo: clip and proper logic for flipped axis min max. } - private double value_; + /// <summary> /// ordinate (Y) value to draw horizontal line at. /// </summary> @@ -211,8 +211,9 @@ value_ = value; } } + private double value_; - private Pen pen_ = new Pen( Color.Black ); + /// <summary> /// Pen to use to draw the horizontal line. /// </summary> @@ -227,6 +228,7 @@ pen_ = value; } } + private Pen pen_ = new Pen(Color.Black); /// <summary> @@ -262,6 +264,5 @@ } } private float scale_ = 1.0f; - } } Modified: trunk/src/IDrawable.cs =================================================================== --- trunk/src/IDrawable.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/IDrawable.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -34,6 +34,7 @@ namespace NPlot { + /// <summary> /// Defines a Draw method for drawing objects against an x and y /// Physical Axis. Modified: trunk/src/IGradient.cs =================================================================== --- trunk/src/IGradient.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/IGradient.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -48,6 +48,5 @@ /// <param name="prop">the number to get corresponding color for (between 0.0 and 1.0)</param> /// <returns>The color corresponding to the supplied number.</returns> Color GetColor( double prop ); - } } Modified: trunk/src/IPlot.cs =================================================================== --- trunk/src/IPlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/IPlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -79,6 +79,5 @@ /// <param name="region">Only write out data in this region if onlyInRegion is true.</param> /// <param name="onlyInRegion">If true, only data in region is written, else all data is written.</param> void WriteData( System.Text.StringBuilder sb, RectangleD region, bool onlyInRegion ); - } } Modified: trunk/src/IPlotSurface2D.cs =================================================================== --- trunk/src/IPlotSurface2D.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/IPlotSurface2D.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -231,6 +231,5 @@ /// <param name="p"></param> void UpdateAxes( IPlot p ); */ - } } Modified: trunk/src/ISequencePlot.cs =================================================================== --- trunk/src/ISequencePlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/ISequencePlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -59,7 +59,5 @@ /// Gets or sets the data, or column name for the ordinate [y] axis. /// </summary> object OrdinateData { get; set; } - } - } Modified: trunk/src/ISurface.cs =================================================================== --- trunk/src/ISurface.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/ISurface.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -72,7 +72,5 @@ /// </summary> /// <param name="e">mouse event args</param> void DoMouseDown( MouseEventArgs e ); - } - } Modified: trunk/src/ITransform2D.cs =================================================================== --- trunk/src/ITransform2D.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/ITransform2D.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -52,7 +52,5 @@ /// Transforms the given world point to physical coordinates /// </summary> PointF Transform( PointD worldPoint ); - } - } Modified: trunk/src/ImagePlot.cs =================================================================== --- trunk/src/ImagePlot.cs 2007-03-28 23:28:32 UTC (rev 28) +++ trunk/src/ImagePlot.cs 2007-03-30 19:12:03 UTC (rev 29) @@ -41,6 +41,7 @@ /// </summary> public class ImagePlot : IPlot { + private double[,] data_; private double xStart_ = 0.0; private double xStep_ = 1.0; @@ -343,7 +344,5 @@ public void WriteData( System.Text.StringBuilder sb, Rectan... [truncated message content] |