示例#1
0
        /// <summary>
        /// Renders a label to the map.
        /// </summary>
        /// <param name="g">Graphics reference</param>
        /// <param name="LabelPoint">Label placement</param>
        /// <param name="Offset">Offset of label in screen coordinates</param>
        /// <param name="font">Font used for rendering</param>
        /// <param name="forecolor">Font forecolor</param>
        /// <param name="backcolor">Background color</param>
        /// <param name="halo">Color of halo</param>
        /// <param name="rotation">Text rotation in degrees</param>
        /// <param name="text">Text to render</param>
        /// <param name="map">Map reference</param>
        public static void DrawLabel(System.Drawing.Graphics g, System.Drawing.PointF LabelPoint, System.Drawing.PointF Offset, System.Drawing.Font font, System.Drawing.Color forecolor, System.Drawing.Brush backcolor, System.Drawing.Pen halo, float rotation, string text, SharpMap.Map map)
        {
            System.Drawing.SizeF fontSize = g.MeasureString(text, font); //Calculate the size of the text
            LabelPoint.X += Offset.X; LabelPoint.Y += Offset.Y; //add label offset
            if (rotation != 0 && rotation != float.NaN)
            {
                g.TranslateTransform(LabelPoint.X, LabelPoint.Y);
                g.RotateTransform(rotation);
                g.TranslateTransform(-fontSize.Width / 2, -fontSize.Height / 2);
                if (backcolor != null && backcolor != System.Drawing.Brushes.Transparent)
                    g.FillRectangle(backcolor, 0, 0, fontSize.Width * 0.74f + 1f, fontSize.Height * 0.74f);
                System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
                path.AddString(text, font.FontFamily, (int)font.Style, font.Size, new System.Drawing.Point(0, 0), null);
                if (halo != null)
                    g.DrawPath(halo, path);
                g.FillPath(new System.Drawing.SolidBrush(forecolor), path);
                //g.DrawString(text, font, new System.Drawing.SolidBrush(forecolor), 0, 0);
                g.Transform = map.MapTransform;
            }
            else
            {
                if (backcolor != null && backcolor != System.Drawing.Brushes.Transparent)
                    g.FillRectangle(backcolor, LabelPoint.X, LabelPoint.Y, fontSize.Width * 0.74f + 1, fontSize.Height * 0.74f);

                System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();

                path.AddString(text, font.FontFamily, (int)font.Style, font.Size, LabelPoint, null);
                if (halo != null)
                    g.DrawPath(halo, path);
                g.FillPath(new System.Drawing.SolidBrush(forecolor), path);
                //g.DrawString(text, font, new System.Drawing.SolidBrush(forecolor), LabelPoint.X, LabelPoint.Y);
            }
        }
示例#2
0
 public void draw(System.Drawing.Graphics g)
 {
     g.TranslateTransform(this.x, this.y);
     g.RotateTransform(rotation);
     g.DrawImage(canon, (0 - canon.Width / 2), (0 - canon.Height / 2), canon.Width, canon.Height);
     g.ResetTransform();
 }
示例#3
0
        protected virtual void AdjustOrigin(System.Drawing.Graphics g, Point newOrigin, ref Rectangle r) {
            
            Debug.WriteLineIf(GridViewDebugPaint.TraceVerbose,  "Adjusting paint origin to (" + newOrigin.X.ToString(CultureInfo.InvariantCulture) + "," + newOrigin.Y.ToString(CultureInfo.InvariantCulture) + ")");

            g.ResetTransform();
            g.TranslateTransform(newOrigin.X, newOrigin.Y);
            r.Offset(-newOrigin.X, -newOrigin.Y);
        }
    public RectangleF PaintSymbol(System.Drawing.Graphics g, System.Drawing.RectangleF bounds)
    {
      if (Shape != XYPlotScatterStyles.Shape.NoSymbol)
      {
        GraphicsState gs = g.Save();
        g.TranslateTransform(bounds.X + 0.5f * bounds.Width, bounds.Y + 0.5f * bounds.Height);
        Paint(g);
        g.Restore(gs);

        if (this.SymbolSize > bounds.Height)
          bounds.Inflate(0, this.SymbolSize - bounds.Height);
      }

      return bounds;
    }
