This document is archived and information here might be outdated. Recommended version. |
ArcObjects Help for .NET developers > ESRI.ArcGIS.Snippets > Snippets > Draw Globe Layers in Correct Order Snippet (ArcObjects .NET 10.4 SDK) |
Get and set globe layer drawing order to draw properly.
///<summary>Get and set globe layer drawing order to draw properly.</summary> /// ///<param name="globe">An IGlobe interface</param> /// ///<remarks></remarks> public void DrawGlobeLayersInCorrectOrder(ESRI.ArcGIS.GlobeCore.IGlobe globe) { ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay=globe.GlobeDisplay; ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder globeDrawingOrder=(ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder)globe; // Explicit Cast // Get the current draw order - this includes draped, floating and elevation ESRI.ArcGIS.Carto.IEnumLayer enumLayer=globeDrawingOrder.OrderedLayers; // Need to separate BaseLayers from Floating // Syntax: // IEnumLayer variable=object.get_GlobeLayers(pUID, bRecursive, bInBaseGlobe, bSortedByDrawingPriority) ESRI.ArcGIS.Carto.IEnumLayer baseLayers=globe.get_GlobeLayers(null, true, true, true); ESRI.ArcGIS.Carto.IEnumLayer floatingLayers=globe.get_GlobeLayers(null, false, false, true); // weed out elevation layers from the ordered list... // note: elevation layers are always on top of the ordered list // The ordered list for baselayers is: // (Top down) // Elevation0 // Elevation1 // Draped0 // Draped1 ESRI.ArcGIS.GlobeCore.IGlobeLayerProperties globeLayerProperties; // note: it is not set to anything here but used later in the while loop ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers globeDisplayLayers=(ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers)globeDisplay; // Explicit cast // Create ArrayLists System.Collections.ArrayList DrapedLayers=new System.Collections.ArrayList(); System.Collections.ArrayList ElevationLayers=new System.Collections.ArrayList(); // Store the separate draw order (elevation and draped) into ArrayLists ESRI.ArcGIS.Carto.ILayer layer=baseLayers.Next(); while (layer != null) { globeLayerProperties=globeDisplayLayers.FindGlobeProperties(layer); // globeLayerProperties is finally set to something if (globeLayerProperties.Type != ESRI.ArcGIS.GlobeCore.esriGlobeDataType.esriGlobeDataElevation) { DrapedLayers.Add(layer); } else if (globeLayerProperties.Type == ESRI.ArcGIS.GlobeCore.esriGlobeDataType.esriGlobeDataElevation) { ElevationLayers.Add(layer); } //Get the next layer layer=baseLayers.Next(); } // To get the layers from the ArrayLists - cast individual elements to ILayer // For example getting the first layer in the list: ESRI.ArcGIS.Carto.ILayer theDrapedLayer=(ESRI.ArcGIS.Carto.ILayer)DrapedLayers[0]; // Explicit cast // Changing the drawing order - use methods available on ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder // for example to move a layer backward globeDrawingOrder.MoveBackward(theDrapedLayer); globeDisplay.RefreshViewers(); // Get the floating layers ESRI.ArcGIS.Carto.ILayer theFloatingLayer=floatingLayers.Next(); while (theFloatingLayer != null) { // code to work with theFloatingLayer theFloatingLayer=floatingLayers.Next(); } }
'''<summary>Get and set globe layer drawing order to draw properly.</summary> ''' '''<param name="globe">An IGlobe interface</param> ''' '''<remarks></remarks> Public Sub DrawGlobeLayersInCorrectOrder(ByVal globe As ESRI.ArcGIS.GlobeCore.IGlobe) Dim globeDisplay As ESRI.ArcGIS.GlobeCore.IGlobeDisplay=globe.GlobeDisplay Dim globeDrawingOrder As ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder=CType(globe, ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder) ' Explicit Cast ' Get the current draw order - this includes draped, floating and elevation Dim enumLayer As ESRI.ArcGIS.Carto.IEnumLayer=globeDrawingOrder.OrderedLayers ' Need to separate BaseLayers from Floating ' Syntax: ' IEnumLayer variable=object.GlobeLayers(pUID, bRecursive, bInBaseGlobe, bSortedByDrawingPriority) Dim baseLayers As ESRI.ArcGIS.Carto.IEnumLayer=globe.GlobeLayers(Nothing, True, True, True) Dim floatingLayers As ESRI.ArcGIS.Carto.IEnumLayer=globe.GlobeLayers(Nothing, False, False, True) ' weed out elevation layers from the ordered list... ' note: elevation layers are always on top of the ordered list ' The ordered list for baselayers is: ' (Top down) ' Elevation0 ' Elevation1 ' Draped0 ' Draped1 Dim globeLayerProperties As ESRI.ArcGIS.GlobeCore.IGlobeLayerProperties ' note: it is not set to anything here but used later in the while loop Dim globeDisplayLayers As ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers=CType(globeDisplay, ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers) ' Explicit Cast ' Create ArrayLists Dim DrapedLayers As System.Collections.ArrayList=New System.Collections.ArrayList Dim ElevationLayers As System.Collections.ArrayList=New System.Collections.ArrayList ' Store the separate draw order (elevation and draped) into ArrayLists Dim layer As ESRI.ArcGIS.Carto.ILayer=baseLayers.Next While Not (layer Is Nothing) globeLayerProperties=globeDisplayLayers.FindGlobeProperties(layer) 'globeLayerProperties is finally set to something If Not (globeLayerProperties.Type=ESRI.ArcGIS.GlobeCore.esriGlobeDataType.esriGlobeDataElevation) Then DrapedLayers.Add(layer) Else If globeLayerProperties.Type=ESRI.ArcGIS.GlobeCore.esriGlobeDataType.esriGlobeDataElevation Then ElevationLayers.Add(layer) End If End If layer=baseLayers.Next End While ' To get the layers from the ArrayLists - cast individual elements to ILayer ' For example getting the first layer in the list: Dim theDrapedLayer As ESRI.ArcGIS.Carto.ILayer=CType(DrapedLayers(0), ESRI.ArcGIS.Carto.ILayer) ' Explicit Cast ' Changing the drawing order - use methods available on ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder ' for example to move a layer backward globeDrawingOrder.MoveBackward(theDrapedLayer) globeDisplay.RefreshViewers() ' Get the floating layers Dim theFloatingLayer As ESRI.ArcGIS.Carto.ILayer=floatingLayers.Next While Not (theFloatingLayer Is Nothing) ' code to work with theFloatingLayer theFloatingLayer=floatingLayers.Next End While End Sub