缩放的地理范围选功能。使用这种方法确保所有选中的功能是显示在屏幕上。
///Zooms to the geographic extent of the selected features. Using this method ensures that all the selected features are displayed on the screen./// ///
An IGlobe interface///  ///
public void ZoomToSelectedGlobeFeatures(ESRI.ArcGIS.GlobeCore.IGlobe globe){  ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay = globe.GlobeDisplay;  ESRI.ArcGIS.Analyst3D.ISceneViewer sceneViewer = globeDisplay.ActiveViewer;  ESRI.ArcGIS.Analyst3D.ICamera camera = sceneViewer.Camera;  ESRI.ArcGIS.GlobeCore.IGlobeCamera globeCamera = (ESRI.ArcGIS.GlobeCore.IGlobeCamera)camera; // Explicit Cast  ESRI.ArcGIS.Analyst3D.IScene scene = globeDisplay.Scene;  ESRI.ArcGIS.Carto.IEnumLayer enumLayer = scene.get_Layers(null, true);  ESRI.ArcGIS.Geometry.IEnvelope envelope = new ESRI.ArcGIS.Geometry.EnvelopeClass();  envelope.SetEmpty();  ESRI.ArcGIS.Geometry.IEnvelope layersExtentEnvelope = new ESRI.ArcGIS.Geometry.EnvelopeClass();  layersExtentEnvelope.SetEmpty();  ESRI.ArcGIS.Geometry.IZAware ZAware = (ESRI.ArcGIS.Geometry.IZAware)envelope; // Explicit Cast  ZAware.ZAware = (true);  ESRI.ArcGIS.Geodatabase.ISpatialFilter spatialFilter = new ESRI.ArcGIS.Geodatabase.SpatialFilterClass();  ESRI.ArcGIS.Geometry.ISpatialReference spatialReference = scene.SpatialReference;  System.Boolean haveFeatures = false;  enumLayer.Reset();  ESRI.ArcGIS.Carto.ILayer layer;  while ((layer = enumLayer.Next()) != null)  {    if (layer == null)      break;    if (layer is ESRI.ArcGIS.Carto.IFeatureLayer)    {      ESRI.ArcGIS.Carto.IFeatureLayer featureLayer = (ESRI.ArcGIS.Carto.IFeatureLayer)layer; // Explicit Cast      ESRI.ArcGIS.Carto.IFeatureSelection featureSelection = (ESRI.ArcGIS.Carto.IFeatureSelection)layer; // Explicit Cast      ESRI.ArcGIS.Geodatabase.ISelectionSet selectionSet = featureSelection.SelectionSet;      ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass = featureLayer.FeatureClass;      System.String shapeField = featureClass.ShapeFieldName;      spatialFilter.GeometryField = shapeField;      spatialFilter.set_OutputSpatialReference(shapeField, spatialReference);      // The next 2 lines of code are different from many other ArcObjects programming techniques in that the       // ICursor Interface variable 'cursor' is initialized to a Null value. It is set by reference with the       // call to the Search method; hence the need for the 'out' argument (see MSDN for more information).      ESRI.ArcGIS.Geodatabase.ICursor cursor;      selectionSet.Search(spatialFilter, true, out cursor);      ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = (ESRI.ArcGIS.Geodatabase.IFeatureCursor)cursor; // Explicit Cast      System.Boolean getLayerExtent = true;      ESRI.ArcGIS.Geodatabase.IFeature feature;  // Automatically initialized to null. Used to test existence of a feature in the featureCursor      while ((feature = featureCursor.NextFeature()) != null)      {        ESRI.ArcGIS.Geometry.IGeometry geometry = feature.Shape;        ESRI.ArcGIS.Geometry.IEnvelope featureExtent = geometry.Envelope;        envelope.Union(featureExtent);        haveFeatures = true;        if (getLayerExtent)        {          ESRI.ArcGIS.Geodatabase.IGeoDataset geoDataset = (ESRI.ArcGIS.Geodatabase.IGeoDataset)featureLayer; // Explicit Cast          if (geoDataset != null)          {            ESRI.ArcGIS.Geometry.IEnvelope layerExtent = geoDataset.Extent;            layersExtentEnvelope.Union(layerExtent);           }           getLayerExtent = false;        }      }    }  }  // Since the size of points is very small, we use a special case to zoom in closer  System.Double width = envelope.Width;  System.Double height = envelope.Height;  if (width == 0.0 && height == 0.0)  // Must be a single point, Zoom to 1 x 1 degree area,  {                                   // or lets say 1/20th of layer extent, whichever is smallest.    System.Double dim = 1.0;    System.Boolean bEmpty = layersExtentEnvelope.IsEmpty;    if (!bEmpty)    {      System.Double layerWidth = layersExtentEnvelope.Width;      System.Double layerHeight = layersExtentEnvelope.Height;      System.Double layerDim = System.Math.Max(layerWidth, layerHeight) * 0.05;      if (layerDim > 0.0)        dim = System.Math.Min(1.0, layerDim);    }    System.Double xMin = envelope.XMin;    System.Double yMin = envelope.YMin;    ESRI.ArcGIS.Geometry.IPoint point = new ESRI.ArcGIS.Geometry.PointClass();    point.X = xMin;    point.Y = yMin;    envelope.Width = dim;    envelope.Height = dim;    envelope.CenterAt(point);  }  else if (width == 0.0 || height == 0.0)  {    System.Double maxDim = System.Math.Max(width, height);    envelope.Width = maxDim;    envelope.Height = maxDim;  }  globeCamera.SetToZoomToExtents(envelope, globe, sceneViewer);  sceneViewer.Redraw(true);