예제 #1
0
        /// <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));
            }
        }