ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:105.30KB ,
资源ID:5304033      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5304033.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验三操作步骤.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验三操作步骤.docx

1、实验三操作步骤实验三(一)图层符号选择器的实现1摘要:我们要实现的是图层符号选择器,与ArcMap中的Symbol Selector的类似。本讲较前几讲而言,些许有些复杂,不过只要仔细琢磨,认真操作,你就很容易实现如下所示的符号选择器。 因为本讲篇幅较长,故我将其分成两个阶段,这是第一阶段。图1 在AE开发中,符号选择器有两种实现方式。一是在程序中直接调用ArcMap中的符号选择器,如下所示:图2二是自定义符号选择器,如图1所示。由于第一种方式前提是必须安装ArcGIS Desktop,其界面还是英文的,而对二次开发来说,大部分用户希望应该是中文界面。因此开发人员通常选择第二种方式,本讲也着重

2、讲解第二种方式。自定义符号选择器AE9.3提供了SymbologyControl控件,极大的方便了图层符号选择器的制作。本讲实现的符号选择器有如下功能。用户双击TOCControl控件中图层的符号时,弹出选择符号对话框,对话框能够根据图层类型自动加载相应的符号,如点、线、面。用户可以调整符号的颜色、线宽、角度等参数。还可以打开自定义的符号文件(*.ServerStyle),加载更多的符号。1新建符号选择器窗体新建Winodws窗体,命名为SymbolSelectorFrm,修改窗体的Text属性为“选择符号”。并添加SymbologyControl、GroupBox、PictureBox、Bu

3、tton、Label、NumericUpDown、ColorDialog、Open、ContextMenuStrip控件。控件布局如下所示:AE9.2提供了SymbologyControl控件,极大的方便了图层符号选择器的制作。本讲实现的符号选择器有如下功能。用户双击TOCControl控件中图层的符号时,弹出选择符号对话框,对话框能够根据图层类型自动加载相应的符号,如点、线、面。用户可以调整符号的颜色、线宽、角度等参数。还可以打开自定义的符号文件(*.ServerStyle),加载更多的符号。图32设置控件属性设置相应控件的相关属性,如下表所示(空则不用修改):控件Name属性Text属性其

4、它SymbologyControlaxSymbologyControlPictureBoxptbPreviewLabellblColor颜色LabellblSize大小LabellblWidth线宽LabellblAngle角度LabellblOutlineColor外框颜色NumericUpDownnudSizeNumericUpDownnudWidthNumericUpDownnudAngleButtonbtnColor(设置为空)ButtonbtnOutlineColor(设置为空)ButtonbtnMoreSymbols更多符号ButtonbtnOK确定DialogResult属性设为

5、OKButtonbtnCancel取消GroupBoxgroupBox1预览GroupBoxgroupBox2设置ColorDialogcolorDialogOpenopenFilter属性设置为:Styles文件|*.ServerStyleContextMenuStripcontextMenuStripMoreSymbol 3添加引用在解决方案资源管理器中添加ArcGIS Engine的ESRI.ArcGIS.Geodatabase引用,在SymbolSelectorFrm.cs文件中添加如下引用代码: using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.D

6、isplay;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Geodatabase; 4 初始化(1)添加SymbolSelectorFrm的全局变量,代码如下:private IStyleGalleryItem pStyleGalleryItem;private ILegendClass pLegendClass;private ILayer pLayer;public ISymbol pSymbol;public Image pSymb

7、olImage;(2)修改SymbolSelectorFrm的构造函数,传入图层和图例接口。代码如下:/ / 构造函数,初始化全局变量/ / TOC图例/ 图层public SymbolSelectorFrm(ILegendClass tempLegendClass, ILayer tempLayer) InitializeComponent(); this.pLegendClass = tempLegendClass; this.pLayer = tempLayer;(3)添加SymbolControl的SymbologyStyleClass设置函数SetFeatureClassStyle(

8、),代码如下:/ / 初始化SymbologyControl的StyleClass,图层如果已有符号,则把符号添加到SymbologyControl中的第一个符号,并选中/ / private void SetFeatureClassStyle(esriSymbologyStyleClass symbologyStyleClass) this.axSymbologyControl.StyleClass = symbologyStyleClass; ISymbologyStyleClass pSymbologyStyleClass = this.axSymbologyControl.GetSty

