教程目录: 第三讲 MapControl与PageLayoutControl同步 第八讲 属性数据表的查询显示 ------------------------------------------------------------------ 《ArcGIS Engine+C#实例开发教程》为3SDN(http://www.3sdn.net)原创教程,作者闲云野鹤,版权所有。禁止商业用途转载(如需请联系作者),非商业用途转载请注明出处并完整保留本声明。 在第七讲 图层符号选择器的实现的第一阶段中,我们完成了符号选择器窗体的创建与调用。在第二阶段中,我们继续完成符号参数的调整与“更多符号”的加载。 2.6 符号参数调整 在地图整饰中,符号参数的调整是必须的功能。下面我们将实现符号颜色、外框颜色、线宽、角度等参数的调整。 (1) 添加SymbologyControl的OnItemSelected事件,此事件在鼠标选中符号时触发,此时显示出选定符号的初始参数,事件响应函数代码如下:
/// <summary> /// 选中符号时触发的事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void axSymbologyControl_OnItemSelected(object sender, ESRI.ArcGIS.Controls.ISymbologyControlEvents_OnItemSelectedEvent e) { pStyleGalleryItem = (IStyleGalleryItem)e.styleGalleryItem; Color color; switch (this.axSymbologyControl.StyleClass) { //点符号 case esriSymbologyStyleClass.esriStyleClassMarkerSymbols: color = this.ConvertIRgbColorToColor(((IMarkerSymbol)pStyleGalleryItem.Item).Color as IRgbColor); //设置点符号角度和大小初始值 this.nudAngle.Value = (decimal)((IMarkerSymbol)this.pStyleGalleryItem.Item).Angle; this.nudSize.Value = (decimal)((IMarkerSymbol)this.pStyleGalleryItem.Item).Size; break; //线符号 case esriSymbologyStyleClass.esriStyleClassLineSymbols: color = this.ConvertIRgbColorToColor(((ILineSymbol)pStyleGalleryItem.Item).Color as IRgbColor); //设置线宽初始值 this.nudWidth.Value = (decimal)((ILineSymbol)this.pStyleGalleryItem.Item).Width; break; //面符号 case esriSymbologyStyleClass.esriStyleClassFillSymbols: color = this.ConvertIRgbColorToColor(((IFillSymbol)pStyleGalleryItem.Item).Color as IRgbColor); this.btnOutlineColor.BackColor = this.ConvertIRgbColorToColor(((IFillSymbol)pStyleGalleryItem.Item).Outline.Color as IRgbColor); //设置外框线宽度初始值 this.nudWidth.Value = (decimal)((IFillSymbol)this.pStyleGalleryItem.Item).Outline.Width; break; default: color = Color.Black; break; } //设置按钮背景色 this.btnColor.BackColor = color; //预览符号 this.PreviewImage(); } (2) 调整点符号的大小 添加nudSize控件的ValueChanged事件,即在控件的值改变时响应此事件,然后重新设置点符号的大小。代码如下:
/// 调整符号大小-点符号 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void nudSize_ValueChanged(object sender, EventArgs e) { ((IMarkerSymbol)this.pStyleGalleryItem.Item).Size = (double)this.nudSize.Value; this.PreviewImage(); } (3) 调整点符号的角度 添加nudAngle控件的ValueChanged事件,以重新设置点符号的角度。代码如下:
/// 调整符号角度-点符号 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void nudAngle_ValueChanged(object sender, EventArgs e) { ((IMarkerSymbol)this.pStyleGalleryItem.Item).Angle = (double)this.nudAngle.Value; this.PreviewImage(); } (4) 调整线符号和面符号的线宽 添加nudWidth控件的ValueChanged事件,以重新设置线符号的线宽和面符号的外框线的线宽。代码如下:
(5) 颜色转换 在ArcGIS Engine中,颜色由IRgbColor接口实现,而在.NET框架中,颜色则由Color结构表示。故在调整颜色参数之前,我们必须完成以上两种不同颜色表示方式的转换。关于这两种颜色结构的具体信息,请大家自行查阅相关资料。下面添加两个颜色转换函数。 ArcGIS Engine中的IRgbColor接口转换至.NET中的Color结构的函数:
/// 将ArcGIS Engine中的IRgbColor接口转换至.NET中的Color结构 /// </summary> /// <param name="pRgbColor">IRgbColor</param> /// <returns>.NET中的System.Drawing.Color结构表示ARGB颜色</returns> public Color ConvertIRgbColorToColor(IRgbColor pRgbColor) { return ColorTranslator.FromOle(pRgbColor.RGB); } .NET中的Color结构转换至于ArcGIS Engine中的IColor接口的函数:
/// 将.NET中的Color结构转换至于ArcGIS Engine中的IColor接口 /// </summary> /// <param name="color">.NET中的System.Drawing.Color结构表示ARGB颜色</param> /// <returns>IColor</returns> public IColor ConvertColorToIColor(Color color) { IColor pColor = new RgbColorClass(); pColor.RGB = color.B * 65536 + color.G * 256 + color.R; return pColor; } (6) 调整所有符号的颜色 选择颜色时,我们调用.NET的颜色对话框ColorDialog,选定颜色后,修改颜色按钮的背景色为选定的颜色,以方便预览。双击btnColor按钮,添加如下代码:
/// <summary> /// 颜色按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnColor_Click(object sender, EventArgs e) { //调用系统颜色对话框 if (this.colorDialog.ShowDialog() == DialogResult.OK) { //将颜色按钮的背景颜色设置为用户选定的颜色 this.btnColor.BackColor = this.colorDialog.Color; //设置符号颜色为用户选定的颜色 switch (this.axSymbologyControl.StyleClass) { //点符号 case esriSymbologyStyleClass.esriStyleClassMarkerSymbols: ((IMarkerSymbol)this.pStyleGalleryItem.Item).Color = this.ConvertColorToIColor(this.colorDialog.Color); break; //线符号 case esriSymbologyStyleClass.esriStyleClassLineSymbols: ((ILineSymbol)this.pStyleGalleryItem.Item).Color = this.ConvertColorToIColor(this.colorDialog.Color); break; //面符号 case esriSymbologyStyleClass.esriStyleClassFillSymbols: ((IFillSymbol)this.pStyleGalleryItem.Item).Color = this.ConvertColorToIColor(this.colorDialog.Color); break; } //更新符号预览 this.PreviewImage(); } } (7) 调整面符号的外框线颜色 同上一步类似,双击btnOutlineColor按钮,添加如下代码:
/// <summary> /// 外框颜色按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOutlineColor_Click(object sender, EventArgs e) { if (this.colorDialog.ShowDialog() == DialogResult.OK) { //取得面符号中的外框线符号 ILineSymbol pLineSymbol = ((IFillSymbol)this.pStyleGalleryItem.Item).Outline; //设置外框线颜色 pLineSymbol.Color = this.ConvertColorToIColor(this.colorDialog.Color); //重新设置面符号中的外框线符号 ((IFillSymbol)this.pStyleGalleryItem.Item).Outline = pLineSymbol; //设置按钮背景颜色 this.btnOutlineColor.BackColor = this.colorDialog.Color; //更新符号预览 this.PreviewImage(); } } 至此,你可以编译运行程序,看看效果如何,是不是感觉很不错了?我们已经能够修改符号的参数,自定义符号了。 但是,SymbologyControl默认加载的是ESRI.ServerStyle文件的样式,用过ArcMap的你可能已经注意到,ArcMap中的Symbol Selector有一个“More Symbols”按钮,可以加载其它的符号和ServerStyle文件。3sdnMap当然“一个都不能少”。
Tags:ArcGIS Engine责任编辑:gissky相关文章列表
基于ArcGIS Engine的图像自动定位显示系统利用ArcGIS Engine编写切图工具的一些探讨 ArcGIS Engine要素渲染和专题图制作 ArcGIS Engine自定义工具类,实现添加图名,比例尺,指北针 ArcGis Engine空间插值方法 热门栏目
推荐文章
热门文章
|