示例#5
0
		public RectangleF PaintSymbol(System.Drawing.Graphics g, System.Drawing.RectangleF bounds)
		{
			if (_scatterSymbol is NoSymbol)
				return bounds;

			var cachedPathData = new CachedPathData();
			var cachedBrushData = new CachedBrushData();
			var scatterSymbol = CalculateOverriddenScatterSymbol();
			CalculatePaths(scatterSymbol, _symbolSize, ref cachedPathData);
			CalculateBrushes(scatterSymbol, _color, cachedPathData, ref cachedBrushData);

			GraphicsState gs = g.Save();
			g.TranslateTransform(bounds.X + 0.5f * bounds.Width, bounds.Y + 0.5f * bounds.Height);

			if (null != cachedPathData.InsetPath)
				g.FillPath(cachedBrushData.InsetBrush, cachedPathData.InsetPath);

			if (null != cachedPathData.FillPath)
				g.FillPath(cachedBrushData.FillBrush, cachedPathData.FillPath);

			if (null != cachedPathData.FramePath)
				g.FillPath(cachedBrushData.FrameBrush, cachedPathData.FramePath);

			cachedBrushData.Clear();
			cachedPathData.Clear();

			g.Restore(gs);

			if (this.SymbolSize > bounds.Height)
				bounds.Inflate(0, (float)(this.SymbolSize - bounds.Height));

			return bounds;
		}
