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