//============================================================================ //ZedGraph Class Library - A Flexible Line Graph/Bar Graph Library in C# //Copyright ?2004 John Champion // //This library is free software; you can redistribute it and/or //modify it under the terms of the GNU Lesser General Public //License as published by the Free Software Foundation; either //version 2.1 of the License, or (at your option) any later version. // //This library is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //Lesser General Public License for more details. // //You should have received a copy of the GNU Lesser General Public //License along with this library; if not, write to the Free Software //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //============================================================================= using System; using System.Drawing; using System.Drawing.Drawing2D; namespace DrawGraph { /// /// Enumeration type for the various axis types that are available /// /// public enum AxisType { /// An ordinary, cartesian axis Linear, /// A base 10 log axis Log, /// A cartesian axis with calendar dates or times Date, /// An ordinal axis with user-defined text labels. An ordinal axis means that /// all data points are evenly spaced at integral values, and the actual coordinate values /// for points corresponding to that axis are ignored. That is, if the X axis is an /// ordinal type, then all X values associated with the curves are ignored. /// /// /// Text, /// An ordinal axis with regular numeric labels. An ordinal axis means that /// all data points are evenly spaced at integral values, and the actual coordinate values /// for points corresponding to that axis are ignored. That is, if the X axis is an /// ordinal type, then all X values associated with the curves are ignored. /// /// Ordinal, /// An ordinal axis that will have labels formatted with ordinal values corresponding /// to the number of values in each . /// /// /// The data points will be evenly-spaced at ordinal locations, and the /// actual data values are ignored. /// /// DateAsOrdinal, /// An ordinal axis that will have labels formatted with values from the actual data /// values of the first in the . /// /// /// Although the tics are labeled with real data values, the actual points will be /// evenly-spaced in spite of the data values. For example, if the X values of the first curve /// are 1, 5, and 100, then the tic labels will show 1, 5, and 100, but they will be equal /// distance from each other. /// /// LinearAsOrdinal, /// An exponential axis Exponent } /// /// Enumeration type for the various types of fills that can be used with /// charts. /// public enum FillType { /// No fill None, /// A solid fill using Solid, /// A custom fill using either or /// Brush, /// /// Fill with a single solid color based on the X value of the data. /// The X value is /// used to determine the color value based on a gradient brush, and using a data range /// of and . You can create a multicolor /// range by initializing the class with your own custom /// object based on a . In cases where a /// data value makes no sense (, , /// etc.), a default value of 50% of the range is assumed. The default range is 0 to 1. /// /// /// /// GradientByX, /// /// Fill with a single solid color based on the Z value of the data. /// The Z value is /// used to determine the color value based on a gradient brush, and using a data range /// of and . You can create a multicolor /// range by initializing the class with your own custom /// object based on a . In cases where a /// data value makes no sense (, , /// etc.), a default value of 50% of the range is assumed. The default range is 0 to 1. /// /// /// /// GradientByY, /// /// Fill with a single solid color based on the Z value of the data. /// The Z value is /// used to determine the color value based on a gradient brush, and using a data range /// of and . You can create a multicolor /// range by initializing the class with your own custom /// object based on a . In cases where a /// data value makes no sense (, , /// etc.), a default value of 50% of the range is assumed. The default range is 0 to 1. /// /// /// /// GradientByZ, /// /// Fill with a single solid color based on the "ColorValue" property of the data. /// The "ColorValue" property is /// used to determine the color value based on a gradient brush, and using a data range /// of and . You can create a multicolor /// range by initializing the class with your own custom /// object based on a . In cases where a /// data value makes no sense (, , /// etc.), a default value of 50% of the range is assumed. The default range is 0 to 1. /// /// /// /// GradientByColorValue } /// /// Enumeration type for the various axis date and time unit types that are available /// public enum DateUnit { /// Yearly units and /// Year, /// Monthly units and /// Month, /// Daily units and /// Day, /// Hourly units and /// Hour, /// Minute units and /// Minute, /// Second units and /// Second, /// Millisecond units and /// Millisecond } /// /// Enumeration type for the various symbol shapes that are available /// /// public enum SymbolType { /// Square-shaped Square, /// Rhombus-shaped Diamond, /// Equilateral triangle Triangle, /// Uniform circle Circle, /// "X" shaped . This symbol cannot /// be filled since it has no outline. XCross, /// "+" shaped . This symbol cannot /// be filled since it has no outline. Plus, /// Asterisk-shaped . This symbol /// cannot be filled since it has no outline. Star, /// Unilateral triangle , pointing /// down. TriangleDown, /// /// Horizontal dash . This symbol cannot be /// filled since it has no outline. /// HDash, /// /// Vertical dash . This symbol cannot be /// filled since it has no outline. /// VDash, /// A Default symbol type (the symbol type will be obtained /// from . Default, /// No symbol is shown (this is equivalent to using /// = false. None } /// /// Enumeration type that defines the possible legend locations /// /// public enum LegendPos { /// /// Locate the above the /// Top, /// /// Locate the on the left side of the /// Left, /// /// Locate the on the right side of the /// Right, /// /// Locate the below the /// Bottom, /// /// Locate the inside the in the /// top-left corner. /// InsideTopLeft, /// /// Locate the inside the in the /// top-right corner. /// InsideTopRight, /// /// Locate the inside the in the /// bottom-left corner. /// InsideBotLeft, /// /// Locate the inside the in the /// bottom-right corner. /// InsideBotRight, /// /// Locate the as a floating object above the graph at the /// location specified by . /// Float, /// /// Locate the centered above the /// TopCenter, /// /// Locate the centered below the /// BottomCenter, /// /// Locate the above the , but flush /// against the left margin of the . /// TopFlushLeft, /// /// Locate the below the , but flush /// against the left margin of the . /// BottomFlushLeft } /// /// Enumeration type for the different horizontal text alignment options /// /// public enum AlignH { /// /// Position the text so that its left edge is aligned with the /// specified X,Y location. Used by the /// method. /// Left, /// /// Position the text so that its center is aligned (horizontally) with the /// specified X,Y location. Used by the /// method. /// Center, /// /// Position the text so that its right edge is aligned with the /// specified X,Y location. Used by the /// method. /// Right } /// /// Enumeration type for the different proximal alignment options /// /// /// public enum AlignP { /// /// Position the text so that its "inside" edge (the edge that is /// nearest to the alignment reference point or object) is aligned. /// Used by the method to align text /// to the axis. /// Inside, /// /// Position the text so that its center is aligned with the /// reference object or point. /// Used by the method to align text /// to the axis. /// Center, /// /// Position the text so that its right edge (the edge that is /// farthest from the alignment reference point or object) is aligned. /// Used by the method to align text /// to the axis. /// Outside } /// /// Enumeration type for the different vertical text alignment options /// /// specified X,Y location. Used by the /// method. public enum AlignV { /// /// Position the text so that its top edge is aligned with the /// specified X,Y location. Used by the /// method. /// Top, /// /// Position the text so that its center is aligned (vertically) with the /// specified X,Y location. Used by the /// method. /// Center, /// /// Position the text so that its bottom edge is aligned with the /// specified X,Y location. Used by the /// method. /// Bottom } /// /// Enumeration type for the user-defined coordinate types available. /// These coordinate types are used the objects /// and objects only. /// /// public enum CoordType { /// /// Coordinates are specified as a fraction of the /// . That is, for the X coordinate, 0.0 /// is at the left edge of the ChartRect and 1.0 /// is at the right edge of the ChartRect. A value less /// than zero is left of the ChartRect and a value /// greater than 1.0 is right of the ChartRect. For the Y coordinate, 0.0 /// is the top and 1.0 is the bottom. /// ChartFraction, /// /// Coordinates are specified as a fraction of the /// . That is, for the X coordinate, 0.0 /// is at the left edge of the Rect and 1.0 /// is at the right edge of the Rect. A value less /// than zero is left of the Rect and a value /// greater than 1.0 is right of the Rect. For the Y coordinate, 0.0 /// is the top and 1.0 is the bottom. Note that /// any value less than zero or greater than 1.0 will be outside /// the Rect, and therefore clipped. /// PaneFraction, /// /// Coordinates are specified according to the user axis scales /// for the and . /// AxisXYScale, /// /// Coordinates are specified according to the user axis scales /// for the and . /// AxisXY2Scale, /// /// The X coordinate is specified as a fraction of the , /// and the Y coordinate is specified as a fraction of the . /// /// /// For the X coordinate, 0.0 /// is at the left edge of the ChartRect and 1.0 /// is at the right edge of the ChartRect. A value less /// than zero is left of the ChartRect and a value /// greater than 1.0 is right of the ChartRect. For the Y coordinate, a value of zero is at /// the left side of the pane, and a value of 1.0 is at the right side of the pane. /// XChartFractionYPaneFraction, /// /// The X coordinate is specified as a fraction of the , /// and the Y coordinate is specified as a fraction of the . /// /// /// For the X coordinate, a value of zero is at /// the left side of the pane, and a value of 1.0 is at the right side of the pane. /// For the Y coordinate, 0.0 /// is at the top edge of the ChartRect and 1.0 /// is at the bottom edge of the ChartRect. A value less /// than zero is above the ChartRect and a value /// greater than 1.0 is below the ChartRect. /// XPaneFractionYChartFraction, /// /// The X coordinate is specified as an X Scale value, and the Y coordinate /// is specified as a fraction of the . /// /// /// For the X coordinate, the value just corresponds to the values of the X scale. /// Values outside the scale range will be /// outside the . For the Y coordinate, 0.0 /// is at the top edge of the ChartRect and 1.0 /// is at the bottom edge of the ChartRect. A value less /// than zero is above the ChartRect and a value /// greater than 1.0 is below the ChartRect. /// XScaleYChartFraction, /// /// The X coordinate is specified as a fraction of the /// and the Y coordinate is specified as /// a Y scale value. /// /// /// For the X coordinate, 0.0 /// is at the left edge of the ChartRect and 1.0 /// is at the right edge of the ChartRect. A value less /// than zero is left of the ChartRect and a value /// greater than 1.0 is right of the ChartRect. For the Y coordinate, the value just /// corresponds to the values of the Y scale. Values outside the scale range will be /// outside the . /// XChartFractionYScale, /// /// The X coordinate is specified as a fraction of the /// and the Y coordinate is specified as /// a Y2 scale value. /// /// /// For the X coordinate, 0.0 /// is at the left edge of the ChartRect and 1.0 /// is at the right edge of the ChartRect. A value less /// than zero is left of the ChartRect and a value /// greater than 1.0 is right of the ChartRect. For the Y coordinate, the value just /// corresponds to the values of the Y2 scale. Values outside the scale range will be /// outside the . /// XChartFractionY2Scale } /// /// Enumeration type that defines how a curve is drawn. Curves can be drawn /// as ordinary lines by connecting the points directly, or in a stair-step /// fashion as a series of discrete, constant values. In a stair step plot, /// all lines segments are either horizontal or vertical. In a non-step (line) /// plot, the lines can be any angle. /// /// public enum StepType { /// /// Draw the as a stair-step in which each /// point defines the /// beginning (left side) of a new stair. This implies the points are /// defined at the beginning of an "event." /// ForwardStep, /// /// Draw the as a stair-step in which each /// point defines the end (right side) of a new stair. This implies /// the points are defined at the end of an "event." /// RearwardStep, /// /// Draw the as an ordinary line, in which the /// points are connected directly by line segments. /// NonStep } /// /// Enumeration type that defines the base axis from which graphs /// are displayed. The bars can be drawn on any of the four axes (, /// , , and ). /// /// public enum BarBase { /// /// Draw the chart based from the . /// X, /// /// Draw the chart based from the . /// X2, /// /// Draw the chart based from the . /// Y, /// /// Draw the chart based from the . /// Y2 } /// /// Enumeration type that defines the available types of graphs. /// /// public enum LineType { /// /// Draw the lines as normal. Any fill area goes from each line down to the X Axis. /// Normal, /// /// Draw the lines stacked on top of each other, accumulating values to a total value. /// Stack } /// /// Enumeration type that defines the available types of graphs. /// /// public enum BarType { /// /// Draw each side by side in clusters. /// Cluster, /// /// Draw each side by side in clusters, also use the "Z" value from the /// to define the bottom of each bar. This is very similar to /// a , except that multiple bars will be automatically clustered, and /// the bar width is defined according to available space rather than as a fixed width setting. /// ClusterHiLow, /// /// Draw the bars one on top of the other. The bars will /// be drawn such that the last bar in the will be behind /// all other bars. Note that the bar values are not summed up for the overlay /// mode. The data values must be summed before being passed /// to . /// For example, if the first bar of /// the first has a value of 100, and the first bar of /// the second has a value of 120, then that bar will /// appear to be 20 units on top of the first bar. /// Overlay, /// /// Draw the bars one on top of the other. The bars will /// be drawn such that the bars are sorted according to the maximum value, with /// the tallest bar at each point at the back and the shortest bar at the front. /// This is similar to the mode, but the bars are sorted at /// each base value. /// The data values must be summed before being passed /// to . For example, if the first bar of /// the first has a value of 100, and the first bar of /// the second has a value of 120, then that bar will /// appear to be 20 units on top of the first bar. /// SortedOverlay, /// /// Draw the bars in an additive format so that they stack on /// top of one another. The value of the last bar drawn will be the sum of the values /// of all prior bars. /// Stack, /// /// Draw the bars in a format whereby the height of each /// represents the percentage of the total each one represents. Negative values ///are displayed below the zero line as percentages of the absolute total of all values. /// PercentStack } /// /// Enumeration type that defines which set of data points - X or Y - is used /// to perform the sort. /// public enum SortType { /// /// Use the Y values to sort the list. /// YValues, /// /// Use the X values to sort the list. /// XValues }; /// /// Enumeration that specifies a Z-Order position for /// objects. /// /// This enumeration allows you to set the layering of various graph /// features. Except for the objects, other feature types /// all have a fixed depth as follows (front to back): /// /// objects /// The border around /// objects /// The features /// The background fill of the /// The pane /// The background fill of the /// /// You cannot place anything behind the /// background fill, but allows you to /// explicitly control the depth of objects /// between all other object types. For items of equal , /// such as multiple 's or 's /// having the same value, the relative depth is /// controlled by the ordinal position in the list (either /// or ). /// objects /// can be placed in the of either a /// or a . For a /// -based , all /// values are applicable. For a -based /// , any value can be used, but there /// are really only three depths: /// will place the item behind the pane title, /// will place on top of all other graph features, /// any other value places the object above the pane title, but behind the 's. /// /// public enum ZOrder { /// /// Specifies that the will be behind all other /// objects (including the ). /// H_BehindAll, /// /// Specifies that the will be behind the /// background /// (see ). /// G_BehindChartFill, /// /// Specifies that the will be behind the grid lines. /// F_BehindGrid, /// /// Specifies that the will be behind the /// objects. /// E_BehindCurves, /// /// Specifies that the will be behind the /// objects. /// D_BehindAxis, /// /// Specifies that the will be behind the /// border. /// C_BehindChartBorder, /// /// Specifies that the will be behind the /// object. /// B_BehindLegend, /// /// Specifies that the will be in front of /// all other objects, except for the other /// objects that have the same and are before /// this object in the . /// A_InFront } /// /// Enumeration that determines the type of label that is displayed for each pie slice /// (see ). /// public enum PieLabelType { /// /// Displays and for /// a slice in a Pie Chart. /// Name_Value, /// /// Displays and (as % of total) for /// a slice in a Pie Chart. /// Name_Percent, /// /// Displays a containing the both /// as an absolute number and as percentage of the total. /// Name_Value_Percent, /// /// Displays for /// a slice in a Pie Chart. /// Value, /// /// Displays (as % of total) for /// a slice in a Pie Chart. /// Percent, /// /// Displays for a slice in a Pie Chart. /// Name, /// ///No label displayed. /// None } /// /// Define the auto layout options for the /// method. /// public enum PaneLayout { /// /// Layout the 's so they are in a square grid (always 2x2, 3x3, 4x4), /// leaving blank spaces as required. /// /// For example, a single pane would generate a 1x1 grid, between 2 and 4 panes would generate /// a 2x2 grid, 5 to 9 panes would generate a 3x3 grid. ForceSquare, /// /// Layout the 's so they are in a general square (2x2, 3x3, etc.), but use extra /// columns when necessary (row x column = 1x2, 2x3, 3x4, etc.) depending on the total number /// of panes required. /// /// For example, a 2x2 grid has four panes and a 3x3 grid has 9 panes. If there are /// 6 panes required, then this option will eliminate a row (column preferred) to make a /// 2 row x 3 column grid. With 7 panes, it will make a 3x3 grid with 2 empty spaces. SquareColPreferred, /// /// Layout the 's so they are in a general square (2x2, 3x3, etc.), but use extra /// rows when necessary (2x1, 3x2, 4x3, etc.) depending on the total number of panes required. /// /// For example, a 2x2 grid has four panes and a 3x3 grid has 9 panes. If there are /// 6 panes required, then this option will eliminate a column (row preferred) to make a /// 3 row x 2 column grid. With 7 panes, it will make a 3x3 grid with 2 empty spaces. SquareRowPreferred, /// /// Layout the 's in a single row /// SingleRow, /// /// Layout the 's in a single column /// SingleColumn, /// /// Layout the 's with an explicit number of columns: The first row has /// 1 column and the second row has 2 columns for a total of 3 panes. /// ExplicitCol12, /// /// Layout the 's with an explicit number of columns: The first row has /// 2 columns and the second row has 1 column for a total of 3 panes. /// ExplicitCol21, /// /// Layout the 's with an explicit number of columns: The first row has /// 2 columns and the second row has 3 columns for a total of 5 panes. /// ExplicitCol23, /// /// Layout the 's with an explicit number of columns: The first row has /// 3 columns and the second row has 2 columns for a total of 5 panes. /// ExplicitCol32, /// /// Layout the 's with an explicit number of rows: The first column has /// 1 row and the second column has 2 rows for a total of 3 panes. /// ExplicitRow12, /// /// Layout the 's with an explicit number of rows: The first column has /// 2 rows and the second column has 1 row for a total of 3 panes. /// ExplicitRow21, /// /// Layout the 's with an explicit number of rows: The first column has /// 2 rows and the second column has 3 rows for a total of 5 panes. /// ExplicitRow23, /// /// Layout the 's with an explicit number of rows: The first column has /// 3 rows and the second column has 2 rows for a total of 5 panes. /// ExplicitRow32 } /// /// Enum for specifying the type of data to be returned by the ZedGraphWeb Render() method. /// public enum RenderModeType { /// /// Renders as an IMG tag referencing a local generated image. ContentType stays text. /// ImageTag, /// /// Renders the binary image. ContentType is changed accordingly. /// RawImage } }