/// <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); } }
/// <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); } } }
/// <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); } }
/// <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); } }
/// <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(); } } }
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); }
/// <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(); } } }
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(); }
/// <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(); } } }
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); } }