コード例 #1
0
        public async Task InsertLayerAsync_InsertsLayerCorrectly()
        {
            await DatabaseAccessService.DeleteDatabase();

            await DatabaseAccessService.CreateDatabaseAsync();

            var insertedLayer = new MapLayerItem()
            {
                Id = 1234124, Name = "Test Layer"
            };

            await DatabaseAccessService.InsertLayerAsync(insertedLayer);

            using (var cnn = await DatabaseAccessService.GetDbConnectionAsync())
            {
                cnn.Open();

                var queriedLayerList = (cnn.Query <MapLayerItem>($"SELECT * FROM Layer WHERE Id={insertedLayer.Id}")).ToList();
                Assert.AreEqual(1, queriedLayerList.Count, $@"Database query for inserted layer returned list with number of entries
                                                            different than one.
                                                            Expected: 1,
                                                            Actual: {queriedLayerList.Count}.");

                var queriedLayer = queriedLayerList.First();

                Assert.IsNotNull(queriedLayer, "Database query for inserted layer returned null.");
                Assert.AreEqual(insertedLayer.Id, queriedLayer.Id, $@"Database query for inserted layer returned layer with differrent Id.
                                                                    Expected: {insertedLayer.Id},
                                                                    Actual: {queriedLayer.Id}.");
                Assert.AreEqual(insertedLayer.Name, queriedLayer.Name, $@"Database query for inserted layer returned layer with different Name.
                                                                        Expected: {insertedLayer.Name},
                                                                        Actual: {queriedLayer.Name}.");
            }
        }
コード例 #2
0
        public override IExplorerNode Creat(object sender, Models.Generic.IExplorerItem item_attribute)
        {
            var model     = sender as IBasicModel;
            var root_menu = ContextMenuFactory.Creat(item_attribute);

            root_mapdata = new Node("Map Coverage")
            {
                Image = Resources.DataFrame16,
                Tag   = root_menu
            };

            model.Project.FeatureCoverages.CollectionChanged     += LayerParameters_CollectionChanged;
            model.Project.RasterLayerCoverages.CollectionChanged += LayerParameters_CollectionChanged;
            foreach (var lp in model.Project.FeatureCoverages)
            {
                MapLayerItem layer_item = new MapLayerItem();
                layer_item.Coverage = lp;
                var creator    = NodeFactory.Select(layer_item);
                var layer_node = creator.Creat(model, layer_item) as Node;
                root_mapdata.Nodes.Add(layer_node);
            }
            foreach (var lp in model.Project.RasterLayerCoverages)
            {
                MapLayerItem layer_item = new MapLayerItem();
                layer_item.Coverage = lp;
                var creator    = NodeFactory.Select(layer_item);
                var layer_node = creator.Creat(model, layer_item) as Node;
                root_mapdata.Nodes.Add(layer_node);
            }

            return(root_mapdata);
        }
コード例 #3
0
        private void UpdateMapLayerItems()
        {
            ObservableCollection <LayerItemViewModel> mapLayerItems = new ObservableCollection <LayerItemViewModel>();

            foreach (Layer layer in GetLayers(LayerIDs, Map))
            {
                if (layer.ShowLegend)
                {
                    MapLayerItem mapLayerItem = FindMapLayerItem(layer);

                    if (mapLayerItem == null)                     // else reuse existing map layer item to avoid query again the legend and to keep the current state (selected, expansed, ..)
                    {
                        // Create a new map layer item
                        mapLayerItem = new MapLayerItem(layer)
                        {
                            LegendTree = this, LayerItemsOptions = LegendTree.LayerItemsOptions
                        };
                        mapLayerItem.Refresh();
                    }

                    mapLayerItems.Add(mapLayerItem);
                }
            }
            LayerItems = mapLayerItems;
        }
コード例 #4
0
        public async Task GetLayersAsync_ReturnLayerListCorrectly()
        {
            await DatabaseAccessService.DeleteDatabase();

            await DatabaseAccessService.CreateDatabaseAsync();

            var insertedLayer = new MapLayerItem()
            {
                Id = 1234124, Name = "Test Layer"
            };

            await DatabaseAccessService.InsertLayerAsync(insertedLayer);

            var returnedList = await DatabaseAccessService.GetLayersAsync();

            Assert.IsNotNull(returnedList, "Returned object is null");
            Assert.AreEqual(1, returnedList.Count, $@"Returned list count is wrong.
                                                    Expected: {1},
                                                    Actual: {returnedList.Count}.");
            var returnedLayer = returnedList.First();

            Assert.IsNotNull(returnedLayer, "Database query for inserted layer returned null.");
            Assert.AreEqual(insertedLayer.Id, returnedLayer.Id, $@"Database query for inserted layer returned layer with differrent Id.
                                                                    Expected: {insertedLayer.Id},
                                                                    Actual: {returnedLayer.Id}.");
            Assert.AreEqual(insertedLayer.Name, returnedLayer.Name, $@"Database query for inserted layer returned layer with different Name.
                                                                        Expected: {insertedLayer.Name},
                                                                        Actual: {returnedLayer.Name}.");
        }
コード例 #5
0
        public async Task DeleteMapElementAsync_DeletesMapElementCorrectly()
        {
            var taskSource = new TaskCompletionSource <object>();
            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
                CoreDispatcherPriority.Normal, async() =>
            {
                try
                {
                    await DatabaseAccessService.DeleteDatabase();
                    await DatabaseAccessService.CreateDatabaseAsync();

                    var insertedLayer = new MapLayerItem()
                    {
                        Id = 1234124, Name = "Test Layer"
                    };
                    var path = new List <BasicGeoposition>()
                    {
                        new BasicGeoposition()
                        {
                            Latitude = 1, Longitude = 2
                        },
                        new BasicGeoposition()
                        {
                            Latitude = 3, Longitude = 4
                        },
                        new BasicGeoposition()
                        {
                            Latitude = 6, Longitude = 2
                        }
                    };

                    var insertedPolygon = MapElementItemFactoryService.GetMapPolygonItem("Test polygon", path,
                                                                                         insertedLayer, Color.FromArgb(0, 0, 0, 0), Color.FromArgb(0, 0, 0, 0));

                    await DatabaseAccessService.InsertLayerAsync(insertedLayer);
                    await DatabaseAccessService.InsertMapPolygonItemAsync(insertedPolygon);
                    await DatabaseAccessService.DeleteMapElementAsync(insertedPolygon.Id);

                    using (var cnn = await DatabaseAccessService.GetDbConnectionAsync())
                    {
                        cnn.Open();

                        var queriedMapElementList = await DatabaseAccessService.GetMapElementItemsAsync();
                        Assert.AreEqual(0, queriedMapElementList.Count, $@"Database query for inserted MapElement
                                                            returned list with number of entries different than zero.
                                                            Expected: 0,
                                                            Actual: {queriedMapElementList.Count}.");
                    }

                    taskSource.SetResult(null);
                }
                catch (Exception e)
                {
                    taskSource.SetException(e);
                }
            });

            await taskSource.Task;
        }
コード例 #6
0
 /// <summary>
 /// Initializes a new instance of the AddButtonClickedEventArgs class.
 /// </summary>
 /// <param name="name">Name of the added map element.</param>
 /// <param name="border">Border (stroke) color of the added map element.</param>
 /// <param name="fill">Fill color of the added map element.</param>
 /// <param name="layer">Layer of the added map element.</param>
 /// <param name="width">Width of the added map element.</param>
 public AddButtonClickedEventArgs(string name, Color border, Color fill, MapLayerItem layer, double width)
 {
     Name        = name;
     BorderColor = border;
     FillColor   = fill;
     Layer       = layer;
     Width       = width;
 }
コード例 #7
0
        /// <summary>
        /// Inserts a new layer into the database
        /// </summary>
        /// <param name="layer">Object containing porperties to be inserted into the database.</param>
        public static async Task InsertLayerAsync(MapLayerItem layer)
        {
            using (var cnn = await GetDbConnectionAsync())
            {
                cnn.Open();

                await cnn.ExecuteScalarAsync <int>(
                    @"INSERT INTO Layer (Id, Name) VALUES (@Id, @Name)",
                    layer);
            }
        }
コード例 #8
0
    public void FreshMapGrid()
    {
        mapGird.Clear();
        int index = layers.IndexOf(MapEditorSortLayer.Floor1);

        if (index != -1)
        {
            MapLayerItem mapLayerItem = layerItems[index];
            for (int i = 0; i < mapLayerItem.items.Count; i++)
            {
                mapGird.Add(mapLayerItem.posList[i], mapLayerItem.items[i]);
            }
        }
    }
コード例 #9
0
        /// <summary>
        /// Creates a new instance of MapPolylineItem class.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        /// <param name="width"></param>
        /// <param name="length"></param>
        /// <param name="polygonRepresentationPath"></param>
        /// <param name="path"></param>
        /// <param name="layer"></param>
        /// <param name="strokeColor"></param>
        /// <returns></returns>
        public static MapPolylineItem GetMapPolylineItem(int id,
                                                         string name,
                                                         double width,
                                                         double length,
                                                         IReadOnlyList <BasicGeoposition> polygonRepresentationPath,
                                                         IReadOnlyList <BasicGeoposition> path,
                                                         MapLayerItem layer,
                                                         Color strokeColor)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Name cannot be empty", nameof(name));
            }

            if (polygonRepresentationPath is null)
            {
                throw new ArgumentNullException(nameof(polygonRepresentationPath));
            }

            if (path is null)
            {
                throw new ArgumentNullException(nameof(path));
            }

            if (layer is null)
            {
                throw new ArgumentNullException(nameof(layer));
            }

            MapPolylineItem result = new MapPolylineItem()
            {
                Id          = id,
                ParentLayer = layer,
                Name        = name,
                Length      = length,
                Width       = width,
                Path        = path
            };

            MapPolygon element = new MapPolygon()
            {
                FillColor   = strokeColor,
                StrokeColor = strokeColor,
                ZIndex      = layer.Id
            };

            element.Paths.Add(new Geopath(polygonRepresentationPath));
            result.Element = element;
            return(result);
        }
コード例 #10
0
        /// <summary>
        /// Creates a new instance of MapPolylineItem class. Calculates incomplete data.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="path"></param>
        /// <param name="layer"></param>
        /// <param name="strokeColor"></param>
        /// <param name="width"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static MapPolylineItem GetMapPolylineItem(string name, IReadOnlyList <BasicGeoposition> path,
                                                         MapLayerItem layer, Color strokeColor, double width,
                                                         int id = -1)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Name cannot be empty", nameof(name));
            }

            if (path is null)
            {
                throw new ArgumentNullException(nameof(path));
            }

            if (layer is null)
            {
                throw new ArgumentNullException(nameof(layer));
            }

            List <BasicGeoposition> left  = new List <BasicGeoposition>();
            List <BasicGeoposition> right = new List <BasicGeoposition>();

            for (int i = 0; i < path.Count - 1; i++)
            {
                BasicGeoposition z = new BasicGeoposition()
                {
                    Altitude = 1
                };
                BasicGeoposition vec  = GeoMath.Difference(path[i + 1], path[i]);
                BasicGeoposition prod = GeoMath.CrossProduct(vec, z);
                BasicGeoposition norm = GeoMath.Normalize(prod);
                BasicGeoposition tim  = GeoMath.TimesScalar(norm, width);
                right.Add(GeoMath.Sum(path[i], tim));
                right.Add(GeoMath.Sum(path[i + 1], tim));
                BasicGeoposition neg = GeoMath.TimesScalar(tim, -1);
                left.Insert(0, GeoMath.Sum(path[i], neg));
                left.Insert(0, GeoMath.Sum(path[i + 1], neg));
            }

            left.InsertRange(left.Count, right);
            return(GetMapPolylineItem(id,
                                      name,
                                      width,
                                      GeoMath.PolylineLength(path),
                                      left,
                                      path,
                                      layer,
                                      strokeColor));
        }
コード例 #11
0
ファイル: MapEditor.cs プロジェクト: ccylovemm/Discovery
 void ClearStoneWallAndEdge()
 {
     for (int i = 0; i < currMapScene.layerItems.Count; i++)
     {
         MapLayerItem mapLayerItem = currMapScene.layerItems[i];
         for (int j = mapLayerItem.items.Count - 1; j >= 0; j--)
         {
             if (mapLayerItem.items[j].itemType == MapEditorItemType.StoneWall)
             {
                 mapLayerItem.items[j] = mapLayerItem.items[j].replaceItem;
             }
             else if (mapLayerItem.items[j].itemType == MapEditorItemType.Edge)
             {
                 mapLayerItem.items.RemoveAt(j);
                 mapLayerItem.posList.RemoveAt(j);
             }
         }
     }
 }
コード例 #12
0
        public void GetMapIconItem_ConstructsMapIconItemCorrectly()
        {
            var expectName     = "TestName";
            var expectPosition = new BasicGeoposition()
            {
                Latitude = 1, Longitude = 2
            };
            var expectLayer = new MapLayerItem()
            {
                Id = 3, Name = "TestLayer"
            };
            int expectId = 4;

            var icon = MapElementItemFactoryService.GetMapIconItem(expectName, expectPosition, expectLayer, expectId);

            Assert.AreEqual(expectName, icon.Name);
            Assert.AreEqual(expectPosition, icon.GetPosition());
            Assert.AreEqual(expectLayer, icon.ParentLayer);
            Assert.AreEqual(expectId, icon.Id);
        }
コード例 #13
0
 private void LayerParameters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
 {
     if (e.Action == NotifyCollectionChangedAction.Add)
     {
         var          lp         = e.NewItems[0] as PackageCoverage;
         MapLayerItem layer_item = new MapLayerItem();
         layer_item.Coverage = lp;
         var creator    = NodeFactory.Select(layer_item);
         var layer_node = creator.Creat(sender, layer_item) as Node;
         root_mapdata.Nodes.Add(layer_node);
     }
     else if (e.Action == NotifyCollectionChangedAction.Remove)
     {
         var lp   = e.OldItems[0];// as IFeatureLayerMapping;
         var node = from nn in root_mapdata.Nodes where (nn.Tag as MapLayerContextMenu).Coverage.Equals(lp) select nn;
         if (node.Count() == 1)
         {
             root_mapdata.Nodes.Remove(node.First());
         }
     }
 }
コード例 #14
0
        public void GetMapPolygonItem_ConstructMapPolygonItemCorrectly()
        {
            var expectName = "TestName";
            var expectPath = new List <BasicGeoposition>()
            {
                new BasicGeoposition()
                {
                    Latitude = 1, Longitude = 2
                },
                new BasicGeoposition()
                {
                    Latitude = 2, Longitude = 3
                },
                new BasicGeoposition()
                {
                    Latitude = 3, Longitude = 4
                }
            };
            var expectLayer = new MapLayerItem()
            {
                Id = 3, Name = "TestLayer"
            };
            int expectId          = 5;
            var expectStrokeColor = Color.FromArgb(100, 100, 100, 100);
            var expectFillColor   = Color.FromArgb(2, 2, 2, 2);

            var polygon = MapElementItemFactoryService.GetMapPolygonItem(
                expectName, expectPath, expectLayer, expectStrokeColor, expectFillColor, expectId);

            Assert.AreEqual(expectName, polygon.Name);
            Assert.AreEqual(expectLayer, polygon.ParentLayer);
            Assert.AreEqual(expectId, polygon.Id);
            Assert.AreEqual(expectStrokeColor, polygon.StrokeColor);
            Assert.AreEqual(expectFillColor, polygon.FillColor);
            Assert.IsTrue(expectPath.SequenceEqual(polygon.Path));
        }
		private void UpdateMapLayerItems()
		{
			ObservableCollection<LayerItemViewModel> mapLayerItems = new ObservableCollection<LayerItemViewModel>();

			foreach (Layer layer in GetLayers(LayerIDs, Map))
			{
				MapLayerItem mapLayerItem = FindMapLayerItem(layer);

				if (mapLayerItem == null) // else reuse existing map layer item to avoid query again the legend and to keep the current state (selected, expansed, ..)
				{
					// Create a new map layer item
					mapLayerItem = new MapLayerItem(layer) {LegendTree = this};
					mapLayerItem.Refresh();
				}

				mapLayerItems.Add(mapLayerItem);
			}
			LayerItems = mapLayerItems;
		}
コード例 #16
0
        /// <summary>
        /// Creates a new instance of MapIconItem class.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="position"></param>
        /// <param name="layer"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static MapIconItem GetMapIconItem(string name, BasicGeoposition position, MapLayerItem layer, int id = -1)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Name cannot be empty", nameof(name));
            }

            if (layer is null)
            {
                throw new ArgumentNullException(nameof(layer));
            }

            return(new MapIconItem()
            {
                Element = new MapIcon()
                {
                    NormalizedAnchorPoint = new Point(0.5, 1.0),
                    Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/map.png")),
                    Location = new Geopoint(position),
                    Title = name,
                    ZIndex = layer.Id
                },
                Name = name,
                ParentLayer = layer,
                Id = id
            });
        }
