示例#1
0
 public PdfRectangle Transform(System.Drawing.Drawing2D.Matrix transform) {
     System.Drawing.PointF[] points = {new PointF(llx, lly), new PointF(urx, ury)};
     float[] pts = { points[0].X, points[0].Y, points[1].X, points[1].Y };
     transform.TransformPoints(points);
     if(pts[0] > pts[2]) {
         points[0].X = pts[2];
         points[1].X = pts[0];
     }
     if(pts[1] > pts[3]) {
         points[0].Y = pts[3];
         points[1].Y = pts[1];
     }
     return new PdfRectangle(points[0].X, points[0].Y, points[1].X, points[1].Y);
 }
            private static SharpMap.Data.FeatureDataTable TransformedFeatureDataTable(
            System.Drawing.Drawing2D.Matrix matrix, SharpMap.Data.FeatureDataTable fdt)
            {
                SharpMap.Data.FeatureDataTable fdtClone = new SharpMap.Data.FeatureDataTable(fdt);
                fdtClone.Clear();
                foreach (SharpMap.Data.FeatureDataRow row in fdt)
                {
                SharpMap.Data.FeatureDataRow newRow = fdtClone.NewRow();
                for (System.Int32 i = 0; i < fdtClone.Columns.Count; i++)
                    newRow[i] = row[i];

                SharpMap.Geometries.Point smpt = (SharpMap.Geometries.Point)row.Geometry;
                System.Drawing.PointF[] pts = new System.Drawing.PointF[]
                    { new System.Drawing.PointF((float)smpt.X, (float)smpt.Y) };
                matrix.TransformPoints(pts);
                newRow.Geometry = new SharpMap.Geometries.Point(pts[0].X, pts[0].Y);

                fdtClone.AddRow(newRow);
                }

                return fdtClone;
            }
		public BoundingBox Transform(System.Drawing.Drawing2D.Matrix matrix)
		{
			System.Drawing.PointF[] points = new System.Drawing.PointF[2];
			points[0] = new System.Drawing.PointF((float)XMin, (float)YMin);
			points[1] = new System.Drawing.PointF((float)XMax, (float)YMax);
			matrix.TransformPoints(points);
			return new BoundingBox(points[0].X, points[1].X, points[0].Y, points[1].Y);
		}
示例#4
0
        /// <summary>
        ///		Renders the chart
        /// </summary>
        /// <param name="graphics">Graphics object to output the drawing</param>
        /// <param name="width">Specifies the Width of the chart</param>
        /// <param name="height">Specifies the height of the chart</param>
        public override void Render( System.Drawing.Graphics graphics, int width, int height)
        {
            ChartEngine engine = this.Engine;
            float scaleX = engine.ScaleX, scaleY = engine.ScaleY;
            Pen pen = this.Line.GetPen(graphics);
            Brush brush = this.Fill.GetBrush(graphics);

            float xStart=0, xWidth;

            int xCount = 0, xPosFinal=0;
            if (engine.Charts.Count > 1)
            {
                foreach (Chart c in engine.Charts)
                {
                    if (c.Equals(this))	xPosFinal = xCount;
                    if (c as MapColumnChart != null) xCount ++;
                }
                xWidth = ((scaleX-1)/xCount) ;
                xStart = xWidth * xPosFinal + 1;
            }
            else
            {
                xStart=1;
                xWidth=scaleX;
            }

            float y;
            float yHeight;
            float x=0;
            foreach (ChartPoint p in this.Data)
            {
                if (p.YValue * scaleY < 0)
                {
                    y=(p.YValue * scaleY);
                    yHeight=-(p.YValue * scaleY);
                }

                else
                {
                    y=0;
                    yHeight=(p.YValue * scaleY);
                }
                Rectangle rect = new Rectangle(
                    (int)((float)(x * scaleX) + xStart) ,
                    (int)y,
                    (int)xWidth,
                    (int)yHeight);

                Point []points  = new Point[]{ rect.Location };
                graphics.TransformPoints(
                    System.Drawing.Drawing2D.CoordinateSpace.Page,
                    System.Drawing.Drawing2D.CoordinateSpace.World,
                    points);

                if (this.rects !=null)
                    this.rects.Add(
                        new Rectangle(
                        points[0], new Size((int)xWidth, (int)yHeight))
                        );
                graphics.FillRectangle( brush, rect);
                graphics.DrawRectangle( pen, rect);
                x++;
            }
        }
