江 西 师 范 大 学 本科生毕业论文
图 4.5 DotNetBar的控件
然后在分别添加状态栏和容器,并修改RibbonControl中的控件的代码,如下所示:
图 4.6修改
最后我们可以看到如下所示的一个Office2007风格界面,如下所示:
图4.7 主界面
16 地理与环境学院
江 西 师 范 大 学 本科生毕业论文 其后,我们分别陆续在这个界面上进行一系列控件的添加和属性的修改以及代码的编辑等,最后得到两个系统的主界面。如下图所示:
图4.8 ArcScene 程序的主界面及其效果示意图
图 4.9 ArcGlobe程序的主界面及其效果示意图
我们可以明显的看出两者风格非常相似,这是因为本文用的是同一个Dotnetbar控件,如果用的是不同版本,那么就会有不同的风格。
17 地理与环境学院
江 西 师 范 大 学 本科生毕业论文 3、代码实现:
在功能的实现过程中,其关键技术主要有地栅格数据的渲染和地形拉伸。
针对于我们的数据,本文将栅格数据的渲染分为地形渲染和水面渲染,由于在具体操作中没有实现像ArcGIS那样强大的功能,而是默认的选择了渲染样式。其代码如下:
//地形渲染
private void 地形渲染ToolStripMenuItem_Click(object sender, EventArgs e) {
IScene scene = axSceneControl1.Scene; ILayer layer = TOCRightLayer;
IRasterLayer pRasterLayer = layer as IRasterLayer; IRaster raster = (IRaster)pRasterLayer.Raster;
IRasterBandCollection rasterbands = raster as IRasterBandCollection; IRasterBand rasterband = rasterbands.Item(0);
IRasterStretchColorRampRenderer pRStretchRender = new RasterStretchColorRampRendererClass(); //创建两个起始颜色
IRgbColor pFromRgbColor = new RgbColorClass(); pFromRgbColor.Red = 40; pFromRgbColor.Green = 30; pFromRgbColor.Blue = 250;
IRgbColor pToRgbColor = new RgbColorClass(); pToRgbColor.Red = 240; pToRgbColor.Green = 80; pToRgbColor.Blue = 40; //创建起止颜色带
IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass(); pAlgorithmicColorRamp.Size = 255;
pAlgorithmicColorRamp.FromColor = pFromRgbColor as IColor; pAlgorithmicColorRamp.ToColor = pToRgbColor as IColor; bool btrue = true;
pAlgorithmicColorRamp.CreateRamp(out btrue); //选择拉伸颜色带符号化的波段 pRStretchRender.BandIndex = 1; //设置拉伸颜色带符号化所采用的颜色带
pRStretchRender.ColorRamp = pAlgorithmicColorRamp as IColorRamp; IRasterRenderer pRasterRender = pRStretchRender as IRasterRenderer; pRasterLayer = TOCRightLayer as IRasterLayer; pRasterRender.Raster = pRasterLayer as IRaster; pRasterRender.Update(); //符号化RasterLayer
pRasterLayer.Renderer = pRasterRender; //渲染的刷新
axSceneControl1.Scene.SceneGraph.Invalidate(pRasterLayer, true, false);
18 地理与环境学院
江 西 师 范 大 学 本科生毕业论文
axSceneControl1.SceneViewer.Redraw(true);
axSceneControl1.Scene.SceneGraph.RefreshViewers();
axTOCControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, pRasterLayer, axSceneControl1.Scene.Extent); axTOCControl1.Update(); }
}
而在水面渲染中,本文将地形的渲染稍作修改:
//创建两个起始颜色
IRgbColor pFromRgbColor = new RgbColorClass(); pFromRgbColor.Red = 80; pFromRgbColor.Green = 80; pFromRgbColor.Blue = 255;
IRgbColor pToRgbColor = new RgbColorClass(); pFromRgbColor.Red = 80; pFromRgbColor.Green = 80; pFromRgbColor.Blue = 255;
其最终效果如下:
图 4.10 图层渲染
另外由于ArcScene和ArcGlobe的自身差异,因此存在刷新的不同, 在渲染刷新中,ArcGlobe代码如下:
//符号化RasterLayer
pRasterLayer.Renderer = pRasterRender;
IGlobeDisplay pGlobeDisp = this.axGlobeControl1.GlobeDisplay; //渲染的刷新
IGlobeDisplayLayers2 pGDispLyrs = pGlobeDisp as IGlobeDisplayLayers2; pGDispLyrs.RefreshLayer(pLayer); this.axTOCControl1.Update();
19 地理与环境学院
江 西 师 范 大 学 本科生毕业论文
在地形拉伸过程中,其代码如下: //拉伸显示
private void buttonX1_Click(object sender, EventArgs e) {
if (comboBoxEx5.Text == \ || comboBoxEx5.Text == null) {
MessageBoxEx.Show(\请选择要拉伸的图层!\); } else
if (comboBoxEx2.Text == null || comboBoxEx2.Text == \) {
MessageBoxEx.Show(\基准高程一定要有参数,否则不做拉伸!\); } else {
ISceneGraph scenegraph = axSceneControl1.SceneGraph; IScene scene = scenegraph.Scene;
LayerIndex = comboBoxEx5.Items.IndexOf(comboBoxEx5.Text);
ILayer layer = m_SceneControl.Scene.get_Layer(LayerIndex) as ILayer; IRasterLayer pLayer = layer as IRasterLayer; IRasterSurface pSurface = new RasterSurface(); IRaster raster = (IRaster)pLayer.Raster;
IRasterBandCollection rasterbands = raster as IRasterBandCollection; IRasterBand rasterband = rasterbands.Item(0); pSurface.RasterBand = rasterband; ISurface surface = pSurface as ISurface;
ILayerExtensions layerextensions = layer as ILayerExtensions; I3DProperties properties = new Raster3DPropertiesClass(); object p3d;
for (int i = 0; i < layerextensions.ExtensionCount; i++) {
p3d = layerextensions.get_Extension(i); if (p3d != null) {
properties = (I3DProperties)p3d; break;} }
properties.ZFactor = Convert.ToDouble(comboBoxEx2.Text); properties.BaseOption = esriBaseOption.esriBaseSurface; properties.BaseSurface = surface; properties.Apply3DProperties(layer);
axSceneControl1.SceneGraph.RefreshViewers(); } }
20 地理与环境学院