通常将正射影像叠加在地形表面作为纹理渲染,矢量要素图层同样可以叠加在地形表面:
设置基准高前:
设置基准高后:
核心代码:
private void 设置基准高ToolStripMenuItem_Click(object sender, EventArgs e)
{
for (int lyrIndex = 0; lyrIndex < axSceneControl1.Scene.LayerCount; lyrIndex++)
{
ILayer pLayer = axSceneControl1.Scene.get_Layer(lyrIndex);
//getlayerbyName获取
if (pLayer is IFeatureLayer)
{
SetlayerSurface(pLayer);
}
}
}
public I3DProperties Get3DPropsFromLayer(ILayer pLyr)
{
ILayerExtensions pLyrExts = (ILayerExtensions)pLyr;
I3DProperties p3DProp = null;
for (int i = 0; i < pLyrExts.ExtensionCount; i++)
if (pLyrExts.get_Extension(i) is I3DProperties)
p3DProp = (I3DProperties)pLyrExts.get_Extension(i);
return p3DProp;
}
public void SetlayerSurface(ILayer layer)
{
ISurface surface=null;
for (int lyrIndex = 0; lyrIndex < axSceneControl1.Scene.LayerCount; lyrIndex++)
{
ILayer pLayer = axSceneControl1.Scene.get_Layer(lyrIndex);
//getlayerbyName获取
if (pLayer is ITinLayer)
{
ITinLayer pTinLayer = pLayer as ITinLayer;
ITinSurface pSurf = pTinLayer.Dataset as ITinSurface;
surface = pSurf as ISurface;
}
}
ILayerExtensions layerextensions = layer as ILayerExtensions;
I3DProperties properties = Get3DPropsFromLayer(layer);
properties.BaseOption = esriBaseOption.esriBaseSurface;
properties.BaseSurface = surface;
properties.Apply3DProperties(layer);
//properties.ZFactor = 0;
axSceneControl1.SceneGraph.RefreshViewers();
}