示例#6
0
        public void Draw(System.Drawing.Graphics g, float scale, float x, float y,
            DrawMode mode, Image image)
        {
            if (!Visible)
                return;

            GraphicsState old_state = g.Save();

            g.ScaleTransform(scale, scale);
            g.TranslateTransform(x, y);

            Rectangle frect = rect;// GetRect(x, y, scale);

            g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            int pen_width = mode == DrawMode.Hovered ? 2 : 1;

            if (mode == DrawMode.Selected)
            {
                g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
                g.FillRectangle(new SolidBrush(Color.FromArgb(60, Color.Red)), frect);

                g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
                g.DrawRectangle(new Pen(Color.Red, pen_width), frect);
            }
            else
            {
                Color color = Color.RoyalBlue;
                g.DrawRectangle(new Pen(color, pen_width), frect);
            }

            g.Restore(old_state);

            //GraphicsState old_state = g.Save();
        }
        /// <summary>
        /// Draw an arc on the canvas
        /// </summary>
        /// <param name="canvas">The canvas on which the arc is drawn</param>
        public void Draw(System.Drawing.Graphics canvas)
        {
            System.Drawing.Drawing2D.Matrix	matrix;
            double	startAngle, endAngle;

            matrix = canvas.Transform;

            canvas.TranslateTransform((m_points[0].x + m_points[1].x) / 2, (m_points[0].y + m_points[1].y) / 2);
            canvas.RotateTransform((float)(m_rotateAngle / System.Math.PI * 180));

            if (m_points[2].Equals(m_points[3]))
            {
                canvas.DrawEllipse(m_style.drawingStyle, -(m_points[1].x - m_points[0].x) / 2, -(m_points[1].y - m_points[0].y) / 2, m_points[1].x - m_points[0].x, m_points[1].y - m_points[0].y);
            }
            else
            {
                startAngle = System.Math.Atan2(m_points[2].y - (m_points[1].y + m_points[0].y) / 2, m_points[2].x - (m_points[1].x + m_points[0].x) / 2);
                if (startAngle < 0)
                {
                    startAngle += System.Math.PI * 2;
                }
                startAngle = (startAngle / Math.PI) * 180;

                endAngle = System.Math.Atan2(m_points[3].y - (m_points[1].y + m_points[0].y) / 2, m_points[3].x - (m_points[1].x + m_points[0].x) / 2);
                if (endAngle < 0)
                {
                    endAngle += System.Math.PI * 2;
                }
                endAngle = (endAngle / Math.PI) * 180;

                endAngle -= startAngle;
                if (endAngle < 0)
                {
                    endAngle += 360;
                }

                canvas.DrawArc(m_style.drawingStyle, -(m_points[1].x - m_points[0].x) / 2, -(m_points[1].y - m_points[0].y) / 2, m_points[1].x - m_points[0].x, m_points[1].y - m_points[0].y, (float)startAngle, (float)endAngle);
            }

            canvas.Transform = matrix;
        }
        /// <summary>
        /// Draws link's terminal ponit.
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="style"></param>
        /// <param name="pt1"></param>
        /// <param name="pt2"></param>
        private void DrawTerminal(System.Drawing.Graphics canvas, GOM_Terminal_Style style, System.Drawing.PointF pt1, System.Drawing.PointF pt2)
        {
            System.Drawing.Drawing2D.Matrix	matrix;
            float angle;

            angle	= (float)(System.Math.Atan2(pt2.Y - pt1.Y, pt2.X - pt1.X) / System.Math.PI) * 180;
            matrix	= canvas.Transform;

            canvas.TranslateTransform(pt1.X, pt1.Y);
            canvas.RotateTransform(angle);
            switch (style)
            {
                case GOM_Terminal_Style.Circle:
                {
                    canvas.FillEllipse(new System.Drawing.SolidBrush(m_drawingStyle.drawingStyle.Color), -5, -5, 10, 10);
                    break;
                }
                case GOM_Terminal_Style.Arrow:
                {
                    canvas.DrawLine(m_drawingStyle.drawingStyle, 0, 0, 10, 5);
                    canvas.DrawLine(m_drawingStyle.drawingStyle, 0, 0, 10, -5);
                    break;
                }
                case GOM_Terminal_Style.Triangle:
                {
                    System.Drawing.Point[] rgPts;

                    rgPts = new System.Drawing.Point[3];
                    rgPts[0].X = 0;
                    rgPts[0].Y = 0;
                    rgPts[1].X = 10;
                    rgPts[1].Y = 5;
                    rgPts[2].X = 10;
                    rgPts[2].Y = -5;

                    canvas.FillPolygon(new System.Drawing.SolidBrush(m_drawingStyle.drawingStyle.Color), rgPts);
                    break;
                }
                case GOM_Terminal_Style.Diamond:
                {
                    System.Drawing.Point[] rgPts;

                    rgPts = new System.Drawing.Point[4];
                    rgPts[0].X = 0;
                    rgPts[0].Y = 0;
                    rgPts[1].X = 5;
                    rgPts[1].Y = 5;
                    rgPts[2].X = 10;
                    rgPts[2].Y = 0;
                    rgPts[3].X = 5;
                    rgPts[3].Y = -5;

                    canvas.FillPolygon(new System.Drawing.SolidBrush(m_drawingStyle.drawingStyle.Color), rgPts);
                    break;
                }
            }
            canvas.Transform = matrix;
        }
        public void DrawSelected(System.Drawing.Graphics canvas, System.Drawing.Pen BoundingBoxPen, System.Drawing.Pen ResizeBoxPen, System.Drawing.Pen ConnectBoxPen, System.Drawing.Pen ControlBoxPen)
        {
            System.Drawing.Drawing2D.Matrix	orgTrans = canvas.Transform;
            System.Drawing.RectangleF		rc;

            rc = this.BoundingBox;

            canvas.TranslateTransform(this.xOffset, this.yOffset);
            canvas.TranslateTransform((rc.Left + rc.Right) / 2, (rc.Top + rc.Bottom) / 2);
            canvas.RotateTransform(this.rotation);
            canvas.TranslateTransform(-(rc.Left + rc.Right) / 2, -(rc.Top + rc.Bottom) / 2);

            for (int i = 0; i < rgObjects.Count; i++)
            {
                rgObjects[i].Draw(canvas, false);
            }

            canvas.DrawRectangle(BoundingBoxPen, rc.X - 3, rc.Y - 3, rc.Width + 6, rc.Height + 6);

            canvas.DrawRectangle(ResizeBoxPen, rc.X - 5, rc.Y - 5, 4, 4);
            canvas.DrawRectangle(ResizeBoxPen, rc.X - 5, rc.Bottom + 1, 4, 4);
            canvas.DrawRectangle(ResizeBoxPen, rc.Right + 1, rc.Y - 5, 4, 4);
            canvas.DrawRectangle(ResizeBoxPen, rc.Right + 1, rc.Bottom + 1, 4, 4);

            canvas.DrawEllipse(ControlBoxPen, (rc.Left + rc.Right) / 2 - 3, rc.Y - 30, 6, 6);
            canvas.DrawLine(ControlBoxPen, (rc.Left + rc.Right) / 2, rc.Y - 5, (rc.Left + rc.Right) / 2, rc.Y - 24);

            canvas.DrawRectangle(ConnectBoxPen, rc.X - 5, (rc.Top + rc.Bottom) / 2 - 2, 4, 4);
            canvas.DrawRectangle(ConnectBoxPen, (rc.Left + rc.Right) / 2 - 2, rc.Bottom + 1, 4, 4);
            canvas.DrawRectangle(ConnectBoxPen, (rc.Left + rc.Right) / 2 - 2, rc.Y - 5, 4, 4);
            canvas.DrawRectangle(ConnectBoxPen, rc.Right + 1, (rc.Top + rc.Bottom) / 2 - 2, 4, 4);

            canvas.Transform = orgTrans;
        }