コード例 #17
0
        /// <summary>
        /// Creates a new instance of MapPolygonItem class.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="path"></param>
        /// <param name="layer"></param>
        /// <param name="strokeColor"></param>
        /// <param name="fillColor"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static MapPolygonItem GetMapPolygonItem(string name, IReadOnlyList <BasicGeoposition> path, MapLayerItem layer, Color strokeColor, Color fillColor, int id = -1)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Name cannot be empty", nameof(name));
            }

            if (path is null)
            {
                throw new ArgumentNullException(nameof(path));
            }

            if (layer is null)
            {
                throw new ArgumentNullException(nameof(layer));
            }

            var polygon = new MapPolygon()
            {
                FillColor   = fillColor,
                StrokeColor = strokeColor,
                ZIndex      = layer.Id
            };

            polygon.Paths.Add(new Geopath(path));

            return(new MapPolygonItem()
            {
                Id = id,
                Name = name,
                ParentLayer = layer,
                Element = polygon,
                BorderLength = GeoMath.PolygonBorderLength(path)
            });
        }
コード例 #18
0
    public void UpdateMap()
    {
        rects.Clear();
        m_triangles.Clear();
        m_uv.Clear();
        posList.Clear();
        m_vertices.Clear();
        offsetList.Clear();

        int count = generatePrefabItems.Count;

        for (int i = 0; i < count; i++)
        {
            GameObject.DestroyImmediate(generatePrefabItems[i]);
        }
        generatePrefabItems.Clear();

        for (int i = 0; i < 3; i++)
        {
            int index = layers.IndexOf((MapEditorSortLayer)i);
            if (index != -1)
            {
                MapLayerItem mapLayerItem = layerItems[index];
                count = mapLayerItem.items.Count;
                for (int j = 0; j < count; j++)
                {
                    int x = mapLayerItem.posList[j] / 10000;
                    int y = mapLayerItem.posList[j] % 10000;
                    if (mapLayerItem.items[j].isPrefab)
                    {
                        GameObject go = GameObject.Instantiate(mapLayerItem.items[j].gameObject);
                        go.transform.position = MapManager.GetPos(x + offsetX, y + offsetY);
                        generatePrefabItems.Add(go);
                    }
                    else
                    {
                        List <MapSprite> list = new List <MapSprite>();
                        if (mapLayerItem.items[j].isNine)
                        {
                            list = GetSpriteList(x, y, mapGird);
                        }
                        else
                        {
                            list = mapLayerItem.items[j].normalList;
                        }
                        int       random    = Random.Range(0, 10000);
                        MapSprite mapSprite = list.Where(s => random < s.sRate).FirstOrDefault();
                        rects.Add(mapSprite.sprite.rect);
                        posList.Add(new Vector2((x + offsetX) * MapManager.textSize + MapManager.textSize / 2.0f, (y + offsetY) * MapManager.textSize + MapManager.textSize / 2.0f));
                        offsetList.Add(new Vector2(mapSprite.offsetX, mapSprite.offsetY) * MapManager.textSize * 0.05f);
                    }
                }
            }
        }
        if (Application.isPlaying)
        {
            CombineMesh();
        }
        else
        {
#if UNITY_EDITOR
            CombineMeshFromEditor();
#endif
        }
    }
