ArcEngine三维开发实现3D符号以现实单位显示
2014-04-03 15:13
295 查看
在利用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();
这里需要注意的地方就是必须要先添加图层,再获取其属性。即
然后就是设置图层的可见范围,如下图所示:
前两步默认操作即可,最后则是设置符号的大小,选择以现实单位显示符号。如下图所示:
那么在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;的前面执行。
最终实现效果如图所示:
转载请注明出处。
相关文章推荐
- c#调用COM组件
- c#中虚函数的相关使用方法
- 浅析C# web访问mysql数据库-整理归纳总结
- C# IP地址与整数之间转换的具体方法
- 3D设计 Adobe Acrobat 3D 8.1.0 英文版 下载
- C#中的多态深入理解
- C#实现的阴历阳历互相转化类实例
- C# 的关键字详细介绍
- c# 获得局域网主机列表实例
- C#基本概念列举详解
- C#中Convert.ToInt32()和int.Parse()的区别介绍
- C#面向对象特征的具体实现及作用详解
- c#静态方法和非静态方法详细介绍
- 关于C# Math 处理奇进偶不进的实现代码
- C#中调用Windows API的技术要点说明
- c# 随机函数的使用详解
- c#之圆形无标题栏椭圆窗体的实现详解
- C#页面之间跳转功能的小结
- 浅析C# 基础语法的使用
- C#中将字符串转换为整型的三种解决方法总结