1、 pLegendClass = tempLegendClass;/通过点击 toccontrol 时候可以获得要素类的 LegendClass! pLayer = tempLayer;/点击的图层4. 窗体加载事件:private void SymbologyFrm_Load(object sender, EventArgs e) switch(IFeatureLayer)pLayer).FeatureClass.ShapeType)/判断图层中要素类的图形类型,不同类型显示的调节值的控件不同 case esriGeometryType.esriGeometryPoint:/点 pStyleC
2、lass = esriSymbologyStyleClass.esriStyleClassMarkerSymbols; lbColor.Visible = true; lbWidth.Visible = true; lbWidth.Text = 符号大小; lbAngle.Visible = true; btColor.Visible = true; nudWidth.Visible = true; cbColor.Visible = true; nudAngle.Visible = true; break; case esriGeometryType.esriGeometryPolyline
3、:/线 pStyleClass = esriSymbologyStyleClass.esriStyleClassLineSymbols; lbColor.Location = System.Drawing.Point.Add(lbColor.Location, new Size(0, 12); lbWidth.Location = System.Drawing.Point.Add(lbWidth.Location, new Size(0, 24);线符号粗细 btColor.Location = System.Drawing.Point.Add(btColor.Location, new Si
4、ze(0, 12); cbColor.Location = System.Drawing.Point.Add(cbColor.Location, new Size(0, 12); nudWidth.Location = System.Drawing.Point.Add(nudWidth.Location, new Size(0, 24); case esriGeometryType.esriGeometryPolygon:/面 pStyleClass = esriSymbologyStyleClass.esriStyleClassFillSymbols;框线宽度 lbOutlineColor.
5、Visible = true; btOutlineColor.Visible = true; cbOutlineColor.Visible = true; default: this.Close(); string strInstall = C:Program Files (x86)ArcGIS/安装目录,10中可以用函数获得 RuntimeManager 可以获取!/ESRI.ArcGIS.RuntimeManager.ActiveRuntime.Path 可以获得 Engine 的安装目录 string stylePath = strInstall + StylesESRI.ServerS
6、tyle/获取 ESRI.ServerStyle 文件 axSymbologyControl1.LoadStyleFile(stylePath);/加载此文件 axSymbologyControl1.StyleClass = pStyleClass;/将上面获得的 pStyleClass 赋值过去,显示点、线还是面,由此决定! IStyleGalleryItem pCurrentStyleGalleryItem = new StyleGalleryItem();/新建当前符号的实例 pCurrentStyleGalleryItem.Name = 当前符号 pCurrentStyleGaller
7、yItem.Item = pLegendClass.Symbol;/将当前的图例 symbol 赋值过去 ISymbologyStyleClass pSymbologyStyleClass = axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);/QI,加入这个新建项 pSymbologyStyleClass.AddItem(pCurrentStyleGalleryItem, 0); pSymbologyStyleClass.SelectItem(0); /同时选中5. 选择项的时候触发:private void
8、axSymbologyControl1_OnItemSelected(object sender, ISymbologyControlEvents_OnItemSelectedEvent e) pStyleGalleryItem = e.styleGalleryItem as IStyleGalleryItem;/获取选择项 PreviewPicture();/在图片框中显示 if (IFeatureLayer)pLayer).FeatureClass.ShapeType = esriGeometryType.esriGeometryPoint)/点,将属性传递到调节的控件上 IRgbColo
9、r pColor = (IMarkerSymbol)pStyleGalleryItem.Item).Color as IRgbColor; btColor.BackColor = Color.FromArgb(pColor.Red, pColor.Green, pColor.Blue);/赋值颜色 nudAngle.Value = Convert.ToDecimal(IMarkerSymbol)pStyleGalleryItem.Item).Angle);/赋值角度 nudWidth.Value = Convert.ToDecimal(IMarkerSymbol)pStyleGalleryIt
10、em.Item).Size);/赋值大小 if (IFeatureLayer)pLayer).FeatureClass.ShapeType = esriGeometryType.esriGeometryPolyline)/线 IRgbColor pColor = (ILineSymbol)pStyleGalleryItem.Item).Color as IRgbColor;/赋值线的颜色 nudWidth.Value = Convert.ToDecimal(ILineSymbol)pStyleGalleryItem.Item).Width);/赋值线的宽度 if (IFeatureLayer)
11、pLayer).FeatureClass.ShapeType = esriGeometryType.esriGeometryPolygon)/面 IRgbColor pColor = (IFillSymbol)pStyleGalleryItem.Item).Color as IRgbColor;/赋值填充的颜色 nudWidth.Value = Convert.ToDecimal(IFillSymbol)pStyleGalleryItem.Item).Outline.Width);/赋值边框宽度 pColor = (IFillSymbol)pStyleGalleryItem.Item).Out
12、line.Color as IRgbColor; btOutlineColor.BackColor = Color.FromArgb(pColor.Red, pColor.Green, pColor.Blue);/赋值边框颜色6. 将 pStyleGalleryItem 反映到 picture 上的方法:private void PreviewPicture() ISymbologyStyleClass pSymbologyStyle = axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);/因为其有方法 Prev
13、iewStyle stdole.IPictureDisp picture = pSymbologyStyle.PreviewItem(pStyleGalleryItem, pictureBox1.Width, pictureBox1.Height);/建立实例 Image image = Image.FromHbitmap(new IntPtr(picture.Handle);/转成 C# 支持的 Image 实例 pictureBox1.Image = image;/赋值过去 将控件的操作操作反映到 picture 上:7. 点、线、面填充颜色传递:IRgbColor pColor = ne
14、w RgbColor();/颜色实例pColor.RGB = 255;tagRECT pTag = new tagRECT();/用于下面显示 ColorPalette 的位置pTag.left = btColor.PointToScreen(System.Drawing.Point.Empty).X;/按钮控件的左边全局横坐标pTag.bottom = btColor.PointToScreen(System.Drawing.Point.Empty).Y + btColor.Height;/按钮控件的下边全局纵坐标IColorPalette pColorPalette = new Color
15、Palette();pColorPalette.TrackPopupMenu(ref pTag, pColor, false, 0); /显示 ColorPalettepColor = pColorPalette.Color as IRgbColor;/获取选中的颜色Color color = Color.FromArgb(pColor.Red, pColor.Green, pColor.Blue);/将颜色转为 C# 颜色btColor.BackColor = color;switch (IFeatureLayer)pLayer).FeatureClass.ShapeType)/判断几何体样
16、式/点 (IMarkerSymbol)pStyleGalleryItem.Item).Color = pColor;/转为 IMarkerSymbol,注意改好后要在图片上显示/线 (ILineSymbol)pStyleGalleryItem.Item).Color = pColor;/转为 ILineSymbol/面 (IFillSymbol)pStyleGalleryItem.Item).Color = pColor;/转为 IFillSymbol8. 点的大小、线的宽度、填充边框宽度传递:switch (IFeatureLayer)pLayer).FeatureClass.ShapeTy
17、pe) (IMarkerSymbol)pStyleGalleryItem.Item).Size = Convert.ToDouble(nudWidth.Value);/点的大小,注意改后要在图片上显示 (ILineSymbol)pStyleGalleryItem.Item).Width = Convert.ToDouble(nudWidth.Value);/线的宽度 ILineSymbol pLineSymbol = (IFillSymbol)pStyleGalleryItem.Item).Outline;/实例化一个 linesymbol 然后赋值过去,直接赋值的话没有反应 pLineSym
18、bol.Width = Convert.ToDouble(nudWidth.Value);/赋值 (IFillSymbol)pStyleGalleryItem.Item).Outline = pLineSymbol;/在赋值给填充的外框9. 填充外边框颜色的传递:tagRECT ptagRECT = new tagRECT();ptagRECT.left = btOutlineColor.PointToScreen(System.Drawing.Point.Empty).X;ptagRECT.bottom = btOutlineColor.PointToScreen(System.Drawin
19、g.Point.Empty).Y + btOutlineColor.Height;pColorPalette.TrackPopupMenu(ref ptagRECT, pColor, false, 0);btOutlineColor.BackColor = Color.FromArgb(pColor.Red, pColor.Green, pColor.Blue);ILineSymbol pLineSymbol = (IFillSymbol)pStyleGalleryItem.Item).Outline;pLineSymbol.Color = pColor;(IFillSymbol)pStyle
20、GalleryItem.Item).Outline = pLineSymbol;PreviewPicture();颜色显示效果如下:10. 点的角度实现如下:(IMarkerSymbol)pStyleGalleryItem.Item).Angle = Convert.ToDouble(nudAngle.Value);11. 更多符号的实现:private void btMore_Click(object sender, EventArgs e) if (contextMenuMoreSymbolInitiated = false)/如果没有初始化,则首先初始化 string stylePath
21、 = Program Files (x86)ArcGISStyles/获取 styles 文件夹,并将里面 *.ServerStyle 文件赋值到数组中,用于加载 string strFiles = Directory.GetFiles(stylePath, *.ServerStyle); ToolStripMenuItem symbolContextMenuItem = new ToolStripMenuItemstrFiles.Length + 1;/定义菜单项,最后一个为另类 for (int i = 0; i strFiles.Length; i+) symbolContextMenu
22、Itemi = new ToolStripMenuItem();/首先新建,然后允许选中时是否有 checked 变化 symbolContextMenuItemi.CheckOnClick = true; symbolContextMenuItemi.Text = System.IO.Path.GetFileNameWithoutExtension(strFilesi);/将名字赋值给 text 属性,完整地址赋值给 name,便于加载 if (symbolContextMenuItemi.Text = ESRI) symbolContextMenuItemi.Checked = true;
23、/默认是加载的这个文件,所以默认选中 symbolContextMenuItemi.Name = strFilesi; symbolContextMenuItemstrFiles.Length = new ToolStripMenuItem();/最后一个菜单项 symbolContextMenuItemstrFiles.Length.Text = 更多工具 symbolContextMenuItemstrFiles.Length.Name = AddMoreSymbol contextMenuStrip1.Items.AddRange(symbolContextMenuItem);/将菜单项
24、添加到右键菜单中 contextMenuMoreSymbolInitiated = true;/将此值赋值为 true,以便之后不用执行这一部分了 contextMenuStrip1.Show(btMore.Location);/弹出右键菜单12. 点击右键菜单:private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) ToolStripMenuItem pToolStripMenuItem = e.ClickedItem as ToolStripMenuItem;/首先获取点击项 if (pToolStripMenuItem.Name = )/最后一项,打开对话框,浏览想要打开的文件 if (openFileDialog1.ShowDialog() = DialogResult.OK) axSymbologyControl1.LoadStyleFile(openFileDialog1.FileName); axSymbologyControl1.Refresh(); else/其他项 if (pToolStripMenuIt
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2