Beispiel #1
0
        /// <summary>
        /// Draw polygon on layer with layerIndex Index.
        /// </summary>
        /// <param name="layerIndex"></param>
        /// <param name="points"></param>
        /// <param name="borderColor"></param>
        /// <param name="fillColor"></param>
        /// <param name="opacity"></param>
        /// <param name="fillPattern"></param>
        /// <param name="patternSize"></param>
        public void Draw(int layerIndex, System.Drawing.PointF[] points, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize)
        {
            //var tmpGeo = new PathGeometry(device.factory);
            //GeometrySink sink1 = tmpGeo.Open();
            //Vector2[] tmpPointList = DrawingBase.Convertor.ToVector2(points);
            //sink1.BeginFigure(tmpPointList[0],new FigureBegin());
            //sink1.AddLines(tmpPointList);
            //sink1.EndFigure(new FigureEnd());
            //sink1.Close();

            if (fillColor != null)
            {
                if (fillColor != prevFillColor || fillPattern != prevFillPattern || opacity != prevOpacity)
                {
                    fillBrush       = xPFT.GraphicEngineGDI.BrushMaker.GetPatternBrush(fillColor.Value, opacity, fillPattern, (int)patternSize);
                    prevFillColor   = (System.Drawing.Color)fillColor;
                    prevFillPattern = fillPattern;
                    prevOpacity     = opacity;
                }
                device.renderTarget.FillPolygon(fillBrush, points);
            }
            if (borderColor != null)
            {
                device.renderTarget.DrawPolygon(new Pen(borderColor.Value, lineWidth), points);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Draw polygon on layer with layerIndex Index.
        /// </summary>
        /// <param name="layerIndex"></param>
        /// <param name="points"></param>
        /// <param name="borderColor"></param>
        /// <param name="fillColor"></param>
        /// <param name="opacity"></param>
        /// <param name="fillPattern"></param>
        /// <param name="patternSize"></param>
        public void Draw(int layerIndex, System.Drawing.PointF[] points, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize)
        {
            if (layerIndex < device.layers.Count)
            {
                var          tmpGeo       = new PathGeometry(device.factory);
                GeometrySink sink1        = tmpGeo.Open();
                Vector2[]    tmpPointList = DrawingBase.Convertor.ToVector2(points);
                sink1.BeginFigure(tmpPointList[0], new FigureBegin());
                sink1.AddLines(tmpPointList);
                sink1.EndFigure(new FigureEnd());
                sink1.Close();

                if (fillColor != null)
                {
                    if (device.renderTarget != prevRenderTarget || fillColor != prevFillColor || fillPattern != prevFillPattern || opacity != prevOpacity)
                    {
                        fillBrush        = BrushMaker.GetPatternBrush(device.renderTarget, (System.Drawing.Color)fillColor, opacity, fillPattern, patternSize);
                        prevFillColor    = (System.Drawing.Color)fillColor;
                        prevFillPattern  = fillPattern;
                        prevOpacity      = opacity;
                        prevRenderTarget = device.renderTarget;
                    }
                    device.layers[layerIndex].FillGeometry(tmpGeo, fillBrush);
                }
                if (borderColor != null)
                {
                    device.layers[layerIndex].DrawGeometry(tmpGeo, new SharpDX.Direct2D1.SolidColorBrush(device.renderTarget, xPFT.DrawingBase.Convertor.ColorConvertor((System.Drawing.Color)borderColor, opacity)), lineWidth);
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Draw an ellipse in a rectangle.
 /// </summary>
 /// <param name="rectangle"></param>
 /// <param name="color"></param>
 public void Draw(int layerIndex, System.Drawing.RectangleF rectangle, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize)
 {
     //var tmpEllipse = new SharpDX.Direct2D1.Ellipse(new Vector2(rectangle.X + rectangle.Width / 2, rectangle.Y + rectangle.Height / 2), rectangle.Width / 2, rectangle.Height / 2);
     if (fillColor != null)
     {
         if (fillColor != prevFillColor || fillPattern != prevFillPattern || opacity != prevOpacity)
         {
             fillBrush        = xPFT.GraphicEngineGDI.BrushMaker.GetPatternBrush(fillColor.Value, opacity, fillPattern, (int)patternSize);
             prevFillColor    = (System.Drawing.Color)fillColor;
             prevFillPattern  = fillPattern;
             prevOpacity      = opacity;
             prevRenderTarget = device.renderTarget;
         }
         device.renderTarget.FillRectangle(fillBrush, rectangle);
     }
     if (borderColor != null)
     {
         device.renderTarget.DrawRectangle(new Pen(borderColor.Value, lineWidth), rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
     }
 }
Beispiel #4
0
        /// <summary>
        /// Draw an ellipse in a rectangle.
        /// </summary>
        /// <param name="rectangle"></param>
        /// <param name="color"></param>
        public void Draw(int layerIndex, System.Drawing.RectangleF rectangle, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize)
        {
            var tmpEllipse = new SharpDX.Direct2D1.Ellipse(new Vector2(rectangle.X + rectangle.Width / 2, rectangle.Y + rectangle.Height / 2), rectangle.Width / 2, rectangle.Height / 2);

            if (fillColor != null)
            {
                if (device.renderTarget != prevRenderTarget || fillColor != prevFillColor || fillPattern != prevFillPattern || opacity != prevOpacity)
                {
                    fillBrush        = BrushMaker.GetPatternBrush(device.renderTarget, (System.Drawing.Color)fillColor, opacity, fillPattern, patternSize);
                    prevFillColor    = (System.Drawing.Color)fillColor;
                    prevFillPattern  = fillPattern;
                    prevOpacity      = opacity;
                    prevRenderTarget = device.renderTarget;
                }

                device.layers[layerIndex].FillEllipse(tmpEllipse, fillBrush);
            }
            if (borderColor != null)
            {
                device.layers[layerIndex].DrawEllipse(tmpEllipse, new SharpDX.Direct2D1.SolidColorBrush(device.renderTarget, xPFT.DrawingBase.Convertor.ColorConvertor((System.Drawing.Color)borderColor, opacity)), lineWidth);
            }
        }
Beispiel #5
0
 /// <summary>
 /// Draw ellipse on the layer with layerIndex
 /// </summary>
 /// <param name="layerIndex"></param>
 /// <param name="rectangle"></param>
 /// <param name="borderColor"></param>
 /// <param name="fillColor"></param>
 /// <param name="opacity"></param>
 /// <param name="fillPattern"></param>
 /// <param name="patternSize"></param>
 public void Draw(int layerIndex, System.Drawing.RectangleF rectangle, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize)
 {
     if (fillColor != null || borderColor != null)
     {
         if (line != null)
         {
             line.Width = lineWidth;
             List <SharpDX.Vector2> tmpPointArray = GetPointOfEllipse(rectangle.Width / 2, rectangle.Height / 2);
             line.Begin();
             device.device.SetTransform(0, SharpDX.Matrix.Translation(rectangle.X, rectangle.Y, 0));
             if (fillColor != null)
             {
                 line.Draw(ShapesFiller.GetFillEllipseArray(0, 0, rectangle.Width, rectangle.Height).ToArray(), Convertor.ColorConvertor((System.Drawing.Color)fillColor, opacity));
             }
             if (borderColor != null)
             {
                 line.Draw(tmpPointArray.ToArray(), Convertor.ColorConvertor((System.Drawing.Color)borderColor, opacity));
             }
             line.End();
         }
     }
 }
Beispiel #6
0
        public static Brush GetPatternBrush(System.Drawing.Color fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, int patternSize = 10)
        {
            //BitmapRenderTarget brt = new BitmapRenderTarget(renderTarget, CompatibleRenderTargetOptions.None, new SharpDX.Size2F(patternSize, patternSize));
            Bitmap     bitmap     = new Bitmap(patternSize, patternSize);
            Graphics   g          = Graphics.FromImage(bitmap);
            Pen        pen        = new Pen(BrushMaker.SetOpacity(fillColor, opacity), 1);
            SolidBrush solidBrush = new SolidBrush(BrushMaker.SetOpacity(fillColor, opacity));

            if (fillPattern == xPFT.Charting.Base.FillPattern.Solid)
            {
                return(solidBrush);
            }
            switch (fillPattern)
            {
            case xPFT.Charting.Base.FillPattern.Hachure_Double:
                g.DrawLine(pen, new Point(0, 0), new Point(patternSize, patternSize));
                g.DrawLine(pen, new Point(patternSize, 0), new Point(0, patternSize));
                break;

            case xPFT.Charting.Base.FillPattern.Hachure:
                g.DrawLine(pen, new Point(patternSize, 0), new Point(0, patternSize));
                break;

            case xPFT.Charting.Base.FillPattern.Hashure_Back:
                g.DrawLine(pen, new Point(0, 0), new Point(patternSize, patternSize));
                break;

            case xPFT.Charting.Base.FillPattern.Dash:
                g.DrawLine(pen, new Point(0, patternSize / 4), new Point(patternSize / 4, patternSize / 4));
                g.DrawLine(pen, new Point(patternSize * 3 / 4, patternSize / 4), new Point(patternSize, patternSize / 4));
                g.DrawLine(pen, new Point(patternSize / 4, patternSize * 3 / 4), new Point(patternSize * 3 / 4, patternSize * 3 / 4));
                break;

            case xPFT.Charting.Base.FillPattern.Squre:
                g.DrawLine(pen, new Point(0, patternSize / 2), new Point(patternSize, patternSize / 2));
                g.DrawLine(pen, new Point(patternSize / 2, 0), new Point(patternSize / 2, patternSize));
                break;

            case xPFT.Charting.Base.FillPattern.Dot:
                g.FillEllipse(solidBrush, patternSize / 4, patternSize / 4, 1, 1);
                g.FillEllipse(solidBrush, patternSize / 4, patternSize * 3 / 4, 1, 1);
                g.FillEllipse(solidBrush, patternSize * 3 / 4, patternSize / 4, 1, 1);
                g.FillEllipse(solidBrush, patternSize * 3 / 4, patternSize * 3 / 4, 1, 1);
                break;

            case xPFT.Charting.Base.FillPattern.Zig_Zag_Horizontal:
                g.DrawLine(pen, new Point(0, patternSize / 2), new Point(patternSize / 2, 0));
                g.DrawLine(pen, new Point(patternSize, patternSize / 2), new Point(patternSize / 2, 0));
                g.DrawLine(pen, new Point(0, patternSize), new Point(patternSize / 2, patternSize / 2));
                g.DrawLine(pen, new Point(patternSize, patternSize), new Point(patternSize / 2, patternSize / 2));
                break;

            case xPFT.Charting.Base.FillPattern.Zig_Zag_Vertical:
                g.DrawLine(pen, new Point(patternSize / 2, 0), new Point(0, patternSize / 2));
                g.DrawLine(pen, new Point(patternSize / 2, patternSize), new Point(0, patternSize / 2));
                g.DrawLine(pen, new Point(patternSize, 0), new Point(patternSize / 2, patternSize / 2));
                g.DrawLine(pen, new Point(patternSize, patternSize), new Point(patternSize / 2, patternSize / 2));
                break;
            }

            TextureBrush br = new TextureBrush(bitmap);

            g.Dispose();
            pen.Dispose();
            bitmap.Dispose();
            solidBrush.Dispose();
            return(br);
        }
Beispiel #7
0
        /// <summary>
        /// Draw polygon on the layer with layer index.
        /// </summary>
        /// <param name="layerIndex"></param>
        /// <param name="points"></param>
        /// <param name="borderColor"></param>
        /// <param name="fillColor"></param>
        /// <param name="opacity"></param>
        /// <param name="fillPattern"></param>
        /// <param name="patternSize"></param>
        public void Draw(int layerIndex, System.Drawing.PointF[] points, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize)
        {
            if (borderColor != null)
            {
                try
                {
                    if (line != null)
                    {
                        line.Begin();
                        line.Draw(DrawingBase.Convertor.ToVector2(points), Convertor.ColorConvertor((System.Drawing.Color)borderColor, opacity));
                        line.End();
                    }
                }
                catch (System.Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }

            if (fillColor != null)
            {
                if (tex != null)
                {
                    var vertexElems = new[] {
                        new SharpDX.Direct3D9.VertexElement(0, 0, SharpDX.Direct3D9.DeclarationType.Float2, SharpDX.Direct3D9.DeclarationMethod.Default, SharpDX.Direct3D9.DeclarationUsage.PositionTransformed, 0),
                        new SharpDX.Direct3D9.VertexElement(0, 8, SharpDX.Direct3D9.DeclarationType.Color, SharpDX.Direct3D9.DeclarationMethod.Default, SharpDX.Direct3D9.DeclarationUsage.Color, 0),
                        SharpDX.Direct3D9.VertexElement.VertexDeclarationEnd
                    };
                    var vertexDecl = new SharpDX.Direct3D9.VertexDeclaration(device.device, vertexElems);
                    SharpDX.Direct3D9.VertexDeclaration tempVD = device.device.VertexDeclaration;
                    device.device.VertexDeclaration = vertexDecl;
                    Vertex[] verList = Shape.GetVertexArray(DrawingBase.Convertor.ToVector2(points), Convertor.ColorConvertor((System.Drawing.Color)fillColor, opacity));
                    device.device.DrawUserPrimitives <Vertex>(SharpDX.Direct3D9.PrimitiveType.TriangleStrip, verList.Length, verList);
                    device.device.VertexDeclaration = tempVD;
                    vertexDecl.Dispose();
                }
            }
        }
Beispiel #8
0
 public static void Draw(Graphics g, Point pos, System.Drawing.Rectangle rectangle, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize, float lineWidth)
 {
     g.TranslateTransform(pos.X, pos.Y);
     if (fillColor != null)
     {
         g.FillRectangle(BrushMaker.GetPatternBrush((System.Drawing.Color)fillColor, opacity, fillPattern, (int)patternSize), rectangle);
     }
     if (borderColor != null)
     {
         g.DrawRectangle(new Pen(BrushMaker.SetOpacity((Color)borderColor, opacity), lineWidth), rectangle);
     }
     g.ResetTransform();
 }
Beispiel #9
0
 /// <summary>
 /// Draw rectangle on the layer with layer index.
 /// </summary>
 /// <param name="layerIndex"></param>
 /// <param name="rectangle"></param>
 /// <param name="borderColor"></param>
 /// <param name="fillColor"></param>
 /// <param name="opacity"></param>
 /// <param name="fillPattern"></param>
 /// <param name="patternSize"></param>
 public void Draw(int layerIndex, System.Drawing.RectangleF rectangle, System.Drawing.Color?borderColor, System.Drawing.Color?fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize)
 {
     if (prevWidth != rectangle.Height)
     {
         prevWidth    = rectangle.Height;
         filler.Width = prevWidth;
     }
     if (fillColor != null)
     {
         SharpDX.Vector2[] points = { new SharpDX.Vector2(rectangle.X,                   rectangle.Y + rectangle.Height / 2),
                                      new SharpDX.Vector2(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height / 2) };
         if (filler != null)
         {
             filler.Begin();
             filler.Draw(points, Convertor.ColorConvertor((System.Drawing.Color)fillColor, opacity));
             filler.End();
         }
     }
     if (borderColor != null)
     {
         SharpDX.Vector2[] points = { new SharpDX.Vector2(rectangle.X,                   rectangle.Y),
                                      new SharpDX.Vector2(rectangle.X + rectangle.Width, rectangle.Y),
                                      new SharpDX.Vector2(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height),
                                      new SharpDX.Vector2(rectangle.X,                   rectangle.Y + rectangle.Height),
                                      new SharpDX.Vector2(rectangle.X,                   rectangle.Y), };
         if (line != null)
         {
             line.Begin();
             line.Draw(points, Convertor.ColorConvertor((System.Drawing.Color)borderColor, opacity));
             line.End();
         }
     }
 }
Beispiel #10
0
        public static Brush GetPatternBrush(RenderTarget renderTarget, System.Drawing.Color fillColor, float opacity, xPFT.Charting.Base.FillPattern fillPattern, float patternSize = 10)
        {
            if (renderTarget != null)
            {
                BitmapRenderTarget brt = new BitmapRenderTarget(renderTarget, CompatibleRenderTargetOptions.None, new SharpDX.Size2F(patternSize, patternSize));
                Brush tempBrush        = new SolidColorBrush(brt, xPFT.DrawingBase.Convertor.ColorConvertor(fillColor, opacity));
                if (fillPattern == xPFT.Charting.Base.FillPattern.Solid)
                {
                    return(tempBrush);
                }
                brt.BeginDraw();
                brt.Clear(Color.Transparent);
                switch (fillPattern)
                {
                case xPFT.Charting.Base.FillPattern.Hachure_Double:
                    brt.DrawLine(new SharpDX.Vector2(0, 0), new SharpDX.Vector2(patternSize, patternSize), tempBrush, 1);
                    brt.DrawLine(new SharpDX.Vector2(patternSize, 0), new SharpDX.Vector2(0, patternSize), tempBrush, 1);
                    break;

                case xPFT.Charting.Base.FillPattern.Hachure:
                    brt.DrawLine(new SharpDX.Vector2(patternSize, 0), new SharpDX.Vector2(0, patternSize), tempBrush, 0.5f);
                    break;

                case xPFT.Charting.Base.FillPattern.Hashure_Back:
                    brt.DrawLine(new SharpDX.Vector2(0, 0), new SharpDX.Vector2(patternSize, patternSize), tempBrush, 0.5f);
                    break;

                case xPFT.Charting.Base.FillPattern.Dash:
                    brt.DrawLine(new SharpDX.Vector2(0, patternSize / 4), new SharpDX.Vector2(patternSize / 4, patternSize / 4), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize * 3 / 4, patternSize / 4), new SharpDX.Vector2(patternSize, patternSize / 4), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize / 4, patternSize * 3 / 4), new SharpDX.Vector2(patternSize * 3 / 4, patternSize * 3 / 4), tempBrush, 0.5f);
                    break;

                case xPFT.Charting.Base.FillPattern.Squre:
                    brt.DrawLine(new SharpDX.Vector2(0, patternSize / 2), new SharpDX.Vector2(patternSize, patternSize / 2), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize / 2, 0), new SharpDX.Vector2(patternSize / 2, patternSize), tempBrush, 0.5f);
                    break;

                case xPFT.Charting.Base.FillPattern.Dot:
                    brt.FillEllipse(new SharpDX.Direct2D1.Ellipse(new SharpDX.Vector2(patternSize / 4, patternSize / 4), 1, 1), tempBrush);
                    brt.FillEllipse(new SharpDX.Direct2D1.Ellipse(new SharpDX.Vector2(patternSize / 4, patternSize * 3 / 4), 1, 1), tempBrush);
                    brt.FillEllipse(new SharpDX.Direct2D1.Ellipse(new SharpDX.Vector2(patternSize * 3 / 4, patternSize / 4), 1, 1), tempBrush);
                    brt.FillEllipse(new SharpDX.Direct2D1.Ellipse(new SharpDX.Vector2(patternSize * 3 / 4, patternSize * 3 / 4), 1, 1), tempBrush);
                    break;

                case xPFT.Charting.Base.FillPattern.Zig_Zag_Horizontal:
                    brt.DrawLine(new SharpDX.Vector2(0, patternSize / 2), new SharpDX.Vector2(patternSize / 2, 0), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize, patternSize / 2), new SharpDX.Vector2(patternSize / 2, 0), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(0, patternSize), new SharpDX.Vector2(patternSize / 2, patternSize / 2), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize, patternSize), new SharpDX.Vector2(patternSize / 2, patternSize / 2), tempBrush, 0.5f);
                    break;

                case xPFT.Charting.Base.FillPattern.Zig_Zag_Vertical:
                    brt.DrawLine(new SharpDX.Vector2(patternSize / 2, 0), new SharpDX.Vector2(0, patternSize / 2), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize / 2, patternSize), new SharpDX.Vector2(0, patternSize / 2), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize, 0), new SharpDX.Vector2(patternSize / 2, patternSize / 2), tempBrush, 0.5f);
                    brt.DrawLine(new SharpDX.Vector2(patternSize, patternSize), new SharpDX.Vector2(patternSize / 2, patternSize / 2), tempBrush, 0.5f);
                    break;
                }
                brt.EndDraw();
                BitmapBrushProperties bmpbp = new BitmapBrushProperties();
                bmpbp.ExtendModeX       = ExtendMode.Wrap;
                bmpbp.ExtendModeY       = ExtendMode.Wrap;
                bmpbp.InterpolationMode = BitmapInterpolationMode.Linear;
                BitmapBrush br = new BitmapBrush(brt, brt.Bitmap, bmpbp);
                tempBrush.Dispose();
                brt.Dispose();
                return(br);
            }
            else
            {
                return(null);
            }
        }