ArcEngine三维开发实现3D符号以现实单位显示


在利用ArcEngine进行三维开发时,要绘制三维符号,并且以其现实单位显示。我们先来看下ArcGlobe下是如何做的。首先通过数据向导将添加的点要素文件显示为3D矢量,如图所示:

然后就是设置图层的可见范围,如下图所示:


前两步默认操作即可,最后则是设置符号的大小,选择以现实单位显示符号。如下图所示:


那么在ArcEngine下要实现同样的功能主要用到哪个接口呢?通过查找帮助文档,主要用到IGlobeLayerProperties接口(http://blog.csdn.net/liushuo_whu/article/details/22852245)。通过该接口可以设置图层缓存、分辨率、可见分为、矢量要素栅格化以及3D符号随距离变化等。类似ArcGlobe的添加数据向导,这里也做了一个添加数据向导,如下图所示:


代码如下:

//将要素显示为3D矢量;任何距离均显示图层;以现实单位显示符号
                            IGlobeDisplay pGlobeDisplay = pGlobeControl.Globe.GlobeDisplay;
                            IGlobeDisplayLayers pGlobeDisplayLayers = pGlobeDisplay as IGlobeDisplayLayers;
                            pGlobeControl.Globe.AddLayerType(pFeatureLayer as ILayer,esriGlobeLayerType.esriGlobeLayerTypeFloating,true);
                            //获取图层属性
                            IGlobeLayerProperties4 pGlobeLayerProperties = pGlobeDisplayLayers.FindGlobeProperties(pFeatureLayer as ILayer) as IGlobeLayerProperties4;
                            pGlobeLayerProperties.Scale3DSymbols = true; // 3D符号随距离而变化
                            //pGlobeLayerProperties.UseCache = true;//使用缓存
                           // pGlobeLayerProperties.IsFullyCached = true;
                            //pGlobeLayerProperties.EstimateThresholdDistances(out Convert.ToDouble(pZoomOutDistance.Text),out Convert.ToDouble(pZoomInDistance.Text));
                            pGlobeDisplayLayers.RefreshLayer(pFeatureLayer as ILayer);
                            this.Dispose();

这里需要注意的地方就是必须要先添加图层,再获取其属性。即
  pGlobeControl.Globe.AddLayerType(pFeatureLayer as ILayer,esriGlobeLayerType.esriGlobeLayerTypeFloating,true);在
 IGlobeLayerProperties4 pGlobeLayerProperties = pGlobeDisplayLayers.FindGlobeProperties(pFeatureLayer as ILayer) as IGlobeLayerProperties4;
的前面执行。


最终实现效果如图所示:

转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值