如何代码实现ArcGlobe中TOC右键菜单下Elevation选项卡中的Floating on a custom surface功能
首先,标题要长……
其次,很无奈,找这个东西找了一天……网上都没有明确的代码示例或解释。快要遍历官方的Developer Help文档了。各种搜Floating on神马的都没有。最后经语法分析,觉得
How to drape a layer on an elevation surface in globe
这个标题有点意思。于是尝试了一下,还真是……无语啊,文档就不能跟右键菜单设置里的说明保持一致么……
最无奈的是 直接搜索 How to drape a layer on an elevation surface in globe 一个搜索结果都没有!
搜drape才能找到该文档……无了个语的。
问题描述:
我现在有高程数据,也就是有一个IRasterLayer elevationRasterLayer。
我生成了一个栅格数据,渲染之后要贴在地球表面上。要贴的图层是IRasterLayer coverageRasterLayer。
最后就剩怎么贴了。
贴法:
借鉴官方的示例。
// 搞到globeDisplayLayers
IGlobeDisplayLayers2 pGlobeDisplayLayers2 = axGlobeCtrl.GlobeDisplay as IGlobeDisplayLayers2;
// 找到要贴的图层的属性
IGlobeLayerProperties drapeLayerGlobeLayerProperties = pGlobeDisplayLayers2.FindGlobeProperties(coverageRasterLayer);
// 获取高度属性设置
IGlobeHeightProperties drapeLayerGlobeHeightProperties = drapeLayerGlobeLayerProperties.HeightProperties;
// 设置baseLayer为原来的高程底图
drapeLayerGlobeHeightProperties.BaseLayer = elevationRasterLayer;
// 设置一下BaseOption 属性
drapeLayerGlobeHeightProperties.BaseOption =
ESRI.ArcGIS.GlobeCore.esriGlobeLayerBaseOption.esriGlobeLayerBaseLayer;
// 将配置好的高度属性应用到被贴的图层
drapeLayerGlobeHeightProperties.Apply(axGlobeCtrl.GlobeDisplay.Globe, coverageRasterLayer);
// 刷刷刷
axGlobeCtrl.GlobeDisplay.RefreshViewers();