コード例 #1
0
        public void TestMapCSSClosedWay()
        { // tests map css interpretation of a closed way marked as an area.
            MemoryDataSource source = new MemoryDataSource(
                Node.Create(1, 0, 0),
                Node.Create(2, 1, 0),
                Node.Create(3, 0, 1),
                Way.Create(1, new SimpleTagsCollection(
                               Tag.Create("area", "yes")), 1, 2, 3, 1));

            // test closed way.
            string css = "way[area] { " +
                         "   fill-color: black; " +
                         "} ";

            // create the projection and scene objects.
            var     mercator = new WebMercator();
            Scene2D scene    = new Scene2DSimple();

            // create the interpreter.
            MapCSSInterpreter interpreter = new MapCSSInterpreter(css,
                                                                  new MapCSSDictionaryImageSource());

            interpreter.Translate(scene, mercator, source, source.GetWay(1));

            // test the scene contents.
            Assert.AreEqual(1, scene.Count);
            List <IScene2DPrimitive> primitives = scene.Get(0);

            Assert.IsNotNull(primitives);
            Assert.AreEqual(1, primitives.Count);
            IScene2DPrimitive primitive = primitives[0];

            Assert.IsInstanceOf <Polygon2D>(primitive);
        }
コード例 #2
0
        /// <summary>
        /// Renders the primities for the given scene.
        /// </summary>
        /// <param name="target"></param>
        /// <param name="scene"></param>
        /// <param name="view"></param>
        private bool RenderPrimitives(Target2DWrapper <TTarget> target, Scene2D scene, View2D view)
        {
            // TODO: calculate zoom.
            float zoom = (float)view.CalculateZoom(target.Width, target.Height);

            // loop over all primitives in the scene.
            foreach (Scene2DPrimitive scenePrimitive in scene.Get(view, zoom))
            { // the primitive is visible.
                IScene2DPrimitive primitive = scenePrimitive.Primitive;
                if (_cancelFlag)
                {
                    return(false);                    // stop rendering on cancel and return false for an incomplete rendering.
                }

                if (primitive is Point2D)
                {
                    var point = (Point2D)(primitive);
                    this.DrawPoint(target, point.X, point.Y, point.Color,
                                   this.FromPixels(target, view, point.Size));
                }
                else if (primitive is Line2D)
                {
                    var line = (Line2D)(primitive);
                    this.DrawLine(target, line.X, line.Y, line.Color,
                                  this.FromPixels(target, view, line.Width), line.LineJoin, line.Dashes);
                }
                else if (primitive is Polygon2D)
                {
                    var polygon = (Polygon2D)(primitive);
                    this.DrawPolygon(target, polygon.X, polygon.Y, polygon.Color,
                                     this.FromPixels(target, view, polygon.Width), polygon.Fill);
                }
                else if (primitive is Icon2D)
                {
                    var icon = (Icon2D)(primitive);
                    this.DrawIcon(target, icon.X, icon.Y, icon.Image);
                }
                else if (primitive is Image2D)
                {
                    var image = (Image2D)(primitive);
                    image.Tag = this.DrawImage(target, image.Left, image.Top, image.Right, image.Bottom, image.ImageData,
                                               image.Tag);
                }
                else if (primitive is Text2D)
                {
                    var text = (Text2D)(primitive);
                    this.DrawText(target, text.X, text.Y, text.Text, text.Color,
                                  this.FromPixels(target, view, text.Size), text.HaloColor, text.HaloRadius, text.Font);
                }
                else if (primitive is LineText2D)
                {
                    var lineText = (LineText2D)(primitive);
                    this.DrawLineText(target, lineText.X, lineText.Y, lineText.Text, lineText.Color,
                                      this.FromPixels(target, view, lineText.Size), lineText.HaloColor, lineText.HaloRadius, lineText.Font);
                }
            }
            return(true);
        }
コード例 #3
0
ファイル: Scene2DSimple.cs プロジェクト: jboneng/OsmSharp
        /// <summary>
        /// Adds a new primitive with a given id and layer.
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="id"></param>
        /// <param name="primitive"></param>
        internal void AddPrimitive(int layer, uint id, IScene2DPrimitive primitive)
        {
            primitive.Id = id;
            List <IScene2DPrimitive> layerList;

            if (!_primitives.TryGetValue(layer, out layerList))
            {
                layerList = new List <IScene2DPrimitive>();
                _primitives.Add(layer, layerList);
            }
            layerList.Add(primitive);
        }
