Exemplo n.º 1
0
        public override ScanLine DoTask(ScanLine source)
        {
            int      count = source.Count;
            ScanLine ret   = new ScanLine(source.LaserID, count);

            ret.DisplayAsLine = source.DisplayAsLine;
            if (count < 4)
            {
                ret.AddRange(source);
            }
            else
            {
                BezierBuilder bez = new BezierBuilder(SegmentPerCurve, MinSquareDistance);
                bez.SetControlPoints(source);
                switch (Mode)
                {
                case eMode.Mode0:
                    ret.AddRange(bez.GetDrawingPoints0());
                    break;

                case eMode.Mode1:
                    ret.AddRange(bez.GetDrawingPoints1());
                    break;

                default:
                    ret.AddRange(bez.GetDrawingPoints2());
                    break;
                }
            }
            return(ret);
        }
Exemplo n.º 2
0
        protected void RenderIsolineCollection(DrawingContext dc, double strokeThickness, IsolineCollection collection, CoordinateTransform transform)
        {
            foreach (LevelLine line in collection)
            {
                StreamGeometry lineGeometry = new StreamGeometry();
                using (var context = lineGeometry.Open())
                {
                    context.BeginFigure(line.StartPoint.ViewportToScreen(transform), false, false);
                    if (!UseBezierCurves)
                    {
                        context.PolyLineTo(line.OtherPoints.ViewportToScreen(transform).ToArray(), true, true);
                    }
                    else
                    {
                        context.PolyBezierTo(BezierBuilder.GetBezierPoints(line.AllPoints.ViewportToScreen(transform).ToArray()).Skip(1).ToArray(), true, true);
                    }
                }
                lineGeometry.Freeze();

                Pen pen = new Pen(new SolidColorBrush(Palette.GetColor(line.Value01)), strokeThickness);

                dc.DrawGeometry(null, pen, lineGeometry);
            }
        }
        protected override void UpdateUIRepresentationCore()
        {
            if (updating)
            {
                return;
            }
            updating = true;

            var transform = Plotter.Viewport.Transform;

            PathGeometry geometry = PathGeometry;

            PointCollection points = Points;

            geometry.Clear();

            if (BezierPoints != null)
            {
                points = BezierPoints;

                var        screenPoints = points.DataToScreen(transform).ToArray();
                PathFigure figure       = new PathFigure();
                figure.StartPoint = screenPoints[0];
                figure.Segments.Add(new PolyBezierSegment(screenPoints.Skip(1), true));
                geometry.Figures.Add(figure);
                geometry.FillRule = this.FillRule;
            }
            else if (points == null)
            {
            }
            else
            {
                PathFigure figure = new PathFigure();
                if (points.Count > 0)
                {
                    Point[] bezierPoints = null;
                    figure.StartPoint = points[0].DataToScreen(transform);
                    if (points.Count > 1)
                    {
                        Point[] screenPoints = points.DataToScreen(transform).ToArray();

                        bezierPoints = BezierBuilder.GetBezierPoints(screenPoints).Skip(1).ToArray();

                        figure.Segments.Add(new PolyBezierSegment(bezierPoints, true));
                    }

                    if (bezierPoints != null && buildBezierPoints)
                    {
                        Array.Resize(ref bezierPoints, bezierPoints.Length + 1);
                        Array.Copy(bezierPoints, 0, bezierPoints, 1, bezierPoints.Length - 1);
                        bezierPoints[0] = figure.StartPoint;

                        BezierPoints = new PointCollection(bezierPoints.ScreenToData(transform));
                    }
                }

                geometry.Figures.Add(figure);
                geometry.FillRule = this.FillRule;
            }

            updating = false;
        }