示例#10
0
        internal static void RenderVerticalText(
            System.Drawing.Graphics g,
            string text,
            Rectangle textRect,
            Font textFont,
            Color foreColor,
            StringFormat format,
            bool left)
        {
            if (string.IsNullOrEmpty(text))
            {
                return;
            }

            if (left)
            {
                g.TranslateTransform(textRect.X, textRect.Bottom);
                g.RotateTransform(270F);
            }
            else
            {
                g.TranslateTransform(textRect.Right, textRect.Y);
                g.RotateTransform(90F);
            }

            Rectangle transformRect = new Rectangle(
                0, 0, textRect.Height, textRect.Width);

            try
            {
                using (Brush brush = new SolidBrush(foreColor))
                {
                    g.DrawString(
                        text,
                        textFont,
                        brush,
                        transformRect,
                        format);
                }
            }
            finally
            {
                g.ResetTransform();
            }
        }
        public void Draw(System.Drawing.Graphics canvas, bool ShowConnectPoint)
        {
            System.Drawing.Drawing2D.Matrix	orgTrans	= canvas.Transform;
            System.Drawing.RectangleF		rc			= this.BoundingBox;

            canvas.TranslateTransform(this.xOffset, this.yOffset);
            canvas.TranslateTransform((rc.Left + rc.Right) / 2, (rc.Top + rc.Bottom) / 2);
            canvas.RotateTransform(this.rotation);
            canvas.TranslateTransform(-(rc.Left + rc.Right) / 2, -(rc.Top + rc.Bottom) / 2);

            for (int i = 0; i < rgObjects.Count; i++)
            {
                rgObjects[i].Draw(canvas, false);
            }

            if (ShowConnectPoint)
            {
                System.Drawing.Pen ConnectBoxPen;

                ConnectBoxPen = new System.Drawing.Pen(System.Drawing.Color.Gray, 1);
                ConnectBoxPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;

                canvas.DrawRectangle(ConnectBoxPen, rc.X - 5, (rc.Top + rc.Bottom) / 2 - 2, 4, 4);
                canvas.DrawRectangle(ConnectBoxPen, (rc.Left + rc.Right) / 2 - 2, rc.Bottom + 1, 4, 4);
                canvas.DrawRectangle(ConnectBoxPen, (rc.Left + rc.Right) / 2 - 2, rc.Y - 5, 4, 4);
                canvas.DrawRectangle(ConnectBoxPen, rc.Right + 1, (rc.Top + rc.Bottom) / 2 - 2, 4, 4);
            }

            canvas.Transform = orgTrans;
        }
        public void DrawSelected(System.Drawing.Graphics canvas, System.Drawing.Pen BoundingBoxPen, System.Drawing.Pen ResizeBoxPen, System.Drawing.Pen ConnectBoxPen, System.Drawing.Pen ControlBoxPen)
        {
            System.Drawing.Drawing2D.Matrix	orgTrans	= canvas.Transform;
            System.Drawing.RectangleF		rc			= this.BoundingBox;

            canvas.TranslateTransform(this.xOffset, this.yOffset);
            canvas.TranslateTransform((rc.Left + rc.Right) / 2, (rc.Top + rc.Bottom) / 2);
            canvas.RotateTransform(this.rotation);
            canvas.TranslateTransform(-(rc.Left + rc.Right) / 2, -(rc.Top + rc.Bottom) / 2);

            System.Drawing.Brush brush = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
            canvas.FillEllipse(brush, m_point.x - 3, m_point.y - 3, 6, 6);

            canvas.Transform = orgTrans;
        }
        public void Draw(System.Drawing.Graphics canvas, bool ShowConnectPoint)
        {
            System.Drawing.Drawing2D.Matrix	orgTrans	= canvas.Transform;
            System.Drawing.RectangleF		rc			= this.BoundingBox;

            canvas.TranslateTransform(this.xOffset, this.yOffset);
            canvas.TranslateTransform((rc.Left + rc.Right) / 2, (rc.Top + rc.Bottom) / 2);
            canvas.RotateTransform(this.rotation);
            canvas.TranslateTransform(-(rc.Left + rc.Right) / 2, -(rc.Top + rc.Bottom) / 2);

            System.Drawing.Brush brush = new System.Drawing.SolidBrush(System.Drawing.Color.Gray);
            canvas.FillEllipse(brush, m_point.x - 3, m_point.y - 3, 6, 6);

            canvas.Transform = orgTrans;
        }
