Beispiel #1
0
        /// <summary>
        /// Load Content and initialize unmanaged resources.
        /// </summary>
        public override void LoadContent()
        {
            base.LoadContent();
            _dashStyle = new StrokeStyle(Surface.Factory2D,
                                         new StrokeStyleProperties()
            {
                DashCap = CapStyle.Flat, DashStyle = DashStyle.Custom, DashOffset = 10f, LineJoin = LineJoin.MiterOrBevel, MiterLimit = 2f
            }, new float[] { 2, 2 });
            _dotDashStyle = new StrokeStyle(Surface.Factory2D,
                                            new StrokeStyleProperties()
            {
                DashCap = CapStyle.Flat, DashStyle = DashStyle.Custom, DashOffset = 10f, LineJoin = LineJoin.MiterOrBevel, MiterLimit = 2f
            }, new float[] { 3, 2, 1, 2 });
            _solidStyle = new StrokeStyle(Surface.Factory2D,
                                          new StrokeStyleProperties()
            {
                DashCap = CapStyle.Flat, DashStyle = DashStyle.Solid, LineJoin = LineJoin.MiterOrBevel, MiterLimit = 2f
            });

            var font = Surface.Fonts.GetTextFormat(MM_Repository.OverallDisplay.NetworkMapFont);

            textLayoutNormallyOpen = new TextLayout(Surface.FactoryDirectWrite, "N.O.", font, 40, 40);
            textLayoutTieLine      = new TextLayout(Surface.FactoryDirectWrite, "Tie", font, 40, 40);

            if (LineFlow != null)
            {
                LineFlow.Dispose();
            }
            LineFlow = new PathGeometry(Surface.Factory2D);

            using (GeometrySink sink = LineFlow.Open())
            {
                RawVector2 p0 = new RawVector2 {
                    X = 0f, Y = 0f
                };
                RawVector2 p1 = new RawVector2 {
                    X = -1f, Y = 1.0f
                };
                RawVector2 p2 = new RawVector2 {
                    X = -1f, Y = -1.0f
                };

                sink.BeginFigure(p0, FigureBegin.Filled);
                sink.AddLine(p1);
                sink.AddLine(p2);
                sink.EndFigure(FigureEnd.Closed);

                // Note that Close() and Dispose() are not equivalent like they are for
                // some other IDisposable() objects.
                sink.Close();
            }
        }
        public override void Draw(RenderTarget target)
        {
            SolidColorBrush brush = new SolidColorBrush(target, Color.RawColor);

            var pathGeometry = new PathGeometry(target.Factory);
            var geometrySink = pathGeometry.Open();

            if (_points.Count > 0)
            {
                geometrySink.BeginFigure(_points.First(), FigureBegin.Filled);
                for (int i = 1; i < _points.Count && i < _framePoint; i++)
                {
                    geometrySink.AddLine(_points[i]);
                }
                geometrySink.EndFigure(FigureEnd.Open);
            }
            geometrySink.Close();
            // target.DrawGeometry(pathGeometry, brush);

            target.DrawGeometry(new GeometryNode().PathGeometry, brush);

            // important. turn pathGeometry into nodes
            // pathGeometry.Combine
            pathGeometry.Dispose();
            brush.Dispose();
            _frameDelayCounter++;
            if (_frameDelayCounter >= FrameDelay)
            {
                _framePoint++;
                _frameDelayCounter = 0;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Draws a Polygon.
        /// </summary>
        /// <param name="pen">The Pen.</param>
        /// <param name="polygon">The Polygon.</param>
        public void DrawPolygon(Pen pen, Polygon polygon)
        {
            var dxPen = pen.Instance as DirectXPen;

            if (dxPen == null)
            {
                throw new ArgumentException("DirectX10 expects a DirectXPen as resource.");
            }

            var geometry = new PathGeometry(DirectXHelper.Direct2DFactory);

            using (GeometrySink sink = geometry.Open())
            {
                sink.BeginFigure(DirectXHelper.ConvertVector(polygon.Points[0]), FigureBegin.Hollow);

                for (int i = 1; i < polygon.Points.Length; i++)
                {
                    sink.AddLine(DirectXHelper.ConvertVector(polygon.Points[i]));
                }

                sink.EndFigure(FigureEnd.Closed);
                sink.Close();

                _renderTarget.DrawGeometry(geometry, dxPen.GetPen(), dxPen.Width);
            }

            geometry.Dispose();
        }
Beispiel #4
0
        private void RenderingDrawMultiLine(List <float[]> points, int[] color, int thickness, bool drawWorldMap)
        {
            RawVector2[] pts = new RawVector2[points.Count + 1];

            for (int i = 0; i < points.Count; i++)
            {
                int[] screen;
                Helpers.ViewTransform.ToScreen.WorldToScreen(points[i], out screen, drawWorldMap);

                pts[i] = new RawVector2(screen[0], screen[1]);
            }

            pts[pts.Length - 1] = pts[0];

            pathGeometry = new PathGeometry(factory);
            geometrySink = pathGeometry.Open();

            geometrySink.BeginFigure(pts[0], new FigureBegin());
            geometrySink.AddLines(pts);
            geometrySink.EndFigure(new FigureEnd());
            geometrySink.Close();

            ChangeColor(color);

            device.DrawGeometry(pathGeometry, solidColorBrush);

            pathGeometry.Dispose();
            geometrySink.Dispose();
        }
Beispiel #5
0
        public Result DrawGlyphRun(object clientDrawingContext, float baselineOriginX, float baselineOriginY, MeasuringMode measuringMode, GlyphRun glyphRun, GlyphRunDescription glyphRunDescription, ComObject clientDrawingEffect)
        {
            var pathGeometry = new PathGeometry(_d2DFactory);
            var geometrySink = pathGeometry.Open();

            var fontFace = glyphRun.FontFace;

            if (glyphRun.Indices.Length > 0)
            {
                fontFace.GetGlyphRunOutline(glyphRun.FontSize, glyphRun.Indices, glyphRun.Advances, glyphRun.Offsets, glyphRun.IsSideways, glyphRun.BidiLevel % 2 != 0, geometrySink);
            }
            geometrySink.Close();
            geometrySink.Dispose();
            fontFace.Dispose();

            var matrix = new Matrix3x2()
            {
                M11 = 1,
                M12 = 0,
                M21 = 0,
                M22 = 1,
                M31 = baselineOriginX,
                M32 = baselineOriginY
            };

            var transformedGeometry = new TransformedGeometry(_d2DFactory, pathGeometry, matrix);

            _renderTarget.DrawGeometry(transformedGeometry, PenBrush, PenWidth, PenStyle);
            _renderTarget.FillGeometry(transformedGeometry, FontBrush);

            pathGeometry.Dispose();
            transformedGeometry.Dispose();

            return(SharpDX.Result.Ok);
        }
Beispiel #6
0
        /// <summary>
        /// Draw line with the data point collection.
        /// </summary>
        /// <param name="points"></param>
        /// <param name="xAxesCenterHeight"></param>
        /// <param name="yAxesCenterWidth"></param>
        /// <param name="HeightRate"></param>
        /// <param name="WidthRate"></param>
        /// <param name="xAxesMaxValue"></param>
        /// <param name="color"></param>
        /// <param name="autoShift"></param>
        /// <param name="keepInRightOfYAxis"></param>
        public System.Drawing.Point Draw(int layerIndex, Charting.Base.DataPointCollection points, float xAxesCenterHeight, float yAxesCenterWidth, float HeightRate, float WidthRate, float xAxesMaxValue, System.Drawing.Color color, float opacity, bool autoShift = true, bool keepInRightOfYAxis = false)
        {
            this.opacity = opacity;
            device.layers[layerIndex].AntialiasMode = AntialiasMode.PerPrimitive;
            if (curentColor != color)
            {
                SetLineColor(color, opacity);
            }
            SharpDX.Vector2[] tmpPointArray;
            float             MinX = 0;
            float             tmpYAxesCenterWidth = yAxesCenterWidth;

            tmpPointArray = DrawingBase.Convertor.convertDataPointToVector2Array(points, HeightRate, WidthRate, out MinX);
            if (tmpPointArray.Length > 1)
            {
                if (autoShift)
                {
                    if (points.GetLast().XValue > xAxesMaxValue)
                    {
                        tmpYAxesCenterWidth = -((float)points.GetLast().XValue - xAxesMaxValue) * WidthRate + yAxesCenterWidth;
                    }
                    else
                    {
                        tmpYAxesCenterWidth = -tmpPointArray[0].X + yAxesCenterWidth;
                    }
                }
                if (keepInRightOfYAxis)
                {
                    if (MinX < 0)
                    {
                        tmpYAxesCenterWidth = tmpYAxesCenterWidth - MinX;
                    }
                }

                var linePath = new PathGeometry(device.factory);
                using (var sink = linePath.Open())
                {
                    sink.BeginFigure(tmpPointArray[0], FigureBegin.Hollow);
                    sink.AddLines(tmpPointArray);
                    sink.EndFigure(FigureEnd.Open);
                    sink.Close();
                }

                if (device.layers[layerIndex] != null)
                {
                    device.layers[layerIndex].Transform = Matrix.Translation(tmpYAxesCenterWidth, xAxesCenterHeight, 0);
                    if (pattern != Charting.Base.LineDrawPattern.SOLID)
                    {
                        device.layers[layerIndex].DrawGeometry(linePath, brush, Width, strokeStyle);
                    }
                    else
                    {
                        device.layers[layerIndex].DrawGeometry(linePath, brush, Width);
                    }
                    device.layers[layerIndex].Transform = Matrix.Identity;
                }
                linePath.Dispose();
            }
            return(new System.Drawing.Point((int)tmpYAxesCenterWidth, (int)xAxesCenterHeight));
        }
Beispiel #7
0
        public override void DrawDashPolygon(PointF[] pts)
        {
            if (pts.Length == 0)
            {
                return;
            }
            PathGeometry geo  = new PathGeometry(factory);
            var          sink = geo.Open();

            sink.BeginFigure(pts[0].ToVector(), FigureBegin.Filled);
            for (int i = 0; i < pts.Length; i++)
            {
                sink.AddLine(pts[i].ToVector());
            }
            sink.EndFigure(FigureEnd.Open);
            sink.Close();
            StrokeStyle style = new StrokeStyle(factory, new StrokeStyleProperties()
            {
                DashStyle = DashStyle.Dash
            });

            renderTarget.DrawGeometry(geo, brush_gray, 4, style);
            renderTarget.DrawLine(pts[0].ToVector(), pts[pts.Length - 1].ToVector(), brush_gray, 2, style);
            style.Dispose();
            sink.Dispose();
            geo.Dispose();
        }
Beispiel #8
0
 private static void DrawRestDotPart(RenderTarget renderTarget, RawVector2 pos, Color color)
 {
     PointF[] pathPoints;
     using (GraphicsPath path = new GraphicsPath())
     {
         path.AddBezier(pos.X, pos.Y + 3f, pos.X - 2f, pos.Y + 6f, pos.X - 8f, pos.Y + 8f, pos.X - 12f, pos.Y + 2f);
         path.AddBezier((float)(pos.X - 12f), (float)(pos.Y + 2f), (float)(pos.X - 8f), (float)(pos.Y + 6.5f), (float)(pos.X - 2f), (float)(pos.Y + 5f), (float)(pos.X + 1f), (float)(pos.Y - 1f));
         path.Flatten();
         pathPoints = path.PathPoints;
         path.Dispose();
     }
     using (SharpDX.Direct2D1.Factory factory = renderTarget.Factory)
     {
         PathGeometry geometry = new PathGeometry(factory);
         if (pathPoints.Length > 1)
         {
             GeometrySink sink = geometry.Open();
             sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
             sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
             for (int i = 1; i < pathPoints.Length; i++)
             {
                 sink.AddLine(new RawVector2(pathPoints[i].X, pathPoints[i].Y));
             }
             sink.EndFigure(FigureEnd.Closed);
             sink.Close();
             sink.Dispose();
         }
         SolidColorBrush brush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
         renderTarget.FillGeometry(geometry, brush);
         brush.Dispose();
         geometry.Dispose();
     }
     renderTarget.FillCircle(new RawVector2(pos.X - 8f, pos.Y + 2f), 3f, color);
 }
Beispiel #9
0
        public void BorderedLine(float start_x, float start_y, float end_x, float end_y, float stroke, Direct2DBrush brush, Direct2DBrush borderBrush)
        {
            var geometry = new PathGeometry(_factory);

            var sink = geometry.Open();

            float half    = stroke / 2.0f;
            float quarter = half / 2.0f;

            sink.BeginFigure(new RawVector2(start_x, start_y - half), FigureBegin.Filled);

            sink.AddLine(new RawVector2(end_x, end_y - half));
            sink.AddLine(new RawVector2(end_x, end_y + half));
            sink.AddLine(new RawVector2(start_x, start_y + half));

            sink.EndFigure(FigureEnd.Closed);

            sink.Close();

            _device.DrawGeometry(geometry, borderBrush, half);

            _device.FillGeometry(geometry, brush);

            sink.Dispose();
            geometry.Dispose();
        }
Beispiel #10
0
        public void DrawShip(RenderTarget D2DRT, SolidColorBrush scb, Factory d2dFactory)
        {
            PathGeometry shape = new PathGeometry(d2dFactory);
            GeometrySink sink  = shape.Open();

            //Ship Front
            sink.BeginFigure(new Vector2((float)X + direction.X * 20, (float)Y - direction.Y * 20), FigureBegin.Hollow);

            //Calculating Ship Right Wing by rotating unit vector 90 degrees
            float rwX = (float)(direction.X * 0 - direction.Y * -1);
            float rwY = (float)(direction.X * 1 + direction.Y * 0);

            sink.AddLine(new Vector2(X + rwX * 7, Y + rwY * 7));

            //Calculating Ship Left Wing by rotating unit vector 270 degrees
            float lwX = (float)(direction.X * 0 - direction.Y * 1);
            float lwY = (float)(direction.X * -1 + direction.Y * 0);

            sink.AddLine(new Vector2(X + lwX * 7, Y - rwY * 7));

            sink.EndFigure(FigureEnd.Closed);
            sink.Close();
            D2DRT.DrawGeometry(shape, scb, 1f);

            //draw a line that is 10 times the length of the unit vector ship.direction
            D2DRT.DrawLine(new Vector2(X, Y), new Vector2(X + direction.X * 10, Y - direction.Y * 10), scb);
            edgePoints = new List <Vector2>();
            edgePoints.Add(new Vector2((float)X + direction.X * 20, (float)(Y - direction.Y * 20)));
            edgePoints.Add(new Vector2(X + lwX * 7, Y - rwY * 7));
            edgePoints.Add(new Vector2(X + lwX * 7, Y - rwY * 7));

            shape.Dispose();
            sink.Dispose();
        }
Beispiel #11
0
        public void DrawBox2D(float x, float y, float width, float height, float stroke, Direct2DColor interiorColor, Direct2DColor color)
        {
            var geometry = new PathGeometry(_factory);

            var sink = geometry.Open();

            sink.BeginFigure(new RawVector2(x, y), FigureBegin.Filled);
            sink.AddLine(new RawVector2(x + width, y));
            sink.AddLine(new RawVector2(x + width, y + height));
            sink.AddLine(new RawVector2(x, y + height));
            sink.EndFigure(FigureEnd.Closed);

            sink.Close();

            _sharedBrush.Color = color;

            _device.DrawGeometry(geometry, _sharedBrush, stroke);

            _sharedBrush.Color = interiorColor;

            _device.FillGeometry(geometry, _sharedBrush);

            sink.Dispose();
            geometry.Dispose();
        }
Beispiel #12
0
        public override Result DrawStrikethrough(object clientDrawingContext, float baselineOriginX, float baselineOriginY, ref Strikethrough strikethrough, ComObject clientDrawingEffect)
        {
            PathGeometry pg   = new PathGeometry(this.factory);
            GeometrySink sink = pg.Open();

            Vector2 topLeft = new Vector2(0.0f, strikethrough.Offset);

            sink.BeginFigure(topLeft, FigureBegin.Filled);
            topLeft.X += strikethrough.Width;
            sink.AddLine(topLeft);
            topLeft.Y += strikethrough.Thickness;
            sink.AddLine(topLeft);
            topLeft.X -= strikethrough.Width;
            sink.AddLine(topLeft);
            sink.EndFigure(FigureEnd.Closed);
            sink.Close();


            TransformedGeometry tg = new TransformedGeometry(this.factory, pg, Matrix3x2.Translation(baselineOriginX, baselineOriginY) * Matrix3x2.Scaling(1.0f, -1.0f));

            pg.Dispose();
            sink.Dispose();

            this.AddGeometry(tg);
            return(Result.Ok);
        }
 public static void FillSector(this RenderTarget renderTarget, RawVector2 pos, float radius, Color color, float angleStart, float angleEnd)
 {
     PointF[] pathPoints;
     using (GraphicsPath path = new GraphicsPath())
     {
         radius *= 2f;
         path.AddPie(pos.X - (radius / 2f), pos.Y - (radius / 2f), radius, radius, angleStart, angleEnd);
         path.Flatten();
         pathPoints = path.PathPoints;
         path.Dispose();
     }
     using (SharpDX.Direct2D1.Factory factory = renderTarget.Factory)
     {
         PathGeometry geometry = new PathGeometry(factory);
         if (pathPoints.Length > 1)
         {
             GeometrySink sink = geometry.Open();
             sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
             sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
             for (int i = 1; i < pathPoints.Length; i++)
             {
                 sink.AddLine(new RawVector2(pathPoints[i].X, pathPoints[i].Y));
             }
             sink.EndFigure(FigureEnd.Closed);
             sink.Close();
             sink.Dispose();
         }
         SolidColorBrush brush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
         renderTarget.FillGeometry(geometry, brush);
         brush.Dispose();
         geometry.Dispose();
     }
 }
Beispiel #14
0
        public override void Draw(RenderTarget target)
        {
            if (this.points.Count >= 4)
            {
                SolidColorBrush curveBrush = new SolidColorBrush(target, this.LineColor);
                PathGeometry    geometry   = new PathGeometry(target.Factory);
                GeometrySink    gs         = geometry.Open();
                gs.BeginFigure(this.points[0], FigureBegin.Filled);

                for (int i = 0; i < this.points.Count - 3; i += 2)
                {
                    float      a = 0;
                    float      b = 1;
                    float      h = (b - a) / this.resolution;
                    float      t = a;
                    RawVector2 P0, P1;

                    P0 = MathHelper.Interpolate(t, this.points[i], this.points[i + 1], this.points[i + 2], this.points[i + 3]);

                    while (t < b)
                    {
                        t += h;

                        P1 = MathHelper.Interpolate(t, this.points[i], this.points[i + 1], this.points[i + 2], this.points[i + 3]);

                        // target.DrawLine(P0, P1, curveBrush);
                        gs.AddLine(P0);
                        gs.AddLine(P1);

                        P0 = P1;
                    }
                }

                if (this.Closed)
                {
                    this.Close(target, gs);
                    gs.EndFigure(FigureEnd.Closed);
                    gs.Close();
                    if (this.Filled)
                    {
                        SolidColorBrush fillBrush = new SolidColorBrush(target, this.FillColor);
                        target.FillGeometry(geometry, fillBrush);
                        fillBrush.Dispose();
                    }
                }
                else
                {
                    gs.EndFigure(FigureEnd.Open);
                    gs.Close();
                }

                target.DrawGeometry(geometry, curveBrush, this.LineThickness);

                gs.Dispose();
                geometry.Dispose();
                curveBrush.Dispose();
            }

            base.Draw(target);
        }
Beispiel #15
0
 protected override void OnCleanUpDeviceIndependentResources()
 {
     base.OnCleanUpDeviceIndependentResources();
     _leftMountainGeometry.Dispose();
     _rightMountainGeometry.Dispose();
     _sunGeometry.Dispose();
     _riverGeometry.Dispose();
 }
        private static void DrawTie(this RenderTarget renderTarget, SharpDX.DirectWrite.Factory writeFactory, RawVector2 startPos, RawVector2 endPos, Color color, bool flipVertical = false, bool isTriplet = false)
        {
            PointF[]   pathPoints;
            RawVector2 vector;
            RawVector2 vector2;

            using (GraphicsPath path = new GraphicsPath())
            {
                float num  = 45f;
                float num2 = 0.3f;
                float num3 = startPos.GetDistanceByRawVector2(endPos).Clamp(64f, 256f);
                float num4 = startPos.GetAngleByRawVector2(endPos);
                float num5 = endPos.GetAngleByRawVector2(startPos);
                if (flipVertical)
                {
                    vector  = startPos.GetRawVector2ByPolarCoordinates(num4 + num, num3 * num2);
                    vector2 = endPos.GetRawVector2ByPolarCoordinates(num5 - num, num3 * num2);
                    path.AddBezier(startPos.X, startPos.Y, vector.X, vector.Y, vector2.X, vector2.Y, endPos.X, endPos.Y);
                    path.AddBezier(endPos.X, endPos.Y + 1f, vector2.X, vector2.Y + 2f, vector.X, vector.Y + 2f, startPos.X, startPos.Y + 1f);
                }
                else
                {
                    vector  = startPos.GetRawVector2ByPolarCoordinates(num4 - num, num3 * num2);
                    vector2 = endPos.GetRawVector2ByPolarCoordinates(num5 + num, num3 * num2);
                    path.AddBezier(startPos.X, startPos.Y, vector.X, vector.Y, vector2.X, vector2.Y, endPos.X, endPos.Y);
                    path.AddBezier(endPos.X, endPos.Y - 1f, vector2.X, vector2.Y - 2f, vector.X, vector.Y - 2f, startPos.X, startPos.Y - 1f);
                }
                path.Flatten();
                pathPoints = path.PathPoints;
                path.Dispose();
            }
            using (SharpDX.Direct2D1.Factory factory = renderTarget.Factory)
            {
                PathGeometry geometry = new PathGeometry(factory);
                if (pathPoints.Length > 1)
                {
                    GeometrySink sink = geometry.Open();
                    sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
                    sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
                    for (int i = 1; i < pathPoints.Length; i++)
                    {
                        sink.AddLine(new RawVector2(pathPoints[i].X, pathPoints[i].Y));
                    }
                    sink.EndFigure(FigureEnd.Closed);
                    sink.Close();
                    sink.Dispose();
                }
                SolidColorBrush brush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
                renderTarget.FillGeometry(geometry, brush);
                brush.Dispose();
                geometry.Dispose();
                if (isTriplet)
                {
                    RawVector2 pos = new RawVector2(vector.X + ((vector2.X - vector.X) / 2f), vector.Y + ((vector2.Y - vector.Y) / 2f));
                    renderTarget.DrawTextLayout(writeFactory, "3", pos, "Consolas", 16f, Color.FromArgb((int)(color.A * 0.75f), color), TextAlignment.Center, ParagraphAlignment.Center, SharpDX.DirectWrite.FontStyle.Normal, FontWeight.ExtraBlack);
                }
            }
        }
Beispiel #17
0
 /// <summary>
 /// Disposes of resources</summary>
 /// <param name="disposing">True to release both managed and unmanaged resources;
 /// false to release only unmanaged resources</param>
 protected override void Dispose(bool disposing)
 {
     if (disposing && m_geometry != null)
     {
         m_geometry.Dispose();
         m_geometry = null;
     }
     base.Dispose(disposing);
 }
Beispiel #18
0
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
     blue.Dispose();
     red.Dispose();
     brush.Dispose();
     sink.Dispose();
     path.Dispose();
     renderTarget.Dispose();
     factory.Dispose();
 }
            /// <summary>
            ///     Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
            /// </summary>
            public void Dispose()
            {
                GeometrySink sink = Interlocked.Exchange(ref _sink, null);

                if (sink != null)
                {
                    sink.Dispose();
                    PathGeometry.Dispose();
                }
            }
Beispiel #20
0
        public Result DrawGlyphRun(object clientDrawingContext, float baselineOriginX, float baselineOriginY, MeasuringMode measuringMode, GlyphRun glyphRun, GlyphRunDescription glyphRunDescription, ComObject clientDrawingEffect)
        {
            if (clientDrawingEffect != null && clientDrawingEffect is SolidColorBrush)
            {
                SolidColorBrush brushx = clientDrawingEffect as SolidColorBrush;
                _renderTarget.DrawGlyphRun(new Vector2(baselineOriginX, baselineOriginY), glyphRun, brushx, measuringMode);
                return(Result.Ok);
            }

            var pathGeometry = new PathGeometry(_d2DFactory);
            var geometrySink = pathGeometry.Open();

            var fontFace = glyphRun.FontFace;

            if (glyphRun.Indices.Length > 0)
            {
                fontFace.GetGlyphRunOutline(glyphRun.FontSize, glyphRun.Indices, glyphRun.Advances, glyphRun.Offsets, glyphRun.IsSideways, glyphRun.BidiLevel % 2 != 0, geometrySink);
            }
            geometrySink.Close();
            geometrySink.Dispose();
            fontFace.Dispose();

            var matrix = new Matrix3x2()
            {
                M11 = 1,
                M12 = 0,
                M21 = 0,
                M22 = 1,
                M31 = baselineOriginX,
                M32 = baselineOriginY
            };

            var transformedGeometry = new TransformedGeometry(_d2DFactory, pathGeometry, matrix);

            var             brushColor = (Color4)Color.Black;
            SolidColorBrush brush      = null;

            if (clientDrawingEffect != null && clientDrawingEffect is ColorDrawingEffect)
            {
                brushColor = (clientDrawingEffect as ColorDrawingEffect).Color;
            }

            brush = new SolidColorBrush(_renderTarget, brushColor);

            //   _renderTarget.DrawGeometry(transformedGeometry, brush);
            _renderTarget.FillGeometry(transformedGeometry, brush);

            pathGeometry.Dispose();
            transformedGeometry.Dispose();
            brush.Dispose();

            return(SharpDX.Result.Ok);
        }
Beispiel #21
0
 protected override void OnCleanUpDeviceIndependentResources()
 {
     base.OnCleanUpDeviceIndependentResources();
     _strokeStyle.Dispose();
     _textFormat.Dispose();
     _circleGeometry1.Dispose();
     _circleGeometry2.Dispose();
     _geometryUnion.Dispose();
     _geometryIntersect.Dispose();
     _geometryXor.Dispose();
     _geometryExclude.Dispose();
 }
 public static void DrawBezierLine(this RenderTarget renderTarget, PointF[] points, Color color, float strokeWidth, StrokeStyle strokeStyle, bool disposeStrokeStyle = true)
 {
     if (points.Length >= 2)
     {
         PointF[] pathPoints;
         int      num;
         using (GraphicsPath path = new GraphicsPath())
         {
             List <PointF> list = new List <PointF> {
                 points.First <PointF>()
             };
             for (num = 1; num < points.Length; num++)
             {
                 PointF tf;
                 PointF tf2;
                 GetBezierCtrlPoint(points, num - 1, 0.15f, 0.15f, out tf, out tf2);
                 list.Add(tf);
                 list.Add(tf2);
                 list.Add(points[num]);
             }
             path.AddBeziers(list.ToArray());
             path.Flatten();
             pathPoints = path.PathPoints;
             path.Dispose();
         }
         using (SharpDX.Direct2D1.Factory factory = renderTarget.Factory)
         {
             PathGeometry geometry = new PathGeometry(factory);
             if (pathPoints.Length > 1)
             {
                 GeometrySink sink = geometry.Open();
                 sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
                 sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
                 for (num = 1; num < pathPoints.Length; num++)
                 {
                     sink.AddLine(new RawVector2(pathPoints[num].X, pathPoints[num].Y));
                 }
                 sink.EndFigure(FigureEnd.Open);
                 sink.Close();
                 sink.Dispose();
             }
             SolidColorBrush brush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
             renderTarget.DrawGeometry(geometry, brush, strokeWidth, strokeStyle);
             brush.Dispose();
             geometry.Dispose();
         }
         if (disposeStrokeStyle && (strokeStyle != null))
         {
             strokeStyle.Dispose();
         }
     }
 }
Beispiel #23
0
        public override void Draw()
        {
            if (isMouseDown && Math.Abs(beginAngle - dragAngle) > sweepAngleMinimum)
            {
                Pie = displayer.Factory.CreatePathGeometry();   //扇形区域

                //开始合成扇形
                GeometrySink gs = Pie.Open();
                gs.BeginFigure(displayer.coordinateSystem.OriginalPoint, FigureBegin.Filled);

                //添加第一条线
                //float angle1 = CoordinateSystem.AngleToNorth(displayer.coordinateSystem.OriginalPoint, beginLinePoint);
                //angle1 -= 30;
                //if (angle1 < 0)
                //    angle1 += 360;
                //Point2F p = displayer.coordinateSystem.CalIntersectionPoint(angle1);
                //gs.AddLine(p);
                gs.AddLine(beginLinePoint);   //原始代码

                //判断起始角度和结束角度
                float begin = Tools.FindSmallArcBeginAngle(beginAngle, dragAngle);
                float end   = Tools.FindSmallArcEndAngle(beginAngle, dragAngle);

                //判断上行扫过的方向,如果起始角度是鼠标点击的位置则扇形是顺时针扫过
                //如果起始角度是鼠标拖动位置,则扇形是逆时针扫过
                SweepDirection sd;
                sd = Tools.FloatEquals(begin, beginAngle) ? SweepDirection.Clockwise : SweepDirection.Counterclockwise;

                //扇形的X轴Y轴半径是矩形框width的一半
                SizeF size = new SizeF(displayer.coordinateSystem.CoordinateArea.Width / 2, displayer.coordinateSystem.CoordinateArea.Height / 2);

                //添加弧线
                ArcSegment arc = new ArcSegment(dragLinePoint, size, 0, sd, ArcSize.Small);
                gs.AddArc(arc);

                //添加第二条线
                gs.AddLine(displayer.coordinateSystem.OriginalPoint);
                gs.EndFigure(FigureEnd.Closed);
                gs.Close();

                //绘制区域
                displayer.Canvas.FillGeometry(Pie, antennaRangeAreaBrush);
                displayer.Canvas.DrawGeometry(Pie, antennaRangeAreaBrush, 3);

                //释放资源
                gs.Dispose();
                Pie.Dispose();
            }
        }
        public override void Draw()
        {
            if (!isMouseDown)
            {
                return;
            }

            var gs = CreateSectionSweepGeometry();

            //绘制区域
            DrawSectionSweepGeometry();

            //释放资源
            gs.Dispose();
            _pie.Dispose();
        }
Beispiel #25
0
        public override void Draw(RenderTarget target)
        {
            SolidColorBrush polyBrush = new SolidColorBrush(target, this.LineColor);
            PathGeometry    geometry  = new PathGeometry(target.Factory);
            GeometrySink    gs        = geometry.Open();

            gs.BeginFigure(this.points[0], FigureBegin.Filled);

            for (int i = 0; i < this.PointCount - 1; i++)
            {
                gs.AddLine(new RawVector2()
                {
                    X = this.points[i].X, Y = this.points[i].Y
                });
                gs.AddLine(new RawVector2()
                {
                    X = this.points[i + 1].X, Y = this.points[i + 1].Y
                });
            }

            if (this.Closed)
            {
                gs.EndFigure(FigureEnd.Closed);
            }
            else
            {
                gs.EndFigure(FigureEnd.Open);
            }

            gs.Close();

            target.DrawGeometry(geometry, polyBrush);

            if (this.Filled)
            {
                SolidColorBrush fillBrush = new SolidColorBrush(target, this.FillColor);
                target.FillGeometry(geometry, fillBrush);
                fillBrush.Dispose();
            }

            gs.Dispose();
            geometry.Dispose();
            polyBrush.Dispose();

            base.Draw(target);
        }
Beispiel #26
0
        public void FillTriangle(float a_x, float a_y, float b_x, float b_y, float c_x, float c_y, Direct2DBrush brush)
        {
            var geometry = new PathGeometry(_factory);

            var sink = geometry.Open();

            sink.BeginFigure(new RawVector2(a_x, a_y), FigureBegin.Filled);
            sink.AddLine(new RawVector2(b_x, b_y));
            sink.AddLine(new RawVector2(c_x, c_y));
            sink.EndFigure(FigureEnd.Closed);

            sink.Close();

            _device.FillGeometry(geometry, brush);

            sink.Dispose();
            geometry.Dispose();
        }
        public static void DrawArrow(this RenderTarget target, SolidColorBrush brush, RawVector2 V0, RawVector2 V1, float alpha, float size)
        {
            target.DrawLine(V0, V1, brush);
            float distance = Distance(V0, V1);

            RawVector2 pH = new RawVector2()
            {
                X = (size * V0.X + (distance - size) * V1.X) / distance, Y = (size * V0.Y + (distance - size) * V1.Y) / distance
            };

            RawVector2[] triangle = new RawVector2[3];
            triangle[0] = V1;

            float beta   = (float)Math.Atan2(V1.Y - V0.Y, V1.X - V0.X);
            float d      = Distance(V1, pH) * (float)Math.Tan(alpha * Math.PI / 360);
            float angle1 = (float)(beta + Math.PI / 2);
            float angle2 = (float)(beta - Math.PI / 2);

            triangle[1] = new RawVector2()
            {
                X = pH.X + d * (float)Math.Cos(angle1), Y = pH.Y + d * (float)Math.Sin(angle1)
            };
            triangle[2] = new RawVector2()
            {
                X = pH.X + d * (float)Math.Cos(angle2), Y = pH.Y + d * (float)Math.Sin(angle2)
            };

            PathGeometry polygonGeometry = new PathGeometry(target.Factory);
            GeometrySink gs = polygonGeometry.Open();

            gs.BeginFigure(triangle[0], FigureBegin.Filled);
            gs.AddLines(new RawVector2[]
            {
                triangle[1],
                triangle[2]
            });
            gs.EndFigure(FigureEnd.Closed);
            gs.Close();

            target.FillGeometry(polygonGeometry, brush);

            gs.Dispose();
            polygonGeometry.Dispose();
        }
Beispiel #28
0
        /// <summary>
        /// Releases all resources used by this Geometry.
        /// </summary>
        /// <param name="disposing">A Boolean value indicating whether this is called from the destructor.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                try
                {
                    if (IsOpen)
                    {
                        _sink.Close();
                    }

                    _sink.Dispose();
                    _geometry.Dispose();
                }
                catch { }

                disposedValue = true;
            }
        }
