Ejemplo n.º 1
0
        private static void Normalize(VectorImageData vectorImageData)
        {
            var sequencesUnflattened = new List <IEnumerable <PointsSequence> >();

            sequencesUnflattened.Add(vectorImageData.Polygons ?? System.Linq.Enumerable.Empty <PointsSequence>());
            sequencesUnflattened.Add(vectorImageData.PolyLines ?? System.Linq.Enumerable.Empty <PointsSequence>());

            var sequences = sequencesUnflattened.Flatten();
            var points    = sequences.SelectMany(sequence => sequence.Points).ToList();

            var xs = points.Select(pnt => pnt.X).ToArray();
            var ys = points.Select(pnt => pnt.Y).ToArray();

            var minX = xs.Min();
            var maxX = xs.Max();
            var minY = ys.Min();
            var maxY = ys.Max();

            var tx = (maxX + minX) / 2;
            var sx = (maxX - minX) / 2;

            var ty = (maxY + minY) / 2;
            var sy = (maxY - minY) / 2;

            var scale = Math.Max(sx, sy);

            foreach (var seq in sequences)
            {
                foreach (var idx in System.Linq.Enumerable.Range(0, seq.Points.Length))
                {
                    // get the point
                    var point = seq.Points[idx];

                    // modify the point
                    point.X = point.X - tx;
                    point.Y = point.Y - ty;

                    if (sx > 0)
                    {
                        point.X = point.X / scale;
                    }
                    if (sy > 0)
                    {
                        point.Y = point.Y / scale;
                    }

                    // put the modified point
                    seq.Points[idx] = point;
                }
            }
        }
Ejemplo n.º 2
0
        private IObservable <SketchData> LoadModellingDataAsync(string modelFile, VectorImageData vectorImage)
        {
            Func <SketchData> loadAction = () =>
            {
                SketchData sketchData;
                if (File.Exists(modelFile))
                {
                    using (var stream = File.OpenRead(modelFile))
                        using (var compressed = new DeflateStream(stream, CompressionMode.Decompress, true))
                        {
                            var serializer = new BinaryFormatter();
                            sketchData = (SketchData)serializer.Deserialize(compressed);
                        }
                }
                else
                {
                    sketchData = new SketchData();
                }

                if (sketchData.Curves == null)
                {
                    sketchData.Curves = vectorImage.PolyLines.Cast <PointsSequence>().Concat(vectorImage.Polygons).ToArray();
                }

                if (sketchData.DistanceTransforms == null)
                {
                    sketchData.DistanceTransforms =
                        sketchData.Curves
                        .AsParallel()
                        .Select(c => ComputeDistanceTransform(c))
                        .ToArray();

                    Parallel.ForEach(sketchData.DistanceTransforms, dt => Negate(dt));
                }

                return(sketchData);
            };

            return(Observable.ToAsync(loadAction)());
        }
Ejemplo n.º 3
0
        private VectorImageData LoadSvg(string fileName)
        {
            var polygons  = new List <Polygon>();
            var polylines = new List <Polyline>();

            var figures = LoadFigures(fileName);

            foreach (var figure in figures)
            {
                Contract.Assume(figure.Segments.Cast <PolyLineSegment>().Count() == 1);

                var points = new List <Point>();
                points.Add(figure.StartPoint);

                var segment = figure.Segments.Cast <PolyLineSegment>().First();
                points.AddRange(segment.Points);

                if (figure.IsClosed)
                {
                    polygons.Add(new Polygon(points));
                }
                else
                {
                    polylines.Add(new Polyline(points));
                }
            }

            var result = new VectorImageData
            {
                PolyLines = polylines.ToArray(),
                Polygons  = polygons.ToArray(),
            };

            Normalize(result);

            return(result);
        }
Ejemplo n.º 4
0
 public void SetTitleIcon(VectorImageData imgIcon)
 {
     imgTitleIcon.vectorImageData = imgIcon;
 }