9、leClass(symbologyStyleClass); if (this.pLegendClass != null) IStyleGalleryItem currentStyleGalleryItem = new ServerStyleGalleryItem(); currentStyleGalleryItem.Name = 当前符号; currentStyleGalleryItem.Item = pLegendClass.Symbol; pSymbologyStyleClass.AddItem(currentStyleGalleryItem,0); this.pStyleGalleryI

10、tem = currentStyleGalleryItem; pSymbologyStyleClass.SelectItem(0); (4)添加注册表读取函数ReadRegistry(),此函数从注册表中读取ArcGIS的安装路径,代码如下: / / 从注册表中取得指定软件的路径/ / / private string ReadRegistry(string sKey) /Open the subkey for reading Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sK

11、ey, true); if (rk = null) return ; / Get the data from a specified item in the key. return (string)rk.GetValue(InstallDir); (5)添加SymbolSelectorFrm的Load事件。根据图层类型为SymbologyControl导入相应的符号样式文件,如点、线、面,并设置控件的可视性。代码如下:private void SymbolSelectorFrm_Load(object sender, EventArgs e)/取得ArcGIS安装路径string sInsta

12、ll = ReadRegistry(SOFTWAREESRICoreRuntime);/载入ESRI.ServerStyle文件到SymbologyControlthis.axSymbologyControl.LoadStyle + StylesESRI.ServerStyle);/确定图层的类型(点线面),设置好SymbologyControl的StyleClass,设置好各控件的可见性(visible)IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)pLayer;switch (IFeatureLayer)pLayer).Feat

13、ureClass.ShapeType) case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:this.SetFeatureClassStyle(esriSymbologyStyleClass.esriStyleClassMarkerSymbols); this.lblAngle.Visible = true; this.nudAngle.Visible = true; this.lblSize.Visible = true; this.nudSize.Visible = true; this.lblWidth.Visible

14、 = false; this.nudWidth.Visible = false; this.lblOutlineColor.Visible = false; this.btnOutlineColor.Visible = false; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: this.SetFeatureClassStyle(esriSymbologyStyleClass.esriStyleClassLineSymbols); this.lblAngle.Visible = false; th

15、is.nudAngle.Visible = false; this.lblSize.Visible = false; this.nudSize.Visible = false; this.lblWidth.Visible = true; this.nudWidth.Visible = true; this.lblOutlineColor.Visible = false; this.btnOutlineColor.Visible = false; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: this

16、.SetFeatureClassStyle(esriSymbologyStyleClass.esriStyleClassFillSymbols); this.lblAngle.Visible = false; this.nudAngle.Visible = false; this.lblSize.Visible = false; this.nudSize.Visible = false; this.lblWidth.Visible = true; this.nudWidth.Visible = true; this.lblOutlineColor.Visible = true; this.bt

17、nOutlineColor.Visible = true; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultiPatch: this.SetFeatureClassStyle(esriSymbologyStyleClass.esriStyleClassFillSymbols); this.lblAngle.Visible = false; this.nudAngle.Visible = false; this.lblSize.Visible = false; this.nudSize.Visible = fal

18、se; this.lblWidth.Visible = true; this.nudWidth.Visible = true; this.lblOutlineColor.Visible = true; this.btnOutlineColor.Visible = true; break; default: this.Close(); break; (6)双击确定按钮和取消按钮,分别添加如下代码: / / 确定按钮/ / / private void btnOK_Click(object sender, EventArgs e) /取得选定的符号 this.pSymbol = (ISymbol)

19、pStyleGalleryItem.Item; /更新预览图像 this.pSymbolImage = this.ptbPreview.Image; /关闭窗体 this.Close();/ / 取消按钮/ / / private void btnCancel_Click(object sender, EventArgs e) this.Close(); (7)为了操作上的方便,我们添加SymbologyControl的DoubleClick事件,当双击符号时同按下确定按钮一样,选定符号并关闭符号选择器窗体。代码如下: / / 双击符号同单击确定按钮,关闭符号选择器。/ / / private