示例#14
0
		public RectangleF PaintSymbol(System.Drawing.Graphics g, System.Drawing.RectangleF bounds)
		{
			if (!LineConnectionStyles.NoConnection.Instance.Equals(_connectionStyle))
			{
				GraphicsState gs = g.Save();
				g.TranslateTransform(bounds.X + 0.5f * bounds.Width, bounds.Y + 0.5f * bounds.Height);
				float halfwidth = bounds.Width / 2;
				float symsize = (float)(_symbolSize);

				if (this.UseSymbolGap == true)
				{
					// plot a line with the length of symbolsize from
					PaintLine(g, new PointF(-halfwidth, 0), new PointF(-symsize, 0));
					PaintLine(g, new PointF(symsize, 0), new PointF(halfwidth, 0));
				}
				else // no gap
				{
					PaintLine(g, new PointF(-halfwidth, 0), new PointF(halfwidth, 0));
				}
				g.Restore(gs);
			}

			return bounds;
		}
    public void Draw(System.Drawing.Graphics g, System.Drawing.RectangleF innerArea)
    {
      if (null == _cachedShadowBrush)
        SetCachedBrushes();

      innerArea.Inflate(_shadowLength / 2,_shadowLength/2);
   
      // please note: m_Bounds is already extended to the shadow

      // first the shadow
      _cachedShadowBrush.Rectangle = innerArea;
      g.TranslateTransform(_shadowLength, _shadowLength);
      g.FillRectangle(_cachedShadowBrush, innerArea);
      g.TranslateTransform(-_shadowLength, -_shadowLength);

      _brush.Rectangle = innerArea;
      g.FillRectangle(_brush, innerArea);
      g.DrawRectangle(Pens.Black, innerArea.Left, innerArea.Top, innerArea.Width , innerArea.Height );
    }
