/// <summary>Zoom to the selected shape(s)</summary> /// <param name = "selectedRows">A collection of the selected rows.</param> /// <param name = "shapeFile">The current shapefile.</param> public void ZoomToSelected(DataGridViewSelectedRowCollection selectedRows, Shapefile shapeFile) { try { double maxX = double.MinValue; double maxY = double.MinValue; double minX = double.MaxValue; double minY = double.MaxValue; var layer = _context.Layers.Current; if (layer == null || layer.FeatureSet == null) { return; } layer.Visible = true; foreach (DataGridViewRow row in selectedRows) { var ext = shapeFile.QuickExtents(Convert.ToInt32(row.Cells[0].Value)); maxX = ext.xMax > maxX ? ext.xMax : maxX; maxY = ext.yMax > maxY ? ext.yMax : maxY; minX = ext.xMin < minX ? ext.xMin : minX; minY = ext.yMin < minY ? ext.yMin : minY; } // Pad extents now double dx = PadExtentsSelected(maxX, minX); maxX = maxX + dx; minX = minX - dx; double dy = PadExtentsSelected(maxY, minY); maxY = maxY + dy; minY = minY - dy; var exts = new Extents(); if (layer.FeatureSet.NumSelected == 1 && layer.FeatureSet.PointOrMultiPoint) { var sf = layer.FeatureSet.InternalObject as Shapefile; if (sf != null) { double xpad = (1 / 100) * (sf.Extents.xMax - sf.Extents.xMin); double ypad = (1 / 100) * (sf.Extents.yMax - sf.Extents.yMin); exts.SetBounds(minX + xpad, minY - ypad, 0, maxX - xpad, maxY + ypad, 0); } } else { exts.SetBounds(minX, minY, 0, maxX, maxY, 0); } var map = Map; map.Extents = exts; } catch (Exception ex) { MessageBox.Show(string.Format("Error in ZoomToSelected: {0}", ex.Message)); } }