private Viewport2DVisual3D CreateMapVisual(EsriMapLayer layer) { Viewport2DVisual3D result = new Viewport2DVisual3D(); // Geometry MeshGeometry3D geometry = new MeshGeometry3D(); geometry.Positions = new Point3DCollection(); geometry.Positions.Add(new Point3D(-50, -50, 0)); geometry.Positions.Add(new Point3D(50, -50, 0)); geometry.Positions.Add(new Point3D(-50, 50, 0)); geometry.Positions.Add(new Point3D(50, 50, 0)); geometry.TriangleIndices = new System.Windows.Media.Int32Collection(); geometry.TriangleIndices.Add(0); geometry.TriangleIndices.Add(1); geometry.TriangleIndices.Add(2); geometry.TriangleIndices.Add(2); geometry.TriangleIndices.Add(1); geometry.TriangleIndices.Add(3); geometry.TextureCoordinates = new System.Windows.Media.PointCollection(); geometry.TextureCoordinates.Add(new Point(0, 1)); geometry.TextureCoordinates.Add(new Point(1, 1)); geometry.TextureCoordinates.Add(new Point(0, 0)); geometry.TextureCoordinates.Add(new Point(1, 0)); result.Geometry = geometry; // Material DiffuseMaterial material = new DiffuseMaterial(); result.Material = material; Viewport2DVisual3D.SetIsVisualHostMaterial(material, true); // Visual Border border = new Border(); border.BorderThickness = new Thickness(2.0); border.BorderBrush = new SolidColorBrush(Colors.Black); Map map = new Map(); map.IsLogoVisible = false; layer.MyMap = map; map.Height = 500; map.Width = 500; map.Layers = new LayerCollection(); ArcGISDynamicMapServiceLayer baseLayer = new ArcGISDynamicMapServiceLayer { Url = BaseMapUrl }; baseLayer.Visible = false; map.Layers.Add(baseLayer); map.Layers.Add(layer.MyLayer); border.Child = map; result.Visual = border; // Default Extent if (MyEsriMapLayers.Count < 1) map.Extent = DefaultExtent; return result; }
// Private - Layer Processing private EsriMapLayer CreateEsriMapLayer(Layer layer) { EsriMapLayer esriLayer = new EsriMapLayer(); esriLayer.MyLayer = layer; Viewport2DVisual3D front = CreateMapVisual(esriLayer); Viewport2DVisual3D back = CreateRectangleVisual(); esriLayer.MyViewport2DVisual3D = new Viewport2DVisual3D[] { front, back }; return esriLayer; }