コード例 #1
0
        /// <summary>
        /// Draw all the <see cref="JapaneseCandleStick"/>'s to the specified <see cref="Graphics"/>
        /// device as a candlestick at each defined point.
        /// </summary>
        /// <param name="g">
        /// A graphic device object to be drawn into.  This is normally e.Graphics from the PaintEventArgs argument to the Paint() method.
        /// </param>
        /// <param name="pane">
        /// A reference to the <see cref="GraphPane"/> object that is the parent or owner of this object.
        /// </param>
        /// <param name="curve">
        /// A <see cref="JapaneseCandleStickItem"/> object representing the
        /// <see cref="JapaneseCandleStick"/>'s to be drawn.
        /// </param>
        /// <param name="baseAxis">
        /// The <see cref="Axis"/> class instance that defines the base (independent) axis for the <see cref="JapaneseCandleStick"/>
        /// </param>
        /// <param name="valueAxis">
        /// The <see cref="Axis"/> class instance that defines the value (dependent) axis for the <see cref="JapaneseCandleStick"/>
        /// </param>
        /// <param name="scaleFactor">
        /// The scaling factor to be used for rendering objects.  This is calculated and passed down by the parent <see cref="GraphPane"/> object using the
        /// <see cref="PaneBase.CalcScaleFactor"/> method, and is used to proportionally adjust font sizes, etc. according to the actual size of the graph.
        /// </param>
        public void Draw(Graphics g, GraphPane pane, JapaneseCandleStickItem curve, Axis baseAxis, Axis valueAxis, float scaleFactor)
        {
            // ValueHandler valueHandler = new ValueHandler( pane, false );
            float pixBase, pixHigh, pixLow, pixOpen, pixClose;

            if (curve.Points != null)
            {
                // float halfSize = _size * scaleFactor;
                float halfSize = this.GetBarWidth(pane, baseAxis, scaleFactor);

                Color tColor = this._color;
                Color tFallingColor = this._fallingColor;
                float tPenWidth = this._width;
                Fill tRisingFill = this._risingFill;
                Fill tFallingFill = this._fallingFill;
                Border tRisingBorder = this._risingBorder;
                Border tFallingBorder = this._fallingBorder;
                if (curve.IsSelected)
                {
                    tColor = Selection.Border.Color;
                    tFallingColor = Selection.Border.Color;
                    tPenWidth = Selection.Border.Width;
                    tRisingFill = Selection.Fill;
                    tFallingFill = Selection.Fill;
                    tRisingBorder = Selection.Border;
                    tFallingBorder = Selection.Border;
                }

                using (Pen risingPen = new Pen(tColor, tPenWidth))
                using (Pen fallingPen = new Pen(tFallingColor, tPenWidth))
                {
                    // Loop over each defined point
                    for (int i = 0; i < curve.Points.Count; i++)
                    {
                        PointPair pt = curve.Points[i];
                        double date = pt.X;
                        double high = pt.Y;
                        double low = pt.Z;
                        double open = PointPairBase.Missing;
                        double close = PointPairBase.Missing;
                        if (pt is StockPt)
                        {
                            open = (pt as StockPt).Open;
                            close = (pt as StockPt).Close;
                        }

                        // Any value set to double max is invalid and should be skipped
                        // This is used for calculated values that are out of range, divide
                        // by zero, etc.
                        // Also, any value <= zero on a log scale is invalid
                        if (!curve.Points[i].IsInvalid3D && (date > 0 || !baseAxis._scale.IsLog) && ((high > 0 && low > 0) || !valueAxis._scale.IsLog))
                        {
                            pixBase = (int)(baseAxis.Scale.Transform(curve.IsOverrideOrdinal, i, date) + 0.5);

                            // pixBase = baseAxis.Scale.Transform( curve.IsOverrideOrdinal, i, date );
                            pixHigh = valueAxis.Scale.Transform(curve.IsOverrideOrdinal, i, high);
                            pixLow = valueAxis.Scale.Transform(curve.IsOverrideOrdinal, i, low);
                            if (PointPairBase.IsValueInvalid(open))
                            {
                                pixOpen = float.MaxValue;
                            }
                            else
                            {
                                pixOpen = valueAxis.Scale.Transform(curve.IsOverrideOrdinal, i, open);
                            }

                            if (PointPairBase.IsValueInvalid(close))
                            {
                                pixClose = float.MaxValue;
                            }
                            else
                            {
                                pixClose = valueAxis.Scale.Transform(curve.IsOverrideOrdinal, i, close);
                            }

                            if (!curve.IsSelected && this._gradientFill.IsGradientValueType)
                            {
                                using (Pen tPen = this.GetPen(pane, scaleFactor, pt))
                                    this.Draw(
                                        g,
                                        pane,
                                        baseAxis is XAxis || baseAxis is X2Axis,
                                        pixBase,
                                        pixHigh,
                                        pixLow,
                                        pixOpen,
                                        pixClose,
                                        halfSize,
                                        scaleFactor,
                                        tPen,
                                        close > open ? tRisingFill : tFallingFill,
                                        close > open ? tRisingBorder : tFallingBorder,
                                        pt);
                            }
                            else
                            {
                                this.Draw(
                                    g,
                                    pane,
                                    baseAxis is XAxis || baseAxis is X2Axis,
                                    pixBase,
                                    pixHigh,
                                    pixLow,
                                    pixOpen,
                                    pixClose,
                                    halfSize,
                                    scaleFactor,
                                    close > open ? risingPen : fallingPen,
                                    close > open ? tRisingFill : tFallingFill,
                                    close > open ? tRisingBorder : tFallingBorder,
                                    pt);
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: GraphPane.cs プロジェクト: tu-tran/FareLiz
        /// <summary>
        /// Add a japanesecandlestick graph (<see cref="JapaneseCandleStickItem"/> object) to the plot with the given data points (<see cref="IPointList"/>)
        /// and properties.
        /// </summary>
        /// <remarks>
        /// This is simplified way to add curves without knowledge of the
        /// <see cref="CurveList"/> class.  An alternative is to use the <see cref="Graph.CurveList"/> Add() method. Note that the <see cref="IPointList"/>
        /// should contain <see cref="StockPt"/> objects instead of <see cref="PointPair"/>
        /// objects in order to contain all the data values required for this curve type.
        /// </remarks>
        /// <param name="label">
        /// The text label (string) for the curve that will be used as a <see cref="Legend"/> entry.
        /// </param>
        /// <param name="points">
        /// A <see cref="IPointList"/> of double precision value pairs that define the X and Y values for this curve
        /// </param>
        /// <returns>
        /// A <see cref="CurveItem"/> class for the newly created curve. This can then be used to access all of the curve properties that are not defined as
        /// arguments to the
        /// <see cref="AddJapaneseCandleStick(string,IPointList)"/> method.
        /// </returns>
        public JapaneseCandleStickItem AddJapaneseCandleStick(string label, IPointList points)
        {
            JapaneseCandleStickItem curve = new JapaneseCandleStickItem(label, points);
            this._curveList.Add(curve);

            return curve;
        }
コード例 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="JapaneseCandleStickItem"/> class. 
 /// The Copy Constructor
 /// </summary>
 /// <param name="rhs">
 /// The <see cref="JapaneseCandleStickItem"/> object from which to copy
 /// </param>
 public JapaneseCandleStickItem(JapaneseCandleStickItem rhs)
     : base(rhs)
 {
     this._stick = rhs._stick.Clone();
 }