/// <summary> /// Releases the unmanaged resources used by the <see cref="T:System.IO.Stream"/> and optionally releases the managed resources. /// </summary> /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (disposing) { _reader.Dispose(); } base.Dispose(disposing); }
private void btnRenderMap2_Click(object sender, EventArgs e) { //Note we're casting to mg-desktop specific subclasses as this is what mg-desktop rendering APIs expect MgdMap map = (MgdMap)_viewer.GetMap(); MgdSelection selection = (MgdSelection)_viewer.GetSelection(); MgMapViewerProvider provider = _viewer.GetProvider(); MgdRenderingService renderSvc = (MgdRenderingService)provider.CreateService(MgServiceType.RenderingService); MgPoint centerPt = map.ViewCenter; MgCoordinate centerCoord = centerPt.Coordinate; //MgdTransientMapState is a helper class which lets us apply transient state to a map, which is automatically //undone on disposal. This is how we can render custom views of a map with specific display parameters without //permanently changing the display parameters used by the map viewer using (MgTransientMapState tempState = provider.CreateTransientState(map)) { MgMapDisplayParameters state = new MgMapDisplayParameters(centerCoord.X, centerCoord.Y, 5000, 1024, 768, 96); tempState.PushState(state); MgByteReader br = renderSvc.RenderMap(map, selection, "PNG"); using (SaveFileDialog save = new SaveFileDialog()) { save.Filter = "Portable Network Graphics (*.png)|*.png"; if (save.ShowDialog() == DialogResult.OK) { //MgReadOnlyStream is a stream adapter class that provides a .net stream //interface to the MgByteReader, allowing MgByteReader objects to be used //anywhere a System.IO.Stream is expected. using (MgReadOnlyStream stream = new MgReadOnlyStream(br)) { Image img = Image.FromStream(stream); img.Save(save.FileName); MessageBox.Show("Image saved to: " + save.FileName); } } br.Dispose(); } } }
public override void Invoke() { var viewer = this.Viewer; var sel = viewer.GetSelection(); var selLayers = sel.GetLayers(); if (selLayers == null) { MessageBox.Show(Strings.TextNoSelection); return; } //This doesn't work :( // //var provider = viewer.GetProvider(); //var featSvc = (MgFeatureService)provider.CreateService(MgServiceType.FeatureService); //var ext = sel.GetExtents(featSvc); //var ll = ext.LowerLeftCoordinate; //var ur = ext.UpperRightCoordinate; //viewer.ZoomToExtents(ll.X, ll.Y, ur.X, ur.Y); MgEnvelope env = new MgEnvelope(); if (_agfRw == null) { _agfRw = new MgAgfReaderWriter(); } for (var i = 0; i < selLayers.GetCount(); i++) { var layer = selLayers.GetItem(i); var fr = sel.GetSelectedFeatures(layer, layer.FeatureClassName, false); try { string geomName = layer.GetFeatureGeometryName(); while (fr.ReadNext()) { if (!fr.IsNull(geomName)) { MgByteReader agf = null; MgGeometry geom = null; try { agf = fr.GetGeometry(geomName); geom = _agfRw.Read(agf); env.ExpandToInclude(geom.Envelope()); } finally { if (agf != null) { agf.Dispose(); agf = null; } if (geom != null) { geom.Dispose(); geom = null; } } } } } finally { fr.Close(); } } var ll = env.LowerLeftCoordinate; var ur = env.UpperRightCoordinate; viewer.ZoomToExtents(ll.X, ll.Y, ur.X, ur.Y); }