コード例 #4
0
        public void TestMapCSSSimpleEval()
        {
            MemoryDataSource source = new MemoryDataSource(
                Node.Create(1, 0, 0),
                Node.Create(2, 1, 0),
                Node.Create(3, 0, 1),
                Way.Create(1, new SimpleTagsCollection(
                               Tag.Create("width", "10")), 1, 2, 3, 1));

            // test closed way.
            string css = "way { " +
                         "   width:  eval(\"tag('width')\"); " +
                         "   color: green; " +
                         "} ";

            // create the projection and scene objects.
            var     mercator = new WebMercator();
            Scene2D scene    = new Scene2DSimple();

            // create the projection and scene objects.
            scene = new Scene2DSimple();

            // create the interpreter.
            MapCSSInterpreter interpreter = new MapCSSInterpreter(css,
                                                                  new MapCSSDictionaryImageSource());

            interpreter.Translate(scene, mercator, source, source.GetWay(1));

            // test the scene contents.
            Assert.AreEqual(1, scene.Count);
            List <IScene2DPrimitive> primitives = scene.Get(0);

            Assert.IsNotNull(primitives);
            Assert.AreEqual(1, primitives.Count);
            IScene2DPrimitive primitive = primitives[0];

            Assert.IsInstanceOf <Line2D>(primitive);
            Line2D line = (primitive as Line2D);

            Assert.AreEqual(10, line.Width);
        }
コード例 #5
0
        /// <summary>
        /// Serializes the actual data.
        /// </summary>
        /// <param name="typeModel"></param>
        /// <param name="data"></param>
        /// <param name="boxes"></param>
        /// <returns></returns>
        protected override byte[] Serialize(RuntimeTypeModel typeModel, List <Scene2DEntry> data,
                                            List <BoxF2D> boxes)
        {
            var icons     = new List <Icon2DEntry>();
            var images    = new List <Image2DEntry>();
            var lines     = new List <Line2DEntry>();
            var points    = new List <Point2DEntry>();
            var polygons  = new List <Polygon2DEntry>();
            var texts     = new List <Text2DEntry>();
            var lineTexts = new List <LineText2DEntry>();

            // build the collection object.
            var collection = new PrimitivesCollection();

            for (int idx = 0; idx < data.Count; idx++)
            {
                IScene2DPrimitive primitive = data[idx].Scene2DPrimitive;
                if (primitive is Icon2D)
                {
                    icons.Add(new Icon2DEntry()
                    {
                        Primitive = (Icon2D)primitive,
                        Id        = data[idx].Id,
                        Layer     = data[idx].Layer
                    });
                }
                else if (primitive is Image2D)
                {
                    images.Add(new Image2DEntry()
                    {
                        Primitive = (Image2D)primitive,
                        Id        = data[idx].Id,
                        Layer     = data[idx].Layer
                    });
                }
                else if (primitive is Line2D)
                {
                    lines.Add(new Line2DEntry()
                    {
                        Primitive = (Line2D)primitive,
                        Id        = data[idx].Id,
                        Layer     = data[idx].Layer
                    });
                }
                else if (primitive is Point2D)
                {
                    points.Add(new Point2DEntry()
                    {
                        Primitive = (Point2D)primitive,
                        Id        = data[idx].Id,
                        Layer     = data[idx].Layer
                    });
                }
                else if (primitive is Polygon2D)
                {
                    polygons.Add(new Polygon2DEntry()
                    {
                        Primitive = (Polygon2D)primitive,
                        Id        = data[idx].Id,
                        Layer     = data[idx].Layer
                    });
                }
                else if (primitive is Text2D)
                {
                    texts.Add(new Text2DEntry()
                    {
                        Primitive = (Text2D)primitive,
                        Id        = data[idx].Id,
                        Layer     = data[idx].Layer
                    });
                }
                else if (primitive is LineText2D)
                {
                    lineTexts.Add(new LineText2DEntry()
                    {
                        Primitive = (LineText2D)primitive,
                        Id        = data[idx].Id,
                        Layer     = data[idx].Layer
                    });
                }
                else
                {
                    throw new Exception("Primitive type not supported by serializer.");
                }
            }

            collection.Icons     = icons.ToArray();
            collection.Images    = images.ToArray();
            collection.Lines     = lines.ToArray();
            collection.Points    = points.ToArray();
            collection.Polygons  = polygons.ToArray();
            collection.Texts     = texts.ToArray();
            collection.LineTexts = lineTexts.ToArray();

            // create the memory stream.
            var stream = new MemoryStream();

            typeModel.Serialize(stream, collection);
            if (!_compress)
            {
                return(stream.ToArray());
            }
            return(GZipStream.CompressBuffer(stream.ToArray()));
        }
