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();
}





转载于:https://www.cnblogs.com/giser-whu/p/3707075.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值