Beispiel #29
0
        public Result DrawGlyphRun(object clientDrawingContext, float baselineOriginX, float baselineOriginY, MeasuringMode measuringMode, GlyphRun glyphRun, GlyphRunDescription glyphRunDescription, ComObject clientDrawingEffect)
        {
            var pathGeometry = new PathGeometry(_d2DFactory);
            var geometrySink = pathGeometry.Open();

            float[]       advances;
            GlyphOffset[] offsets;
            var           indecies = glyphRun.ToArrays(out advances, out offsets);

            var result = glyphRun.FontFace.GetGlyphRunOutline(glyphRun.FontSize, indecies, advances, offsets, glyphRun.IsSideways, glyphRun.BidiLevel % 2 != 0, geometrySink);

            geometrySink.Close();
            var matrix = new Matrix3x2()
            {
                M11 = 1,
                M12 = 0,
                M21 = 0,
                M22 = 1,
                M31 = baselineOriginX,
                M32 = baselineOriginY
            };

            var transformedGeometry = new TransformedGeometry(_d2DFactory, pathGeometry, matrix);

            var brushColor = new Color4(1, 0, 0, 0);

            if (clientDrawingEffect != null && clientDrawingEffect is ColorDrawingEffect)
            {
                brushColor = (clientDrawingEffect as ColorDrawingEffect).Color;
            }

            var brush = new SolidColorBrush(_renderTarget, brushColor);

            _renderTarget.DrawGeometry(transformedGeometry, brush);
            _renderTarget.FillGeometry(transformedGeometry, brush);

            pathGeometry.Dispose();
            transformedGeometry.Dispose();
            brush.Dispose();

            return(SharpDX.Result.Ok);
        }
