地下管廊三維Gis透視效果和地下模式C#代碼實現
在用C#進行三維Gis(Citymaker)地下管廊開發時,為更好的體現效果增加用戶體驗,需要根據應用場景從地上直接切到地下模式或者從地上能夠透視到地下的管廊、管線等設備。對於地下模式具體的實現是控制圖層的顯隱來進行的,模型數據需要有地上和地下數據的區分。具體的代碼如下:
一、地下模式代碼實現:
寫了一個控制圖層顯示的方法:
privatevoidSetLayerVisiable(Guidid,boolflag)
{
Guidguid =AxRenderControl.ProjectTree.GetNextItem(id, 11);
//循環獲得項目樹下的圖層
while(guid !=null&& guid !=Guid.Empty)
{
IRenderablelayer =AxRenderControl.ObjectManager.GetObjectById(guid)asIRenderable;
if(layer ==null)
continue;
if(flag)
{
layer.VisibleMask =gviViewportMask.gviViewAllNormalView;
}
else
{
layer.VisibleMask =gviViewportMask.gviViewNone;
}
guid =AxRenderControl.ProjectTree.GetNextItem(guid, 13);
}
}
地下模式調用(隱藏地面數據):
Guidguid =AxRenderControl.ProjectTree.FindItem("地面圖層");//獲得地面數據Guid
SetLayerVisiable(guid,false);//
地上模式調用(顯示地面數據):
Guidguid =AxRenderControl.ProjectTree.FindItem("地面圖層");
SetLayerVisiable(guid,true);//
二、透視模式具體實現:
透視模式的實現和地下模式的實現方式不一樣,地下模式是通過控制地面數據圖層的顯隱來進行控制,透視模式則是控制地面數據圖層Symbol的渲染模式來控制,具體代碼:
privatevoidSetGeometryRender(Guidid,boolflag)
{
Guidguid =AxRenderControl.ProjectTree.GetNextItem(id, 11);
while(guid !=null&&guid!=Guid.Empty)
{
IFeatureLayerlayer =AxRenderControl.ObjectManager.GetFeatureLayer(guid);
if(layer !=null&& layer.GetGeometryRender() !=null)
{
ISimpleGeometryRenderrender = layer.GetGeometryRender()asISimpleGeometryRender;
IModelPointSymbolsymbol = render.SymbolasIModelPointSymbol;
if(symbol !=null)
{
symbol.EnableColor = flag;
}
render.Symbol = symbol;
layer.SetGeometryRender(render);
}
guid =AxRenderControl.ProjectTree.GetNextItem(guid, 13);
}
}
透視模式調用:
///透視效果
Guidguid =AxRenderControl.ProjectTree.FindItem("地上圖層");
SetGeometryRender(guid,true);
guid =AxRenderControl.ProjectTree.FindItem("管線圖層");
SetGeometryRender(guid,true);
恢復地面模式:
Guidguid =AxRenderControl.ProjectTree.FindItem("地面圖層");
SetGeometryRender(guid,false);
具體效果如下:
非透視效果:
透視效果圖
地下模式:


※創始人你具備開發一款產品的能力嗎!
※只需在面前走一走,機器就能知道你是誰
TAG:案秀雲 |