/// <summary> /// /// </summary> public void Initialise(ILayer baseLayer) { #region Construct View Port , Add Transforms, Scale Viewport3D viewport = ViewPort; _transform = new Transform3DGroup(); _transform.Children.Add(_scale); _rotationTranform = new RotateTransform3D(_rotation); _transform.Children.Add(_rotationTranform); AmbientLight _ambLight = new AmbientLight(System.Windows.Media.Brushes.White.Color); var visuald = new ModelVisual3D(); Model3DGroup M3dG = new Model3DGroup(); M3dG.Children.Add(_ambLight); visuald.Content = M3dG; viewport.Children.Add(visuald); #endregion BaseLayer = baseLayer; this.RootTile = new GlobeTile(0, 0, 0, visuald); var root = this.RootTile; this.RootTile.zoomIn(); //Map Viewport as Event Source to Map Event Handlers. EventSource = viewport; //Add All Necessary Transforms to view port Camera. viewport.Camera.Transform = _transform; #region Populate Initial Layer [Based on MS Bing Map] var initialKey = "032010110132012031";//initial key for (var i = 0; i < initialKey.Length; i++) { root.Children[int.Parse(initialKey.Substring(i, 1))].zoomIn(); } #endregion #region Map Events to Handelers viewport.MouseDown += viewport_MouseDown; viewport.MouseUp += viewport_MouseUp; viewport.MouseMove += viewport_MouseMove; viewport.MouseWheel += viewport_MouseWheel; viewport.SizeChanged += viewport_SizeChanged; #endregion RedrawSphere(); }
public GlobeTile CreateTile(Transform parent, Wmts coords) { GameObject tileGo = Instantiate(tileTemplate); tileGo.transform.SetParentClearRelativeTransform(parent); tileGo.name = coords.ToString(); GlobeTile tile = tileGo.GetComponent <GlobeTile>(); tile.coords = coords; tile.globe = globe; tile.bBox = Layer.Wmts2DefaultBbox(coords); tile.SetVisible(false); return(tile); }
private void CreateTile(GlobeTile parent, Wmts coords) { GameObject tileGo = Instantiate(tileTemplate); tileGo.transform.SetParentClearRelativeTransform(parent.transform); tileGo.name = coords.ToString(); GlobeTile tile = tileGo.GetComponent <GlobeTile>(); tile.coords = coords; tile.globe = globe; tile.bBox = globe.CurrentLayer.Wmts2Bbox(coords); tile.SetVisible(false); parent.AddChild(tile); }
void AddTileToRenderList(int x, int y, int zoom) { string key = GenerateKey(x, y, zoom); if (tilesToRender.ContainsKey(key)) return; if (tilesOld.ContainsKey(key)) { tilesToRender.Add(key, tilesOld[key]); tilesOld.Remove(key); return; } long numTiles = 1 << zoom; double x0 = ((double)(x + 0) / (double)numTiles); double y0 = ((double)(y + 0) / (double)numTiles); double x1 = ((double)(x + 1) / (double)numTiles); double y1 = ((double)(y + 1) / (double)numTiles); if (tilesFree.Any()) { GlobeTile tile; if (tilesFree.ContainsKey(key)) { tile = tilesFree[key]; tilesFree.Remove(key); } else { var temp = tilesFree.First(); tile = temp.Value; tilesFree.Remove(temp.Key); } tile.X = x; tile.Y = y; tile.Z = zoom; tile.left = x0; tile.right = x1; tile.top = y0; tile.bottom = y1; int[] indexes; Gis.GeoPoint[] vertices; CalculateVertices(out vertices, out indexes, tileDensity, x0, x1, y0, y1); tile.VertexBuf.SetData(vertices, 0, vertices.Length); tile.IndexBuf.SetData(indexes, 0, indexes.Length); tilesToRender.Add(key, tile); } else { var tile = new GlobeTile { X = x, Y = y, Z = zoom, left = x0, right = x1, top = y0, bottom = y1 }; GenerateTileGrid(tileDensity, ref tile.VertexBuf, out tile.IndexBuf, x0, x1, y0, y1, zoom); tilesToRender.Add(key, tile); } }
public void CreateTileAsync(GlobeTile parent, Wmts coords) { tileQueue.Enqueue(new TileCreationParams(parent, coords)); }
public TileCreationParams(GlobeTile parent, Wmts coords) { this.parent = parent; this.coords = coords; }
void AddTileToRenderList(int x, int y, int zoom) { string key = GenerateKey(x, y, zoom); if (tilesToRender.ContainsKey(key)) { return; } if (tilesOld.ContainsKey(key)) { tilesToRender.Add(key, tilesOld[key]); tilesOld.Remove(key); return; } //if (tilesFree.ContainsKey(key)) { // tilesToRender.Add(key, tilesFree[key]); // tilesFree.Remove(key); // return; //} long numTiles = 1 << zoom; double x0 = ((double)(x + 0) / (double)numTiles); double y0 = ((double)(y + 0) / (double)numTiles); double x1 = ((double)(x + 1) / (double)numTiles); double y1 = ((double)(y + 1) / (double)numTiles); if (tilesFree.Any()) { GlobeTile tile; if (tilesFree.ContainsKey(key)) { tile = tilesFree[key]; tilesFree.Remove(key); } else { var temp = tilesFree.First(); tile = temp.Value; tilesFree.Remove(temp.Key); } tile.LeftTopMerc = new Vector2((float)x0, (float)y0); tile.RightBottomMerc = new Vector2((float)x1, (float)y1); tile.X = x; tile.Y = y; tile.Z = zoom; tile.left = x0; tile.right = x1; tile.top = y0; tile.bottom = y1; int[] indexes; GeoVert[] vertices; CalculateVertices(out vertices, out indexes, tileDensity, x0, x1, y0, y1, zoom); tile.VertexBuf.SetData(vertices, 0, vertices.Length); tile.IndexBuf.SetData(indexes, 0, indexes.Length); tilesToRender.Add(key, tile); } else { var tile = new GlobeTile { LeftTopMerc = new Vector2((float)x0, (float)y0), RightBottomMerc = new Vector2((float)x1, (float)y1), X = x, Y = y, Z = zoom, left = x0, right = x1, top = y0, bottom = y1 }; GenerateTileGrid(tileDensity, out tile.VertexBuf, out tile.IndexBuf, x0, x1, y0, y1, zoom); tilesToRender.Add(key, tile); } }