示例#16
0
        /// <summary>
        /// Renders a point to the map.
        /// </summary>
        /// <param name="g">Graphics reference</param>
        /// <param name="point">Point to render</param>
        /// <param name="symbol">Symbol to place over point</param>
        /// <param name="symbolscale">The amount that the symbol should be scaled. A scale of '1' equals to no scaling</param>
        /// <param name="offset">Symbol offset af scale=1</param>
        /// <param name="rotation">Symbol rotation in degrees</param>
        /// <param name="map">Map reference</param>
        public static void DrawPoint(System.Drawing.Graphics g, SharpMap.Geometries.Point point, System.Drawing.Bitmap symbol, float symbolscale, System.Drawing.PointF offset, float rotation, SharpMap.Map map)
        {
            if (point == null)
                return;
            if (symbol == null) //We have no point style - Use a default symbol
                symbol = defaultsymbol;
            System.Drawing.PointF pp = SharpMap.Utilities.Transform.WorldtoMap(point, map);

            if (rotation != 0 && rotation != float.NaN)
            {
                g.TranslateTransform(pp.X, pp.Y);
                g.RotateTransform(rotation);
                g.TranslateTransform(-symbol.Width / 2, -symbol.Height / 2);
                if (symbolscale == 1f)
                    g.DrawImageUnscaled(symbol, (int)(pp.X - symbol.Width / 2 + offset.X), (int)(pp.Y - symbol.Height / 2 + offset.Y));
                else
                {
                    float width = symbol.Width * symbolscale;
                    float height = symbol.Height * symbolscale;
                    g.DrawImage(symbol, (int)pp.X - width / 2 + offset.X * symbolscale, (int)pp.Y - height / 2 + offset.Y * symbolscale, width, height);
                }
                g.Transform = map.MapTransform;
            }
            else
            {
                if (symbolscale == 1f)
                    g.DrawImageUnscaled(symbol, (int)(pp.X - symbol.Width / 2 + offset.X), (int)(pp.Y - symbol.Height / 2 + offset.Y));
                else
                {
                    float width = symbol.Width * symbolscale;
                    float height = symbol.Height * symbolscale;
                    g.DrawImage(symbol, (int)pp.X - width / 2 + offset.X * symbolscale, (int)pp.Y - height / 2 + offset.Y * symbolscale, width, height);
                }
            }
        }
示例#17
0
		public void Draw(System.Drawing.Graphics g, BrushX brush, RectangleD2D innerArea)
		{
			BrushX shadowBrush = null;
			if (object.ReferenceEquals(brush, _brush))
			{
				if (null == _cachedShadowBrush)
				{
					_cachedShadowBrush = GetShadowBrush(brush);
					_cachedShadowBrush.ParentObject = this;
				}
				shadowBrush = _cachedShadowBrush;
			}
			else
			{
				shadowBrush = GetShadowBrush(brush);
			}

			innerArea.Inflate(_shadowLength / 2, _shadowLength / 2);

			// please note: m_Bounds is already extended to the shadow

			// first the shadow
			shadowBrush.SetEnvironment(innerArea, BrushX.GetEffectiveMaximumResolution(g, 1));

			// shortCuts to floats
			RectangleF iArea = (RectangleF)innerArea; float shadowLength = (float)_shadowLength;
			g.TranslateTransform(shadowLength, shadowLength);
			g.FillRectangle(shadowBrush, iArea);
			g.TranslateTransform(-shadowLength, -shadowLength);

			brush.SetEnvironment(innerArea, BrushX.GetEffectiveMaximumResolution(g, 1));
			g.FillRectangle(brush, iArea);
			g.DrawRectangle(Pens.Black, iArea.Left, iArea.Top, iArea.Width, iArea.Height);
		}