Citymaker地下管廊伟景行三维Gis透视效果和地下模式代码实现

在用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.Symbol as IModelPointSymbol;
                    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);

具体效果如下:
非透视效果:

透视效果图:



地下模式:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值