035自建符号Symbol选择对话框Word下载.docx
《035自建符号Symbol选择对话框Word下载.docx》由会员分享,可在线阅读,更多相关《035自建符号Symbol选择对话框Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
![035自建符号Symbol选择对话框Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/b294cfb5-e66c-4372-b644-604442db9d52/b294cfb5-e66c-4372-b644-604442db9d521.gif)
pLegendClass=tempLegendClass;
//通过点击toccontrol时候可以获得要素类的LegendClass!
pLayer=tempLayer;
//点击的图层
}
4.窗体加载事件:
privatevoidSymbologyFrm_Load(objectsender,EventArgse)
switch(((IFeatureLayer)pLayer).FeatureClass.ShapeType) //判断图层中要素类的图形类型,不同类型显示的调节值的控件不同
{
caseesriGeometryType.esriGeometryPoint:
//点
pStyleClass=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;
caseesriGeometryType.esriGeometryPolyline:
//线
pStyleClass=esriSymbologyStyleClass.esriStyleClassLineSymbols;
lbColor.Location=System.Drawing.Point.Add(lbColor.Location,newSize(0,12));
lbWidth.Location=System.Drawing.Point.Add(lbWidth.Location,newSize(0,24));
线符号粗细"
btColor.Location=System.Drawing.Point.Add(btColor.Location,newSize(0,12));
cbColor.Location=System.Drawing.Point.Add(cbColor.Location,newSize(0,12));
nudWidth.Location=System.Drawing.Point.Add(nudWidth.Location,newSize(0,24));
caseesriGeometryType.esriGeometryPolygon:
//面
pStyleClass=esriSymbologyStyleClass.esriStyleClassFillSymbols;
框线宽度"
lbOutlineColor.Visible=true;
btOutlineColor.Visible=true;
cbOutlineColor.Visible=true;
default:
this.Close();
}
stringstrInstall=@"
C:
\ProgramFiles(x86)\ArcGIS"
//安装目录,10中可以用函数获得RuntimeManager可以获取!
//ESRI.ArcGIS.RuntimeManager.ActiveRuntime.Path可以获得Engine的安装目录
stringstylePath=strInstall+@"
\Styles\ESRI.ServerStyle"
//获取ESRI.ServerStyle文件
axSymbologyControl1.LoadStyleFile(stylePath);
//加载此文件
axSymbologyControl1.StyleClass=pStyleClass;
//将上面获得的pStyleClass赋值过去,显示点、线还是面,由此决定!
IStyleGalleryItempCurrentStyleGalleryItem=newStyleGalleryItem();
//新建当前符号的实例
pCurrentStyleGalleryItem.Name="
当前符号"
pCurrentStyleGalleryItem.Item=pLegendClass.Symbol;
//将当前的图例symbol赋值过去
ISymbologyStyleClasspSymbologyStyleClass=axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);
//QI,加入这个新建项
pSymbologyStyleClass.AddItem(pCurrentStyleGalleryItem,0);
pSymbologyStyleClass.SelectItem(0);
//同时选中
5.选择项的时候触发:
privatevoidaxSymbologyControl1_OnItemSelected(objectsender,ISymbologyControlEvents_OnItemSelectedEvente)
pStyleGalleryItem=e.styleGalleryItemasIStyleGalleryItem;
//获取选择项
PreviewPicture();
//在图片框中显示
if(((IFeatureLayer)pLayer).FeatureClass.ShapeType==esriGeometryType.esriGeometryPoint) //点,将属性传递到调节的控件上
IRgbColorpColor=((IMarkerSymbol)pStyleGalleryItem.Item).ColorasIRgbColor;
btColor.BackColor=Color.FromArgb(pColor.Red,pColor.Green,pColor.Blue);
//赋值颜色
nudAngle.Value=Convert.ToDecimal(((IMarkerSymbol)pStyleGalleryItem.Item).Angle);
//赋值角度
nudWidth.Value=Convert.ToDecimal(((IMarkerSymbol)pStyleGalleryItem.Item).Size);
//赋值大小
if(((IFeatureLayer)pLayer).FeatureClass.ShapeType==esriGeometryType.esriGeometryPolyline) //线
IRgbColorpColor=((ILineSymbol)pStyleGalleryItem.Item).ColorasIRgbColor;
//赋值线的颜色
nudWidth.Value=Convert.ToDecimal(((ILineSymbol)pStyleGalleryItem.Item).Width);
//赋值线的宽度
if(((IFeatureLayer)pLayer).FeatureClass.ShapeType==esriGeometryType.esriGeometryPolygon) //面
IRgbColorpColor=((IFillSymbol)pStyleGalleryItem.Item).ColorasIRgbColor;
//赋值填充的颜色
nudWidth.Value=Convert.ToDecimal(((IFillSymbol)pStyleGalleryItem.Item).Outline.Width);
//赋值边框宽度
pColor=((IFillSymbol)pStyleGalleryItem.Item).Outline.ColorasIRgbColor;
btOutlineColor.BackColor=Color.FromArgb(pColor.Red,pColor.Green,pColor.Blue);
//赋值边框颜色
6.将pStyleGalleryItem反映到picture上的方法:
privatevoidPreviewPicture()
ISymbologyStyleClasspSymbologyStyle=axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);
//因为其有方法PreviewStyle
stdole.IPictureDisppicture=pSymbologyStyle.PreviewItem(pStyleGalleryItem,pictureBox1.Width,pictureBox1.Height);
//建立实例
Imageimage=Image.FromHbitmap(newIntPtr(picture.Handle));
//转成C#支持的Image实例
pictureBox1.Image=image;
//赋值过去
▲将控件的操作操作反映到picture上:
7.点、线、面填充颜色传递:
IRgbColorpColor=newRgbColor();
//颜色实例
pColor.RGB=255;
tagRECTpTag=newtagRECT();
//用于下面显示ColorPalette的位置
pTag.left=btColor.PointToScreen(System.Drawing.Point.Empty).X;
//按钮控件的左边全局横坐标
pTag.bottom=btColor.PointToScreen(System.Drawing.Point.Empty).Y+btColor.Height;
//按钮控件的下边全局纵坐标
IColorPalettepColorPalette=newColorPalette();
pColorPalette.TrackPopupMenu(refpTag,pColor,false,0);
//显示ColorPalette
pColor=pColorPalette.ColorasIRgbColor;
//获取选中的颜色
Colorcolor=Color.FromArgb(pColor.Red,pColor.Green,pColor.Blue);
//将颜色转为C#颜色
btColor.BackColor=color;
switch(((IFeatureLayer)pLayer).FeatureClass.ShapeType) //判断几何体样式
//点
((IMarkerSymbol)pStyleGalleryItem.Item).Color=pColor;
//转为IMarkerSymbol,注意改好后要在图片上显示
//线
((ILineSymbol)pStyleGalleryItem.Item).Color=pColor;
//转为ILineSymbol
//面
((IFillSymbol)pStyleGalleryItem.Item).Color=pColor;
//转为IFillSymbol
8.点的大小、线的宽度、填充边框宽度传递:
switch(((IFeatureLayer)pLayer).FeatureClass.ShapeType)
((IMarkerSymbol)pStyleGalleryItem.Item).Size=Convert.ToDouble(nudWidth.Value);
//点的大小,注意改后要在图片上显示
((ILineSymbol)pStyleGalleryItem.Item).Width=Convert.ToDouble(nudWidth.Value);
//线的宽度
ILineSymbolpLineSymbol=((IFillSymbol)pStyleGalleryItem.Item).Outline;
//实例化一个linesymbol然后赋值过去,直接赋值的话没有反应
pLineSymbol.Width=Convert.ToDouble(nudWidth.Value);
//赋值
((IFillSymbol)pStyleGalleryItem.Item).Outline=pLineSymbol;
//在赋值给填充的外框
9.填充外边框颜色的传递:
tagRECTptagRECT=newtagRECT();
ptagRECT.left=btOutlineColor.PointToScreen(System.Drawing.Point.Empty).X;
ptagRECT.bottom=btOutlineColor.PointToScreen(System.Drawing.Point.Empty).Y+btOutlineColor.Height;
pColorPalette.TrackPopupMenu(refptagRECT,pColor,false,0);
btOutlineColor.BackColor=Color.FromArgb(pColor.Red,pColor.Green,pColor.Blue);
ILineSymbolpLineSymbol=((IFillSymbol)pStyleGalleryItem.Item).Outline;
pLineSymbol.Color=pColor;
((IFillSymbol)pStyleGalleryItem.Item).Outline=pLineSymbol;
PreviewPicture();
颜色显示效果如下:
10.点的角度实现如下:
((IMarkerSymbol)pStyleGalleryItem.Item).Angle=Convert.ToDouble(nudAngle.Value);
11.更多符号的实现:
privatevoidbtMore_Click(objectsender,EventArgse)
if(contextMenuMoreSymbolInitiated==false) //如果没有初始化,则首先初始化
stringstylePath=@"
\ProgramFiles(x86)\ArcGIS\Styles"
//获取styles文件夹,并将里面*.ServerStyle文件赋值到数组中,用于加载
string[]strFiles=Directory.GetFiles(stylePath,"
*.ServerStyle"
);
ToolStripMenuItem[]symbolContextMenuItem=newToolStripMenuItem[strFiles.Length+1];
//定义菜单项,最后一个为另类
for(inti=0;
i<
strFiles.Length;
i++)
symbolContextMenuItem[i]=newToolStripMenuItem();
//首先新建,然后允许选中时是否有checked变化
symbolContextMenuItem[i].CheckOnClick=true;
symbolContextMenuItem[i].Text=System.IO.Path.GetFileNameWithoutExtension(strFiles[i]);
//将名字赋值给text属性,完整地址赋值给name,便于加载
if(symbolContextMenuItem[i].Text=="
ESRI"
)
symbolContextMenuItem[i].Checked=true;
//默认是加载的这个文件,所以默认选中
symbolContextMenuItem[i].Name=strFiles[i];
symbolContextMenuItem[strFiles.Length]=newToolStripMenuItem();
//最后一个菜单项
symbolContextMenuItem[strFiles.Length].Text="
更多工具"
symbolContextMenuItem[strFiles.Length].Name="
AddMoreSymbol"
contextMenuStrip1.Items.AddRange(symbolContextMenuItem);
//将菜单项添加到右键菜单中
contextMenuMoreSymbolInitiated=true;
//将此值赋值为true,以便之后不用执行这一部分了
contextMenuStrip1.Show(btMore.Location);
//弹出右键菜单
12.点击右键菜单:
privatevoidcontextMenuStrip1_ItemClicked(objectsender,ToolStripItemClickedEventArgse)
ToolStripMenuItempToolStripMenuItem=e.ClickedItemasToolStripMenuItem;
//首先获取点击项
if(pToolStripMenuItem.Name=="
) //最后一项,打开对话框,浏览想要打开的文件
if(openFileDialog1.ShowDialog()==DialogResult.OK)
axSymbologyControl1.LoadStyleFile(openFileDialog1.FileName);
axSymbologyControl1.Refresh();
else //其他项
if(pToolStripMenuIt