コード例 #6
0
 /// <summary>
 /// Adds a new primitive with a given id and layer.
 /// </summary>
 /// <param name="layer"></param>
 /// <param name="id"></param>
 /// <param name="primitive"></param>
 internal void AddPrimitive(int layer, uint id, IScene2DPrimitive primitive)
 {
     primitive.Id = id;
     List<IScene2DPrimitive> layerList;
     if (!_primitives.TryGetValue(layer, out layerList))
     {
         layerList = new List<IScene2DPrimitive>();
         _primitives.Add(layer, layerList);
     }
     layerList.Add(primitive);
 }
コード例 #7
0
        public void TestCanvasJOSMSettingsCSS()
        {
            // create CSS.
            string css = "canvas { " +
                         "background-color: white; " +
                         "default-points: true; " + // adds default points for every node (color: black, size: 2).
                         "default-lines: true; " +  // adds default lines for every way (color: red, width: 1).
                         "} ";

            // create 'test' objects.
            Node node1 = new Node();

            node1.Id        = 1;
            node1.Latitude  = 1;
            node1.Longitude = 1;

            Node node2 = new Node();

            node2.Id        = 2;
            node2.Latitude  = 2;
            node2.Longitude = 2;

            Way way = new Way();

            way.Id    = 1;
            way.Nodes = new List <long>();
            way.Nodes.Add(1);
            way.Nodes.Add(2);

            // create the datasource.
            MemoryDataSource dataSource = new MemoryDataSource();

            dataSource.AddNode(node1);
            dataSource.AddNode(node2);
            dataSource.AddWay(way);

            // create the projection and scene objects.
            var           mercator = new WebMercator();
            Scene2DSimple scene    = new Scene2DSimple();

            // create the interpreter.
            MapCSSInterpreter interpreter = new MapCSSInterpreter(css,
                                                                  new MapCSSDictionaryImageSource());

            interpreter.Translate(scene, mercator, dataSource, node1);
            interpreter.Translate(scene, mercator, dataSource, node2);
            interpreter.Translate(scene, mercator, dataSource, way);

            // test the scene contents.
            Assert.AreEqual(3, scene.Count);
            Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.White).Value, scene.BackColor);

            // test the scene point 1.
            List <IScene2DPrimitive> primitives = scene.Get(0);

            Assert.IsNotNull(primitives);
            Assert.AreEqual(1, primitives.Count);
            IScene2DPrimitive primitive = primitives[0];

            Assert.IsNotNull(primitive);
            Assert.IsInstanceOf <Point2D>(primitive);
            Point2D point = primitive as Point2D;

            Assert.AreEqual(2, point.Size);
            Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.Black).Value, point.Color);
            Assert.AreEqual(mercator.LongitudeToX(1), point.X);
            Assert.AreEqual(mercator.LatitudeToY(1), point.Y);

            // test the scene point 2.
            primitives = scene.Get(1);
            Assert.IsNotNull(primitives);
            Assert.AreEqual(1, primitives.Count);
            primitive = primitives[0];
            Assert.IsNotNull(primitive);
            Assert.IsInstanceOf <Point2D>(primitive);
            point = primitive as Point2D;
            Assert.AreEqual(2, point.Size);
            Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.Black).Value, point.Color);
            Assert.AreEqual(mercator.LongitudeToX(2), point.X);
            Assert.AreEqual(mercator.LatitudeToY(2), point.Y);

            // test the scene line 2.
            primitives = scene.Get(2);
            Assert.IsNotNull(primitives);
            Assert.AreEqual(1, primitives.Count);
            primitive = primitives[0];
            Assert.IsNotNull(primitive);
            Assert.IsInstanceOf <Line2D>(primitive);
            Line2D line = primitive as Line2D;

            Assert.AreEqual(1, line.Width);
            Assert.AreEqual(SimpleColor.FromKnownColor(KnownColor.Red).Value, line.Color);
            Assert.IsNotNull(line.X);
            Assert.IsNotNull(line.Y);
            Assert.AreEqual(2, line.X.Length);
            Assert.AreEqual(2, line.Y.Length);
            Assert.AreEqual(mercator.LongitudeToX(1), line.X[0]);
            Assert.AreEqual(mercator.LatitudeToY(1), line.Y[0]);
            Assert.AreEqual(mercator.LongitudeToX(2), line.X[1]);
            Assert.AreEqual(mercator.LatitudeToY(2), line.Y[1]);
        }
