/// <summary> /// Draws the point plot on a GDI+ surface against the provided x and y axes. /// </summary> /// <param name="g">The GDI+ surface on which to draw.</param> /// <param name="xAxis">The X-Axis to draw against.</param> /// <param name="yAxis">The Y-Axis to draw against.</param> public virtual void Draw(Graphics g, PhysicalAxis xAxis, PhysicalAxis yAxis) { SequenceAdapter data_ = new SequenceAdapter(this.DataSource, this.DataMember, this.OrdinateData, this.AbscissaData); float leftCutoff_ = xAxis.PhysicalMin.X - marker_.Size; float rightCutoff_ = xAxis.PhysicalMax.X + marker_.Size; for (int i = 0; i < data_.Count; ++i) { if (!Double.IsNaN(data_[i].X) && !Double.IsNaN(data_[i].Y)) { PointF xPos = xAxis.WorldToPhysical(data_[i].X, false); if (xPos.X < leftCutoff_ || rightCutoff_ < xPos.X) { continue; } PointF yPos = yAxis.WorldToPhysical(data_[i].Y, false); marker_.Draw(g, (int)xPos.X, (int)yPos.Y); if (marker_.DropLine) { PointD yMin = new PointD(data_[i].X, Math.Max(0.0f, yAxis.Axis.WorldMin)); PointF yStart = yAxis.WorldToPhysical(yMin.Y, false); g.DrawLine(marker_.Pen, new Point((int)xPos.X, (int)yStart.Y), new Point((int)xPos.X, (int)yPos.Y)); } } } }
/// <summary> /// Draws the marker on a plot surface. /// </summary> /// <param name="g">graphics surface on which to draw</param> /// <param name="xAxis">The X-Axis to draw against.</param> /// <param name="yAxis">The Y-Axis to draw against.</param> public void Draw(System.Drawing.Graphics g, PhysicalAxis xAxis, PhysicalAxis yAxis) { PointF point = new PointF( xAxis.WorldToPhysical(x_, true).X, yAxis.WorldToPhysical(y_, true).Y); marker_.Draw(g, (int)point.X, (int)point.Y); }
/// <summary> /// Draws the plot on a GDI+ surface against the provided x and y axes. /// </summary> /// <param name="g">The GDI+ surface on which to draw.</param> /// <param name="xAxis">The X-Axis to draw against.</param> /// <param name="yAxis">The Y-Axis to draw against.</param> public override void Draw(Graphics g, PhysicalAxis xAxis, PhysicalAxis yAxis) { SequenceAdapter data = new SequenceAdapter(this.DataSource, this.DataMember, this.OrdinateData, this.AbscissaData); TextDataAdapter textData = new TextDataAdapter(this.DataSource, this.DataMember, this.TextData); // first plot the marker // we can do this cast, since the constructor accepts only this type! for (int i = 0; i < data.Count; ++i) { try { PointD pt = data[i]; if (!Double.IsNaN(pt.X) && !Double.IsNaN(pt.Y)) { PointF xPos = xAxis.WorldToPhysical(pt.X, false); PointF yPos = yAxis.WorldToPhysical(pt.Y, false); Marker.Draw(g, (int)xPos.X, (int)yPos.Y); if (textData[i] != "") { SizeF size = g.MeasureString(textData[i], this.Font); switch (labelTextPosition_) { case LabelPositions.Above: g.DrawString(textData[i], font_, Brushes.Black, new PointF(xPos.X - size.Width / 2, yPos.Y - size.Height - Marker.Size * 2 / 3)); break; case LabelPositions.Below: g.DrawString(textData[i], font_, Brushes.Black, new PointF(xPos.X - size.Width / 2, yPos.Y + Marker.Size * 2 / 3)); break; case LabelPositions.Left: g.DrawString(textData[i], font_, Brushes.Black, new PointF(xPos.X - size.Width - Marker.Size * 2 / 3, yPos.Y - size.Height / 2)); break; case LabelPositions.Right: g.DrawString(textData[i], font_, Brushes.Black, new PointF(xPos.X + Marker.Size * 2 / 3, yPos.Y - size.Height / 2)); break; } } } } catch { throw new FlorenceException("Error in TextPlot.Draw"); } } }