20、 void axSymbologyControl_OnDoubleClick(object sender, ESRI.ArcGIS.Controls.ISymbologyControlEvents_OnDoubleClickEvent e) this.btnOK.PerformClick(); (8)再添加符号预览函数,当用户选定某一符号时,符号可以显示在PictureBox控件中,方便预览,函数代码如下:/ / 把选中并设置好的符号在picturebox控件中预览/ private void PreviewImage() stdole.IPictureDisp picture = this.

21、axSymbologyControl.GetStyleClass(this.axSymbologyControl.StyleClass).PreviewItem(pStyleGalleryItem, this.ptbPreview.Width, this.ptbPreview.Height); System.Drawing.Image image = System.Drawing.Image.FromHbitmap(new System.IntPtr(picture.Handle); this.ptbPreview.Image = image; (9)当SymbologyControl的样式改

22、变时,需要重新设置符号参数调整控件的可视性,故要添加SymbologyControl的OnStyleClassChanged事件,事件代码与Load事件类似,如下: / / 当样式(Style)改变时,重新设置符号类型和控件的可视性/ / / private void axSymbologyControl_OnStyleClassChanged(object sender, ESRI.ArcGIS.Controls.ISymbologyControlEvents_OnStyleClassChangedEvent e) switch (esriSymbologyStyleClass)(e.sym

23、bologyStyleClass) case esriSymbologyStyleClass.esriStyleClassMarkerSymbols: this.lblAngle.Visible = true; this.nudAngle.Visible = true; this.lblSize.Visible = true; this.nudSize.Visible = true; this.lblWidth.Visible = false; this.nudWidth.Visible = false; this.lblOutlineColor.Visible = false; this.b

24、tnOutlineColor.Visible = false; break; case esriSymbologyStyleClass.esriStyleClassLineSymbols: this.lblAngle.Visible = false; this.nudAngle.Visible = false; this.lblSize.Visible = false; this.nudSize.Visible = false; this.lblWidth.Visible = true; this.nudWidth.Visible = true; this.lblOutlineColor.Vi

25、sible = false; this.btnOutlineColor.Visible = false; break; case esriSymbologyStyleClass.esriStyleClassFillSymbols: this.lblAngle.Visible = false; this.nudAngle.Visible = false; this.lblSize.Visible = false; this.nudSize.Visible = false; this.lblWidth.Visible = true; this.nudWidth.Visible = true; th

26、is.lblOutlineColor.Visible = true; this.btnOutlineColor.Visible = true; break; 5 调用自定义符号选择器通过以上操作,本符号选择器雏形已经完成,我们可以3sdnMap主窗体中调用并进行测试。如果您已经完成“直接调用ArcMap中的符号选择器”这一节,请注释axTOCControl1_OnDoubleClick事件响应函数里的代码,并添加如下代码。如果您是直接学习自定义符号选择器这一节的,请先添加axTOCControl1控件的OnDoubleClick事件,再添加如下事件响应函数代码: / / 双击TOCContro

27、l控件时触发的事件/ / / private void axTOCControl1_OnDoubleClick(object sender, ITOCControlEvents_OnDoubleClickEvent e) esriTOCControlItem itemType = esriTOCControlItem.esriTOCControlItemNone; IBasicMap basicMap = null; ILayer layer = null; object unk = null; object data = null; axTOCControl1.HitTest(e.x, e.

28、y, ref itemType, ref basicMap, ref layer, ref unk, ref data); if (e.button = 1) if(itemType=esriTOCControlItem.esriTOCControlItemLegendClass) /取得图例 ILegendClass pLegendClass = (ILegendGroup)unk).get_Class(int)data); /创建符号选择器SymbolSelector实例 SymbolSelectorFrm SymbolSelectorFrm = new SymbolSelectorFrm(pLegendClass, layer); if (SymbolSelectorFrm.ShowDialog() = DialogResult.OK) /局部更新主Map控件 m_mapControl.ActiveView.PartialRefre

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1