• How to get and set the drawing order of layers in globe(获取并设置Globe图层的叠加次序:)


    Globe中的图层类型主要有以下三种:

    (1)、浮动图层(floating): 通过在要素几何、要素属性或图层级别设置中包含 Z 值,来定义其自身在 3D 空间中的位置。

    (2)、叠加图层(draped):被放置在某个已知表面图层之上,以从该图层获得其Z值。

    (3)、高程图层(Elevation):提供要在其上放置其他图层的 3D 表面。

    1、首先初始化Globe对象

    2、Get IGlobeDisplay and IGlobeDrawingOrder from globe. 

    	IGlobeDisplay globeDisplay = globe.GlobeDisplay;
    	IGlobeDrawingOrder globeDrawingOrder = (IGlobeDrawingOrder)globe; // Explicit cast.

         3、获取当前的图层绘制顺序。包括叠加图层、浮动图层、高程图层。

         IEnumLayer enumLayer = globeDrawingOrder.OrderedLayers;

         4、 从枚举图层中分离以上三种图层

        IEnumLayer baseLayers = globe.get_GlobeLayers(null, true, true, true);

    IEnumLayer floatingLayers = globe.get_GlobeLayers(null, false, false, true);

          方法说明:IEnumLayer variable = IGlobe.get_GlobeLayers(pUID, bRecursive, bInBaseGlobe, bSortedByDrawingPriority)。

    布尔值bInBaseGlobe—true表示返回叠加图层和高程图层;false则表示返回浮动图层;

    bSortedByDrawingPriority--- true表示返回的结果按照图层的绘制优先级来排序

    5、由于baseLayers中包含叠加图层和高程图层,因此要分离开来。其排列顺序为:
    Elevation0
    Elevation1
    Draped0
    Draped1

    6、创建ArrayList来分别存储叠加图层和高程图层

     	ArrayList DrapedLayers = new ArrayList();
    	ArrayList ElevationLayers = new ArrayList();
         7、遍历baseLayers,分离叠加图层和高程图层,并分别存储。(依据其图层属性分离)
    	IGlobeLayerProperties globeLayerProperties;
    	// It is not set to anything here but is used later in the loop.
    	IGlobeDisplayLayers globeDisplayLayers = (IGlobeDisplayLayers)globeDisplay; 
       	 // Explicit cast.
    	// Store the separate draw order (elevation and draped) into ArrayLists.
    	ILayer layer = baseLayers.Next();
    	while (layer != null)
    	{
       	 globeLayerProperties = globeDisplayLayers.FindGlobeProperties(layer);
        	// globeLayerProperties is finally set to something.
       	 if (globeLayerProperties.Type != esriGlobeDataType.esriGlobeDataElevation)
       	 {
           		 DrapedLayers.Add(layer);
      	  }
      	  else if (globeLayerProperties.Type == esriGlobeDataType.esriGlobeDataElevation)
      	  {
          	  ElevationLayers.Add(layer);
      	  }
       	 //Get the next layer.
        	layer = baseLayers.Next();
    	}

    8、一旦图层分离开来,并可以获取单个图层
    	// To get the layers from the ArrayLists, cast individual elements to ILayer.
    	// For example, getting the first layer in the DrapedLayers list:
    	ILayer theDrapedLayer = (ILayer)DrapedLayers[0]; // Explicit cast.
    9、 IGlobeDrawingOrder 可以用来改变图层的绘制顺序。例如,将图层向前移动。
    		
    	/ For example, to move a layer backward:
    	globeDrawingOrder.MoveBackward(theDrapedLayer);
    	globeDisplay.RefreshViewers();

    10、浮动图层存储在floatingLayers中。单个浮动图层可通过如下代码获得:
    	
    	
    // Get the floating layers.
    ILayer theFloatingLayer = floatingLayers.Next();
    while (theFloatingLayer != null)
    {
        // Code to work with theFloatingLayer.
        theFloatingLayer = floatingLayers.Next();
    }





  • 相关阅读:
    Omi新成员omi-router正式发布
    Omi架构与React Fiber
    Omi框架Store体系的前世今生
    Omi v1.0震撼发布
    omi-cli新版发布-升级webpack2和支持sass生成组件局部CSS
    Omi应用md2site-0.5.0发布-支持动态markdown拉取解析
    Omi应用md2site发布-markdown转网站利器
    AlloyTouch之无限循环select插件
    Omi教程-插件体系
    AlloyTouch之select选择插件
  • 原文地址:https://www.cnblogs.com/giser-whu/p/3707075.html
Copyright © 2020-2023  润新知