コード例 #8
0
        /// <summary>
        /// Serializes the actual data.
        /// </summary>
        /// <param name="typeModel"></param>
        /// <param name="data"></param>
        /// <param name="boxes"></param>
        /// <returns></returns>
        protected override byte[] Serialize(RuntimeTypeModel typeModel, List <Scene2DEntry> data,
                                            List <BoxF2D> boxes)
        {
            var icons     = new List <Icon2DEntry>();
            var images    = new List <Image2DEntry>();
            var lines     = new List <Line2DEntry>();
            var points    = new List <Point2DEntry>();
            var polygons  = new List <Polygon2DEntry>();
            var texts     = new List <Text2DEntry>();
            var lineTexts = new List <LineText2DEntry>();

            // build the collection object.
            var collection = new PrimitivesCollection();

            for (int idx = 0; idx < data.Count; idx++)
            {
                IScene2DPrimitive primitive = data[idx].Scene2DPrimitive;
                if (primitive is Icon2D)
                {
                    Icon2D icon = primitive as Icon2D;
                    icons.Add(Icon2DEntry.From(data[idx].Id, icon, _styleIndex.AddStyle(icon, data[idx].Layer)));
                }
                else if (primitive is Image2D)
                {
                    Image2D image = primitive as Image2D;
                    images.Add(Image2DEntry.From(data[idx].Id, image, _styleIndex.AddStyle(image, data[idx].Layer)));
                }
                else if (primitive is Line2D)
                {
                    Line2D line = primitive as Line2D;
                    lines.Add(Line2DEntry.From(data[idx].Id, line, _styleIndex.AddStyle(line, data[idx].Layer)));
                }
                else if (primitive is Point2D)
                {
                    Point2D point = primitive as Point2D;
                    points.Add(Point2DEntry.From(data[idx].Id, point, _styleIndex.AddStyle(point, data[idx].Layer)));
                }
                else if (primitive is Polygon2D)
                {
                    Polygon2D polygon = primitive as Polygon2D;
                    polygons.Add(Polygon2DEntry.From(data[idx].Id, polygon, _styleIndex.AddStyle(polygon, data[idx].Layer)));
                }
                else if (primitive is Text2D)
                {
                    Text2D text = primitive as Text2D;
                    texts.Add(Text2DEntry.From(data[idx].Id, text, _styleIndex.AddStyle(text, data[idx].Layer)));
                }
                else if (primitive is LineText2D)
                {
                    LineText2D lineText = primitive as LineText2D;
                    lineTexts.Add(LineText2DEntry.From(data[idx].Id, lineText, _styleIndex.AddStyle(lineText, data[idx].Layer)));
                }
                else
                {
                    throw new Exception("Primitive type not supported by serializer.");
                }
            }

            collection.Icons     = icons.ToArray();
            collection.Images    = images.ToArray();
            collection.Lines     = lines.ToArray();
            collection.Points    = points.ToArray();
            collection.Polygons  = polygons.ToArray();
            collection.Texts     = texts.ToArray();
            collection.LineTexts = lineTexts.ToArray();

            // create the memory stream.
            var stream = new MemoryStream();

            typeModel.Serialize(stream, collection);
            if (!_compress)
            {
                return(stream.ToArray());
            }
            return(GZipStream.CompressBuffer(stream.ToArray()));
        }