示例#5
0
        public override bool OnClick(System.Windows.Forms.Control container, System.Windows.Forms.MouseEventArgs evnt, System.Drawing.Drawing2D.Matrix viewTransform)
		{
			base.OnClick(container, evnt, viewTransform);

            if (evnt.Button == System.Windows.Forms.MouseButtons.Left)
            {
                var basePts = new PointF[] { 
                    new PointF(Node.bounds.Left + GraphConstants.HorizontalSpacing, bounds.Top), 
                    new PointF(Node.bounds.Right + GraphConstants.HorizontalSpacing - GraphConstants.NodeExtraWidth, bounds.Bottom) };
                viewTransform.TransformPoints(basePts);

                var dropDownCtrl = new ListBox();
                dropDownCtrl.BorderStyle = BorderStyle.None;
                dropDownCtrl.Margin = new Padding(0);
                dropDownCtrl.Padding = new Padding(0);

                dropDownCtrl.DrawMode = DrawMode.OwnerDrawVariable;
                dropDownCtrl.DrawItem +=
                    (object sender, DrawItemEventArgs e) =>
                    {
                        var lb = sender as ListBox;
                        var item = lb.Items[e.Index];

                        bool selectedState = e.State != DrawItemState.None;

                        // We have to draw the background every item, because the control 
                        // background isn't refreshed on state changes
                        e.Graphics.FillRectangle(selectedState ? Brushes.Gray : BackgroundBrush, e.Bounds);
                        e.Graphics.DrawString(
                            item.ToString(), SystemFonts.MenuFont, selectedState ? Brushes.Black : Brushes.White,
                            e.Bounds, GraphConstants.LeftTextStringFormat);
                    };

                dropDownCtrl.MeasureItem +=
                    (object sender, MeasureItemEventArgs e) =>
                    {
                        var lb = sender as ListBox;
                        var item = lb.Items[e.Index];
                        var size = new Size(GraphConstants.MinimumItemWidth, GraphConstants.MinimumItemHeight);
                        var textSize = e.Graphics.MeasureString(
                            item.ToString(), SystemFonts.MenuFont,
                            size, GraphConstants.LeftMeasureTextStringFormat);
                        e.ItemWidth = (int)textSize.Width;
                        e.ItemHeight = (int)textSize.Height;
                    };

                dropDownCtrl.BackColor = Color.FromArgb(96, 96, 96);

                dropDownCtrl.Items.AddRange(Items);
                dropDownCtrl.SelectedIndex = SelectedIndex;
                
                var toolDrop = new ToolStripDropDown();
                var toolHost = new ToolStripControlHost(dropDownCtrl);
                toolHost.Margin = new Padding(0);
                toolDrop.Padding = new Padding(0);
                toolDrop.Items.Add(toolHost);

                // Unfortunately the AutoSize functionality for toolHost just doesn't
                // work with an owner draw list box... Perhaps MeasureItem isn't called
                // until the list box is first drawn -- but that is after the tool host
                // has done it's auto size
                toolHost.AutoSize = false;
                toolHost.Size = new Size((int)(basePts[1].X - basePts[0].X), dropDownCtrl.PreferredHeight + 20);
                
                dropDownCtrl.SelectedIndexChanged +=
                    (object sender, System.EventArgs e) =>
                    {
                        var lb = sender as ListBox;
                        if (lb != null)
                            SelectedIndex = lb.SelectedIndex;
                        toolDrop.Close();
                    };

                toolDrop.Show(container, new Point((int)basePts[0].X, (int)basePts[1].Y + 4));
                return true;
            }

            return false;
		}