コード例 #19
0
        public async Task GetMapElementItemsAsync_ReturnsMapElementListCorrectly()
        {
            var taskSource = new TaskCompletionSource <object>();
            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
                CoreDispatcherPriority.Normal, async() =>
            {
                try
                {
                    await DatabaseAccessService.DeleteDatabase();
                    await DatabaseAccessService.CreateDatabaseAsync();

                    var insertedLayer = new MapLayerItem()
                    {
                        Id = 1234124, Name = "Test Layer"
                    };
                    var path = new List <BasicGeoposition>()
                    {
                        new BasicGeoposition()
                        {
                            Latitude = 1, Longitude = 2
                        },
                        new BasicGeoposition()
                        {
                            Latitude = 3, Longitude = 4
                        },
                        new BasicGeoposition()
                        {
                            Latitude = 6, Longitude = 2
                        }
                    };

                    var insertedPolygon = MapElementItemFactoryService.GetMapPolygonItem("Test polygon", path,
                                                                                         insertedLayer, Color.FromArgb(0, 0, 0, 0), Color.FromArgb(0, 0, 0, 0));

                    await DatabaseAccessService.InsertLayerAsync(insertedLayer);
                    await DatabaseAccessService.InsertMapPolygonItemAsync(insertedPolygon);

                    using (var cnn = await DatabaseAccessService.GetDbConnectionAsync())
                    {
                        cnn.Open();

                        var queriedMapElementList = await DatabaseAccessService.GetMapElementItemsAsync();
                        Assert.AreEqual(1, queriedMapElementList.Count, $@"Database query for inserted MapElement
                                                            returned list with number of entries different than one.
                                                            Expected: 1,
                                                            Actual: {queriedMapElementList.Count}.");

                        var queriedMapElement = queriedMapElementList.First() as MapPolygonItem;

                        Assert.IsNotNull(queriedMapElement, "Map element is null.");
                        Assert.AreEqual(insertedPolygon.Id, queriedMapElement.Id, $@"Method returned 
                                                                    MapElement with differrent Id.
                                                                    Expected: {insertedPolygon.Id},
                                                                    Actual: {queriedMapElement.Id}.");
                        Assert.AreEqual(insertedPolygon.Name, queriedMapElement.Name, $@"Method returned 
                                                                        MapElement with different Name.
                                                                        Expected: {insertedPolygon.Name},
                                                                        Actual: {queriedMapElement.Name}.");
                        Assert.AreEqual(insertedLayer.Id, queriedMapElement.ParentLayer.Id, $@"Method returned
                                                                                MapElement with different parent layer.
                                                                                Expected: {insertedLayer.Id},
                                                                                Actual: {queriedMapElement.ParentLayer.Id}.");
                        Assert.AreEqual(insertedPolygon.FillColor, queriedMapElement.FillColor, $@"Method returned
                                                                                MapElement with different fill color.
                                                                                Expected: {insertedPolygon.FillColor},
                                                                                Actual: {queriedMapElement.FillColor}.");
                        Assert.AreEqual(insertedPolygon.StrokeColor, queriedMapElement.StrokeColor, $@"Method returned
                                                                                MapElement with different stroke color.
                                                                                Expected: {insertedPolygon.StrokeColor},
                                                                                Actual: {queriedMapElement.StrokeColor}.");
                    }

                    taskSource.SetResult(null);
                }
                catch (Exception e)
                {
                    taskSource.SetException(e);
                }
            });

            await taskSource.Task;
        }
コード例 #20
0
        public async Task InsertMapPolylineItemAsync_InsertsMapElementCorrectly()
        {
            var taskSource = new TaskCompletionSource <object>();
            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
                CoreDispatcherPriority.Normal, async() =>
            {
                try
                {
                    await DatabaseAccessService.DeleteDatabase();
                    await DatabaseAccessService.CreateDatabaseAsync();

                    var insertedLayer = new MapLayerItem()
                    {
                        Id = 1234124, Name = "Test Layer"
                    };
                    var path = new List <BasicGeoposition>()
                    {
                        new BasicGeoposition()
                        {
                            Latitude = 1, Longitude = 2
                        },
                        new BasicGeoposition()
                        {
                            Latitude = 3, Longitude = 4
                        }
                    };

                    var insertedPolyline = MapElementItemFactoryService.GetMapPolylineItem(
                        "Test polyline", path, insertedLayer, Color.FromArgb(0, 0, 0, 0), 0.00001);

                    await DatabaseAccessService.InsertLayerAsync(insertedLayer);
                    await DatabaseAccessService.InsertMapPolylineItemAsync(insertedPolyline);

                    using (var cnn = await DatabaseAccessService.GetDbConnectionAsync())
                    {
                        cnn.Open();

                        var queriedMapElementList = (cnn.Query <dynamic>($"SELECT * FROM MapElement WHERE Id={insertedPolyline.Id}")).ToList();
                        Assert.AreEqual(1, queriedMapElementList.Count, $@"Database query for inserted MapElement returned list with number of entries
                                                            different than one.
                                                            Expected: 1,
                                                            Actual: {queriedMapElementList.Count}.");

                        var queriedMapElement = queriedMapElementList.First();

                        Assert.IsNotNull(queriedMapElement, "Database query for inserted MapElement returned null.");
                        Assert.AreEqual(insertedPolyline.Id, queriedMapElement.Id, $@"Database query for inserted MapElement returned 
                                                                    MapElement with differrent Id.
                                                                    Expected: {insertedPolyline.Id},
                                                                    Actual: {queriedMapElement.Id}.");
                        Assert.AreEqual(insertedPolyline.Name, queriedMapElement.Name, $@"Database query for inserted MapElement returned 
                                                                        MapElement with different Name.
                                                                        Expected: {insertedPolyline.Name},
                                                                        Actual: {queriedMapElement.Name}.");
                        Assert.AreEqual(insertedLayer.Id, queriedMapElement.Layer_Id, $@"Database query for inserted MapElement returned
                                                                                MapElement with different parent layer.
                                                                                Expected: {insertedLayer.Id},
                                                                                Actual: {queriedMapElement.Layer_id}.");
                        Assert.AreEqual(insertedPolyline.Width, queriedMapElement.Width, $@"Database query for inserted MapElement returned
                                                                                MapElement with different width.
                                                                                Expected: {insertedPolyline.Width},
                                                                                Actual: {queriedMapElement.Width}.");
                    }

                    taskSource.SetResult(null);
                }
                catch (Exception e)
                {
                    taskSource.SetException(e);
                }
            });

            await taskSource.Task;
        }
コード例 #21
0
        public async Task InsertMapIconItemAsync_InsertsElementCorrectly()
        {
            var taskSource = new TaskCompletionSource <object>();

            // using dispatcher to run the test in ui thread.
            // using UITestMethod attribute was umpossible because it
            // doesn't support async
            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
                CoreDispatcherPriority.Normal, async() =>
            {
                try
                {
                    await DatabaseAccessService.DeleteDatabase();
                    await DatabaseAccessService.CreateDatabaseAsync();


                    var insertedLayer = new MapLayerItem()
                    {
                        Id = 1234124, Name = "Test Layer"
                    };
                    var insertedIcon = MapElementItemFactoryService.GetMapIconItem(
                        "Test Icon",
                        new BasicGeoposition()
                    {
                        Latitude = 1, Longitude = 2
                    },
                        insertedLayer,
                        123);

                    await DatabaseAccessService.InsertLayerAsync(insertedLayer);
                    await DatabaseAccessService.InsertMapIconItemAsync(insertedIcon);

                    using (var cnn = await DatabaseAccessService.GetDbConnectionAsync())
                    {
                        cnn.Open();

                        var queriedMapElementList = (cnn.Query <dynamic>($"SELECT * FROM MapElement WHERE Id={insertedIcon.Id}")).ToList();
                        Assert.AreEqual(1, queriedMapElementList.Count, $@"Database query for inserted MapElement returned list with number of entries
                                                            different than one.
                                                            Expected: 1,
                                                            Actual: {queriedMapElementList.Count}.");

                        var queriedMapElement = queriedMapElementList.First();

                        Assert.IsNotNull(queriedMapElement, "Database query for inserted MapElement returned null.");
                        Assert.AreEqual(insertedIcon.Id, queriedMapElement.Id, $@"Database query for inserted MapElement returned 
                                                                    MapElement with differrent Id.
                                                                    Expected: {insertedIcon.Id},
                                                                    Actual: {queriedMapElement.Id}.");
                        Assert.AreEqual(insertedIcon.Name, queriedMapElement.Name, $@"Database query for inserted MapElement returned 
                                                                        MapElement with different Name.
                                                                        Expected: {insertedIcon.Name},
                                                                        Actual: {queriedMapElement.Name}.");
                        Assert.AreEqual(insertedLayer.Id, queriedMapElement.Layer_Id, $@"Database query for inserted MapElement returned
                                                                                MapElement with different parent layer.
                                                                                Expected: {insertedLayer.Id},
                                                                                Actual: {queriedMapElement.Layer_id}.");
                    }
                    taskSource.SetResult(null);
                }
                catch (Exception e)
                {
                    taskSource.SetException(e);
                }
            });

            await taskSource.Task;
        }
コード例 #22
0
ファイル: MapPage.xaml.cs プロジェクト: MKuzemczak/MapApp
        private async Task CreateAndAddMapIconAsync(BasicGeoposition position, string title, MapLayerItem layer)
        {
            var pos = new BasicGeoposition()
            {
                Longitude = position.Longitude, Latitude = position.Latitude
            };
            var newItem = MapElementItemFactoryService.GetMapIconItem(title, pos, layer);

            AddMapElementItem(newItem);
            await DatabaseAccessService.InsertMapIconItemAsync(newItem);
        }
コード例 #23
0
ファイル: MapEditor.cs プロジェクト: ccylovemm/Discovery
    void GenerateStoneWallAndEdge()
    {
        int          index        = currMapScene.layers.IndexOf(MapEditorSortLayer.Floor1);
        MapLayerItem mapLayerItem = currMapScene.layerItems[index];

        for (int i = 0; i < mapLayerItem.items.Count; i++)
        {
            if (mapLayerItem.items[i].itemType == MapEditorItemType.Wall)
            {
                int x = mapLayerItem.posList[i] / 10000;
                int y = mapLayerItem.posList[i] % 10000;
                if (y == 0)
                {
                    continue;
                }
                index = mapLayerItem.posList.IndexOf(x * 10000 + y - 1);
                if (index != -1 && (mapLayerItem.items[index].itemType != MapEditorItemType.Wall && mapLayerItem.items[index].itemType != MapEditorItemType.StoneWall))
                {
                    mapLayerItem.items[i] = mapLayerItem.items[i].replaceItem;
                }
            }
        }

        for (int i = 0; i < mapLayerItem.items.Count; i++)
        {
            if (mapLayerItem.items[i].itemType != MapEditorItemType.Wall && mapLayerItem.items[i].itemType != MapEditorItemType.StoneWall)
            {
                int x = mapLayerItem.posList[i] / 10000;
                int y = mapLayerItem.posList[i] % 10000;

                int index1 = mapLayerItem.posList.IndexOf(x * 10000 + y + 1);
                int index2 = mapLayerItem.posList.IndexOf((x - 1) * 10000 + y);
                int index3 = mapLayerItem.posList.IndexOf((x + 1) * 10000 + y);

                bool wall1 = index1 != -1 && (mapLayerItem.items[index1].itemType == MapEditorItemType.Wall || mapLayerItem.items[index1].itemType == MapEditorItemType.StoneWall);
                bool wall2 = index2 != -1 && (mapLayerItem.items[index2].itemType == MapEditorItemType.Wall || mapLayerItem.items[index2].itemType == MapEditorItemType.StoneWall);
                bool wall3 = index3 != -1 && (mapLayerItem.items[index3].itemType == MapEditorItemType.Wall || mapLayerItem.items[index3].itemType == MapEditorItemType.StoneWall);

                MapResourceItem edge = null;
                if (wall1 && wall2 && wall3)
                {
                    edge = mapLayerItem.items[index1].replaceEdgeSingleUp;
                }
                else if (wall1 && wall2 && !wall3)
                {
                    edge = mapLayerItem.items[index1].replaceEdgeLeftUp;
                }
                else if (wall1 && !wall2 && wall3)
                {
                    edge = mapLayerItem.items[index1].replaceEdgeRightUp;
                }
                else if (wall1 && !wall2 && !wall3)
                {
                    edge = mapLayerItem.items[index1].replaceEdgeUp;
                }
                else if (!wall1 && wall2 && wall3)
                {
                    edge = mapLayerItem.items[index2].replaceEdgeVer;
                }
                else if (!wall1 && wall2 && !wall3)
                {
                    edge = mapLayerItem.items[index2].replaceEdgeLeft;
                }
                else if (!wall1 && !wall2 && wall3)
                {
                    edge = mapLayerItem.items[index3].replaceEdgeRight;
                }
                else
                {
                    edge = null;
                }
                if (edge != null)
                {
                    index = currMapScene.layers.IndexOf(MapEditorSortLayer.Floor2);
                    MapLayerItem mapLayerEdgeItem = null;
                    if (index == -1)
                    {
                        currMapScene.layers.Add(MapEditorSortLayer.Floor2);
                        mapLayerEdgeItem = new MapLayerItem();
                        currMapScene.layerItems.Add(mapLayerEdgeItem);
                    }
                    else
                    {
                        mapLayerEdgeItem = currMapScene.layerItems[index];
                    }
                    index = mapLayerEdgeItem.posList.IndexOf(x * 10000 + y);
                    if (index == -1)
                    {
                        mapLayerEdgeItem.posList.Add(x * 10000 + y);
                        mapLayerEdgeItem.items.Add(edge);
                    }
                    else
                    {
                        mapLayerEdgeItem.items[index] = edge;
                    }
                }
            }
        }
    }
コード例 #24
0
ファイル: MapPage.xaml.cs プロジェクト: MKuzemczak/MapApp
        private async Task CreateAndAddMapPolygonAsync(IReadOnlyList <BasicGeoposition> path, Color fillColor, Color strokeColor, string name, MapLayerItem layer)
        {
            var newItem = MapElementItemFactoryService.GetMapPolygonItem(name, path, layer, strokeColor, fillColor);

            AddMapElementItem(newItem);
            await DatabaseAccessService.InsertMapPolygonItemAsync(newItem);
        }