Beispiel #30
0
        /// <summary>
        /// Unload content and cleanup unmanaged resources.
        /// </summary>
        public override void UnloadContent()
        {
            base.UnloadContent();

            if (_slice != null)
            {
                _slice.Dispose();
            }
            _slice = null;

            var legendItems = _strings.Values.ToList();

            _strings.Clear();
            foreach (var legendItem in legendItems)
            {
                legendItem.Dispose();
            }
            legendItems.Clear();
            _legendFont = null;
        }
Beispiel #31
0
        /// <summary>
        /// Fills a Polygon.
        /// </summary>
        /// <param name="color">The Color.</param>
        /// <param name="polygon">The Polygon.</param>
        public void FillPolygon(Color color, Polygon polygon)
        {
            var geometry = new PathGeometry(DirectXHelper.Direct2DFactory);
            using (GeometrySink sink = geometry.Open())
            {
                sink.BeginFigure(DirectXHelper.ConvertVector(polygon.Points[0]), FigureBegin.Filled);

                for (int i = 1; i < polygon.Points.Length; i++)
                    sink.AddLine(DirectXHelper.ConvertVector(polygon.Points[i]));

                sink.EndFigure(FigureEnd.Closed);
                sink.Close();

                _renderTarget.FillGeometry(geometry,
                    new SolidColorBrush(DirectXHelper.RenderTarget, DirectXHelper.ConvertColor(color)));
            }

            geometry.Dispose();
        }
Beispiel #32
0
        /// <summary>
        /// Draws a Polygon.
        /// </summary>
        /// <param name="pen">The Pen.</param>
        /// <param name="polygon">The Polygon.</param>
        public void DrawPolygon(Pen pen, Polygon polygon)
        {
            var dxPen = pen.Instance as DirectXPen;
            if (dxPen == null) throw new ArgumentException("DirectX10 expects a DirectXPen as resource.");

            var geometry = new PathGeometry(DirectXHelper.Direct2DFactory);
            using (GeometrySink sink = geometry.Open())
            {
                sink.BeginFigure(DirectXHelper.ConvertVector(polygon.Points[0]), FigureBegin.Hollow);

                for (int i = 1; i < polygon.Points.Length; i++)
                    sink.AddLine(DirectXHelper.ConvertVector(polygon.Points[i]));

                sink.EndFigure(FigureEnd.Closed);
                sink.Close();

                _renderTarget.DrawGeometry(geometry, dxPen.GetPen(), dxPen.Width);
            }

            geometry.Dispose();
        }