/** 实习课上讲进阶功能所用文档,因为赶时间从网上抄抄改改,凑合能用,记录一下以备个人后用。** -------------------------------------------------------------------** 使用前提:已搭建好AE的GIS基本框架,包括TOC、mapcontrol、toolbar拖控件,mxd、shp文件载入显示,查看图层属性表等** -------------------------------------------------------------------*/
/* Form1中的using */using System;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.esriSystem;using System.Drawing;using System.Runtime.InteropServices;using ESRI.ArcGIS.DataSourcesFile;using System.Collections;/** 一、符号设计** 在TOC的doubleclick事件中写入:*/esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemNone;ILayer iLayer = null;IBasicMap iBasicMap = null;object unk = null;object data = null;axTOCControl1.HitTest( e.x, e.y, ref toccItem, ref iBasicMap, ref iLayer, ref unk, ref data ); /* 获取所点击图例及其图层 */if ( e.button == 1 ){if ( toccItem == esriTOCControlItem.esriTOCControlItemLegendClass ){ILegendClass pLC = new LegendClassClass();pLC = ( (ILegendGroup) unk).get_Class( (int) data ); /* 获取图例 */ISymbol pSym = pLC.Symbol; /* 获取图例的符号 */ESRI.ArcGIS.DisplayUI.ISymbolSelector pSS = new ESRI.ArcGIS.DisplayUI.SymbolSelectorClass(); /* 创建符号选择器 */bool a = false;pSS.AddSymbol( pSym );a = pSS.SelectSymbol( 0 ); /* 打开符号选择器 */if ( a ){pLC.Symbol = pSS.GetSymbolAt( 0 );}this.axMapControl1.ActiveView.Refresh();this.axTOCControl1.Refresh();}
}/** 二、创建要素** 1.创建并添加shp新图层*//* 点shp的创建并添加 */private void 点ToolStripMenuItem_Click( object sender, EventArgs e ){string pointshppath = "";SaveFileDialog spointdlg = new SaveFileDialog(); /* 打开保存文件对话框,设置保存路径和shp文件名 */if ( spointdlg.ShowDialog() == DialogResult.OK ){pointshppath = spointdlg.FileName;}else {return;}/* 准备好要素类空对象 */IFeatureClass m_pointfeatureclass = null;/* 从文件路径中分解出文件夹路径和文件名称 */int count = pointshppath.LastIndexOf ("\");string folder = pointshppath.Substring(0, count);string name = pointshppath.Substring(count + 1, pointshppath.Length - count - 1);//根据文件夹路径创建工作空间工厂和工作空间

IWorkspace ipws;IWorkspaceFactory ipwsf = new ShapefileWorkspaceFactoryClass();ipws = ipwsf.OpenFromFile(folder, 0);//转为要素工作空间

IFeatureWorkspace ifeatws;ifeatws = ipws as IFeatureWorkspace;//对shp文件的一些必要设置,除了红字部分外都不用改

IFields pFields = new FieldsClass();IField pField = new FieldClass();IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;IFieldEdit pFieldEdit = pField as IFieldEdit;IGeometryDef ipGeodef = new GeometryDefClass();IGeometryDefEdit ipGeodefEdit = ipGeodef as IGeometryDefEdit;ISpatialReference ipSpatialRef;IUnknownCoordinateSystem iunknowncoord = new UnknownCoordinateSystemClass();ipSpatialRef = iunknowncoord;ipGeodefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;//确定你要生成的shp的几何类型(点线面)

ipSpatialRef.SetMDomain(-10000, 10000);ipGeodefEdit.HasM_2 = false;ipGeodefEdit.HasZ_2 = false;ipGeodefEdit.SpatialReference_2 = ipSpatialRef;pFieldEdit.Name_2 = "Shape ";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;pFieldEdit.GeometryDef_2 = ipGeodef;pFieldsEdit.AddField(pField);//

//创建要素类并导出shp文件于预设文件路径

m_pointfeatureclass = ifeatws.CreateFeatureClass(name, pFields, null, null, esriFeatureType.esriFTSimple, "Shape ", " ");//加载新创建的shp文件并调到图层显示顺序的最顶层

axMapControl1.AddShapeFile(folder,name);axMapControl1.MoveLayerTo(0, axMapControl1.LayerCount - 1);return;}//线shp的创建并添加private void 线ToolStripMenuItem_Click(object sender, EventArgs e){string lineshppath = " ";SaveFileDialog slinedlg = new SaveFileDialog();//打开保存文件对话框,设置保存路径和shp文件名if (slinedlg.ShowDialog() == DialogResult.OK){lineshppath = slinedlg.FileName;}else{return;}//准备好要素类空对象

IFeatureClass m_linefeatureclass = null;//从文件路径中分解出文件夹路径和文件名称int count = lineshppath.LastIndexOf(" \ ");string folder = lineshppath.Substring(0, count);string name = lineshppath.Substring(count + 1, lineshppath.Length - count - 1);//根据文件夹路径创建工作空间工厂和工作空间

IWorkspace ipws;IWorkspaceFactory ipwsf = new ShapefileWorkspaceFactoryClass();ipws = ipwsf.OpenFromFile(folder, 0);//转为要素工作空间

IFeatureWorkspace ifeatws;ifeatws = ipws as IFeatureWorkspace;//对shp文件的一些必要设置,除了红字部分外都不用改

IFields pFields = new FieldsClass();IField pField = new FieldClass();IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;IFieldEdit pFieldEdit = pField as IFieldEdit;IGeometryDef ipGeodef = new GeometryDefClass();IGeometryDefEdit ipGeodefEdit = ipGeodef as IGeometryDefEdit;ISpatialReference ipSpatialRef;IUnknownCoordinateSystem iunknowncoord = new UnknownCoordinateSystemClass();ipSpatialRef = iunknowncoord;ipGeodefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;//确定你要生成的shp的几何类型(点线面)

ipSpatialRef.SetMDomain(-10000, 10000);ipGeodefEdit.HasM_2 = false;ipGeodefEdit.HasZ_2 = false;ipGeodefEdit.SpatialReference_2 = ipSpatialRef;pFieldEdit.Name_2 = "Shape ";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;pFieldEdit.GeometryDef_2 = ipGeodef;pFieldsEdit.AddField(pField);//

//创建要素类并导出shp文件于预设文件路径

m_linefeatureclass = ifeatws.CreateFeatureClass(name, pFields, null, null, esriFeatureType.esriFTSimple, "Shape ", " ");//加载新创建的shp文件并调到图层显示顺序的最顶层

axMapControl1.AddShapeFile(folder,name);axMapControl1.MoveLayerTo(0, axMapControl1.LayerCount - 1);return;}//面shp的创建并添加private void 面ToolStripMenuItem_Click(object sender, EventArgs e){string polygonshppath = " ";SaveFileDialog spolygondlg = new SaveFileDialog();//打开保存文件对话框,设置保存路径和shp文件名if (spolygondlg.ShowDialog() == DialogResult.OK){polygonshppath = spolygondlg.FileName;}else{return;}//准备好要素类空对象

IFeatureClass m_polygonfeatureclass = null;//从文件路径中分解出文件夹路径和文件名称int count = polygonshppath.LastIndexOf(" \ ");string folder = polygonshppath.Substring(0, count);string name = polygonshppath.Substring(count + 1, polygonshppath.Length - count - 1);//根据文件夹路径创建工作空间工厂和工作空间

IWorkspace ipws;IWorkspaceFactory ipwsf = new ShapefileWorkspaceFactoryClass();ipws = ipwsf.OpenFromFile(folder, 0);//转为要素工作空间

IFeatureWorkspace ifeatws;ifeatws = ipws as IFeatureWorkspace;//对shp文件的一些必要设置,除了红字部分外都不用改

IFields pFields = new FieldsClass();IField pField = new FieldClass();IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;IFieldEdit pFieldEdit = pField as IFieldEdit;IGeometryDef ipGeodef = new GeometryDefClass();IGeometryDefEdit ipGeodefEdit = ipGeodef as IGeometryDefEdit;ISpatialReference ipSpatialRef;IUnknownCoordinateSystem iunknowncoord = new UnknownCoordinateSystemClass();ipSpatialRef = iunknowncoord;ipGeodefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;//确定你要生成的shp的几何类型(点线面)

ipSpatialRef.SetMDomain(-10000, 10000);ipGeodefEdit.HasM_2 = false;ipGeodefEdit.HasZ_2 = false;ipGeodefEdit.SpatialReference_2 = ipSpatialRef;pFieldEdit.Name_2 = "Shape ";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;pFieldEdit.GeometryDef_2 = ipGeodef;pFieldsEdit.AddField(pField);//

//创建要素类并导出shp文件于预设文件路径

m_polygonfeatureclass = ifeatws.CreateFeatureClass(name, pFields, null, null, esriFeatureType.esriFTSimple, "Shape ", " ");//加载新创建的shp文件并调到图层显示顺序的最顶层

axMapControl1.AddShapeFile(folder,name);axMapControl1.MoveLayerTo(0, axMapControl1.LayerCount - 1);return;}/*
2.在shp中绘制点线面要素并储存课上只提到调用Toolbar里的工具:使用流程:开始编辑——>选择目标图层——>开启草图工具——>绘制新图形——>保存并停止编辑而写代码方式的主要思路如下(没做撤销和双缓冲):
*/
//获取MapControl中的全部图层名称,并加入ComboBox//图层
toolStripComboBox1.Visible = true;ILayer pLayer;//图层名称string strLayerName;for (int i = 0; i < this.axMapControl1.LayerCount; i++){pLayer = this.axMapControl1.get_Layer(i);strLayerName = pLayer.Name;//图层名称加入ComboBoxthis.toolStripComboBox1.Items.Add(strLayerName);}//默认显示第一个选项this.toolStripComboBox1.SelectedIndex = 0;//用三个int成员变量drawpoint、drawline、drawregion指示添加的是点、线还是面//用三个IFeatureClass成员变量startpointshp、startlineshp、startpolygonshp来取出所选图层的要素类//用一个点集数列IPointArray pts存储画线、面时连续产生的节点//当combobox中选项变化时判断所选图层的要素类的几何类型并取出

IFeatureLayer layer = axMapControl1.get_Layer(this.toolStripComboBox1.SelectedIndex) as IFeatureLayer;if (layer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint){startpointshp = layer.FeatureClass;drawpoint = 1;drawline = 0;drawregion = 0;}if (layer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline){startlineshp = layer.FeatureClass;drawpoint = 0;drawline = 1;drawregion = 0;}if (layer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon){startpolygonshp = layer.FeatureClass;drawpoint = 0;drawline = 0;drawregion = 1;}
//在onmousedown(onmouseup也行)中进行判断并创建新要素图形
if (e.button == 2 &&drawline ==0 &&drawpoint==0 && drawregion==0){m_menuMap.PopupMenu(e.x, e.y, m_mapControl.hWnd);//没开启添加要素功能,则正常弹菜单项
}if (e.button == 1 && drawpoint == 1){IPoint pt;pt = axMapControl1.ToMapPoint(e.x, e.y);IFeature pFeature = startpointshp.CreateFeature();pFeature.Shape = pt;pFeature.Store();this.axMapControl1.ActiveView.Refresh();return;}if (e.button == 1 && drawline == 1)//左键创建线的节点
{IPoint pt;pt = axMapControl1.ToMapPoint(e.x, e.y);pts.Add(pt);return;}if (e.button == 2 && drawline == 1)//右键根据节点创建线
{ESRI.ArcGIS.Geometry.IPolyline ipPolyline = new PolylineClass();ESRI.ArcGIS.Geometry.IPointCollection ipPointCol = (IPointCollection)ipPolyline;object missing = Type.Missing;for (int i = 0; i < pts.Count; i++){object t = pts.get_Element(i);ESRI.ArcGIS.Geometry.Point p = (ESRI.ArcGIS.Geometry.Point)t;if (p != null){ipPointCol.AddPoint(p, ref missing, ref missing);}}IPolyline polyline = ipPolyline;IFeature pFeature = startlineshp.CreateFeature();pFeature.Shape = polyline;pFeature.Store();this.axMapControl1.ActiveView.Refresh();pts.RemoveAll();return;}if (e.button == 1 && drawregion == 1)//左键创建面的节点
{IPoint pt;pt = axMapControl1.ToMapPoint(e.x, e.y);pts.Add(pt);return;}if (e.button == 2 && drawregion == 1)//右键根据节点创建面
{ESRI.ArcGIS.Geometry.IPolygon ipPolyGon = new PolygonClass();ESRI.ArcGIS.Geometry.IPointCollection ipPointCol = (IPointCollection)ipPolyGon;object missing = Type.Missing;for (int i = 0; i < pts.Count; i++){object t = pts.get_Element(i);ESRI.ArcGIS.Geometry.Point p = (ESRI.ArcGIS.Geometry.Point)t;if (p != null){ipPointCol.AddPoint(p, ref missing, ref missing);}}ipPointCol.AddPoint(pts.get_Element(0), ref missing, ref missing);//面的坐标串首尾坐标应一致(如P1-P2-P3-P4-P1)
IPolygon polygon = ipPolyGon;IFeature pFeature = startpolygonshp.CreateFeature();pFeature.Shape = polygon;pFeature.Store();this.axMapControl1.ActiveView.Refresh();pts.RemoveAll();return;}//结束创建时执行清理、重置
drawpoint = 0;drawline = 0;drawregion = 0;pts.RemoveAll();startpointshp = null;startlineshp = null;startpolygonshp = null;this.toolStripComboBox1.Visible = false;this.toolStripComboBox1.Items.Clear();/*3.shp中点线面要素的图形编辑使用Toolbar使用流程:开始编辑——>选择目标图层——>开启编辑工具——>图形编辑——>保存并停止编辑三、属性表编辑1.在属性表窗体设计中加一个按钮用于更新数据2.属性表类中至少应有如下成员对象,在表开启后这些值应都已经赋值或初始化* */public DataTable attributeTable;//你的表string tableName;//你的表的名字public List array = new List();//你用来记录哪些行的数据被改变了的数列public ILayer currentlayer;//你用来获取当前图层的对象其中,比如,attributeTable和tableName可在Load函数中赋值,currentlayer可在构造函数中赋值/*
3.添加如下函数*///在按钮的点击事件中添加如下代码private void button1_Click(object sender, EventArgs e){if (array.Count < 1)//没有记录到任何数据可能改变的行

{MessageBox.Show(" 未 修改任何数据 ! ");return;}array.Sort();ILayer player = this.currentlayer;UpdateFTOnDV(player, attributeTable, array.ToArray());dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;//dataGridView1是你属性表中显示数据的视图

dataGridView1.Refresh();}//在表的CellValueChanged事件中添加如下代码private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e){array.Add(e.RowIndex);//将有值改变的那个行的行号记录下来

}//在属性表类中添加如下函数public void UpdateFTOnDV(ILayer player, DataTable pdatatable, int[] array){IFeatureLayer pFTClass = player as IFeatureLayer;ITable pTable = pFTClass as ITable;IRow pRow;ICursor pCursor = pTable.GetRows(array, false);for (int i = 0; i < array.Length; i++){pRow = pCursor.NextRow();int k = array[i];for (int j = 2; j < pdatatable.Columns.Count; j++){object pgridview = pdatatable.Rows[k][j];object prow = pRow.get_Value(j);if (prow.ToString() != pgridview.ToString())//当表格中值与shp文件属性表中值不同时发生替换

{if (pgridview == System.DBNull.Value){string skipinfo = "第 " + (k+1).ToString() + "行第 " + (j+1).ToString() + " 列 的数据 可 为 空 自动跳过修改 ";MessageBox.Show(skipinfo);continue;}pRow.set_Value(j, pgridview);pRow.Store();}}}MessageBox.Show("数据保存 成 功 ! ");}/*
四、空间分析以缓冲区分析为例,实现对某类地物周边一定范围内其他地物的统计与显示。*///buffer类中的usingusing System;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Geoprocessing;using ESRI.ArcGIS.Geoprocessor;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.AnalysisTools;using System.Collections;
/*1.创建一个windows窗体类buffer.cs2.对窗体进行设计目标地物(上面的)下拉框的Name设为comboBox2被统计地物(下面的)下拉框Name设为comboBox3分析距离textBox的Name设为textBox1按钮Name设为button13.添加相关代码
*/
//1>Buffer类中添加三个成员private static int counter = 1;//用来对生成图层的计数private AxMapControl axMapControl1;//用来获取主框架传进来的AxMapControlprivate ArrayList flyr = new ArrayList();//用来存储生成的图层,便于结束分析后删除//2>修改构造函数为public buffer(AxMapControl mapControl){InitializeComponent();this.axMapControl1 = mapControl;}//3>在窗体设计布局中,双击Buffer的对话框,进入buffer_Load函数,添加以下代码//MapControl中没有图层时返回if (axMapControl1.LayerCount <= 0)return;ILayer pLayer;//图层string strLayerName;//图层名称//获取MapControl中的全部图层名称,并加入ComboBoxfor (int i = 0; i < axMapControl1.LayerCount; i++){pLayer = axMapControl1.get_Layer(i);strLayerName = pLayer.Name;comboBox2.Items.Add(strLayerName);comboBox3.Items.Add(strLayerName);}//默认显示第一个选项

comboBox2.SelectedIndex = 0;comboBox3.SelectedIndex = 0;//3>在窗体设计布局中,双击按钮,进入click事件,添加以下代码//获取所设置的缓冲区距离string distance = this.textBox1.Text.ToString();//给距离加上单位,默认为米string para = distance + " Meters ";//根据所选图层确定其数据源位置,即shp文件所在的文件夹路径

IDataLayer combo2 = (IDataLayer)axMapControl1.get_Layer(comboBox2.SelectedIndex);IWorkspaceName ws = ((IDatasetName)(combo2.DataSourceName)).WorkspaceName;string featurefolder = ws.PathName;//使用gp处理工具

Geoprocessor gp = new Geoprocessor();//允许覆盖同名文件

gp.OverwriteOutput = true;//调用缓冲区工具

ESRI.ArcGIS.AnalysisTools.Buffer buffertool = new ESRI.ArcGIS.AnalysisTools.Buffer();//设置输入图层路径和输出图层路径

buffertool.in_features = featurefolder+ " \ " + comboBox2.SelectedItem + ".shp ";buffertool.out_feature_class = featurefolder + " \ " + comboBox2.SelectedItem + "_buffer " + counter.ToString() + ".shp ";//设置缓冲区相关参数

buffertool.buffer_distance_or_field = para;buffertool.dissolve_option = "ALL ";//执行try{ gp.Execute(buffertool, null); }catch (Exception ex){MessageBox.Show("ERROR ");return;}//对生成图层的计数

counter++;//用生成的缓冲区与被统计地物进行叠置分析求交集

Intersect pIntersect = new Intersect();int chooselayer = counter - 1;Geoprocessor gp2 = new Geoprocessor();gp2.OverwriteOutput = true;    //允许覆盖同名文件

FeatureLayer pFeatureLayer = new FeatureLayerClass();//设置相关参数object obj = gp2.GetEnvironmentValue("Extent ");gp2.SetEnvironmentValue("Extent ", "MAXOF ");obj = gp2.GetEnvironmentValue("OutputZFlag ");gp2.SetEnvironmentValue("OutputZFlag ", "DEFAULT ");obj = gp2.GetEnvironmentValue("OutputMFlag ");gp2.SetEnvironmentValue("OutputMFlag ", "DEFAULT ");obj = gp2.GetEnvironmentValue("QualifiedFieldNames ");gp2.SetEnvironmentValue("QualifiedFieldNames ", "QUALIFIED ");//把要求交的两个要素放到一个IGpValueTableObject中作为参数

IGpValueTableObject pObject = new GpValueTableObjectClass();pObject.SetColumns(2);object inputfeature = featurefolder + " \ " + comboBox3.SelectedItem + ".shp ";pObject.AddRow(ref inputfeature);object inputfeature2 = featurefolder + " \ " + comboBox2.SelectedItem + "_buffer " + chooselayer.ToString() + ".shp ";pObject.AddRow(ref inputfeature2);//设置输入图层路径和输出图层路径

pIntersect.in_features = pObject;pIntersect.out_feature_class = featurefolder + " \ " + comboBox2.SelectedItem + "_insert " + chooselayer.ToString() + ".shp ";pIntersect.join_attributes = "All ";//执行

IGeoProcessorResult pResult = (IGeoProcessorResult)gp2.Execute(pIntersect, null);//从求交的结果中提取Feature并做相关统计

IGPUtilities pGPUtil = new GPUtilitiesClass();IFeatureClass pFC;IQueryFilter pQF;pGPUtil.DecodeFeatureLayer(pResult.GetOutput(0), out pFC, out pQF);int count = pFC.FeatureCount(null);IFeatureCursor pCursor = pFC.Insert(true);pFeatureLayer.FeatureClass = pFC;//将缓冲区载入地图中显示

axMapControl1.AddShapeFile(featurefolder + " \ ", comboBox2.SelectedItem + "_buffer " + chooselayer.ToString() + ".shp ");axMapControl1.MoveLayerTo(0, axMapControl1.LayerCount - 1);//获取生成的缓冲区对象

FeatureLayer bufferlayer = axMapControl1.get_Layer(axMapControl1.LayerCount - 1) as FeatureLayer;//将求交得到的对象载入地图中显示

pFeatureLayer.Name = comboBox2.SelectedItem + " 周边 " + textBox1.Text + "米内的 " + comboBox3.SelectedItem;axMapControl1.Map.AddLayer(pFeatureLayer);//将生成的缓冲区和求交对象放到一个图层数组中,在关闭缓冲区分析工具后统一移出系统

flyr.Add(bufferlayer);flyr.Add(pFeatureLayer);//将缓冲区分析的结果放到属性表中并显示

ILayer layer = pFeatureLayer as ILayer;FrmAttribute attributeTable = new FrmAttribute(layer, axMapControl1);attributeTable.Show();//4>在窗体的FormClosing事件中,添加以下代码//删除所有生成的缓冲区和求交对象foreach (FeatureLayer pFeatureLayer in flyr){IDataLayer2 OnOff = pFeatureLayer as IDataLayer2;OnOff.Disconnect();axMapControl1.Map.DeleteLayer(pFeatureLayer);}
/*
4.在主窗体中调用此模块首先在菜单栏中新建一个选项如“周边设施分析”之后双击该选项,添加如下代码
*/
buffer b = new buffer(axMapControl1);b.Show();
/*
五、esriAddIn扩展项在ArcEngine中的添加对原代码中接口适当修改,使其可用于ArcEngine二次开发工程中1.在服务中引用“AE开发用”文件夹中的MappingTools.dll2.菜单栏中创建对应菜单,在单击事件中加入调用代码,并在Form1类的顶端填写using MappingTools;
*///调用创建直方图时,是在mapcontrol1的onmousedown事件中触发创建直方图的函数//首先到onmousedown中加入如下代码if (zhifangtu == 1 && e.button==1)//开启了直方图功能且在地图上单击了鼠标左键时

{Createzft (e.x,e.y);}//之后在Form1主类中加入如下函数

Public void Createzft(int x,int y){MappingTools.CreateGraph a = new MappingTools.CreateGraph();frmGraph frm = new frmGraph(this.axMapControl1);frm.BasePoint = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y);DialogResult re = frm.ShowDialog();}

转载于:https://www.cnblogs.com/gisext/p/7098542.html

AE二次开发中几个功能速成归纳(符号设计器、创建要素、图形编辑、属性表编辑、缓冲区分析)...相关推荐

  1. 从零开始:AE二次开发中获取A点到B点的最佳路径(3)

    在上一篇中,我说明了如何将MapControl添加到WPF中. 在添加过程我,我发现MapControl无法正常接收鼠标滚轮的放大缩小事件,期初我认为是由于MapControl放入WindowsFor ...

  2. 织梦php开发tags功能开发,织梦dedecms二次开发中几个标签的应用

    在织梦dedecms 里面对于数组进行循环的标签有好几个,在前台模板即使用静态模板引擎有,{dede:foreach array='数组名称'}[field:key/] [field:value/]{ ...

  3. 基于C#的AE二次开发之图层右键菜单打开属性表及图层相关操作

    基于C#的AE二次开发之图层右键菜单打开属性表及图层相关操作 我的开发环境为ArcGIS Engine 10.2与Visual studio2010.主地图名称为axMapControl1,Toc目录 ...

  4. 基于C#的AE二次开发-地图渲染之分级设色符号化

    基于C#的AE二次开发-地图渲染之分级设色渲染符号化 我的开发环境为ArcGIS Engine 10.2与Visual studio2010.主地图名称为axMapControl1,Toc目录名为ax ...

  5. lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...

    <毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...

  6. php gridview,PHP编程:yii2-GridView在开发中常用的功能及技巧总结

    <PHP编程:yii2-GridView在开发中常用的功能及技巧总结>要点: 本文介绍了PHP编程:yii2-GridView在开发中常用的功能及技巧总结,希望对您有用.如果有疑问,可以联 ...

  7. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

  8. python在abaqus二次开发_Python在ABAQUS二次开发中的应用实例2ppt

    PPT内容 这是Python在ABAQUS二次开发中的应用实例2ppt,包括了ABAQUS 脚本概述,Python 语言简介,ABAQUS脚本编写等内容,欢迎点击下载. 主要内容 一.ABAQUS 脚 ...

  9. 基于C#的AE二次开发导出地图为JPG、TIF、PDF图片

    基于C#的AE二次开发导出地图为JPG.TIF.PDF图片 我的开发环境为ArcGIS Engine 10.2与Visual studio2010.创建一个菜单或按钮,创建一个点击事件,粘贴代码即可实 ...

最新文章

  1. mac怎么合并两个容器_PDF怎样合并?在Mac上合并PDF文件的最佳方法
  2. 微机原理及接口技术-6
  3. 从马克思哲学客观原理角度——反思大学生创业2017-12-15
  4. laravel 查询
  5. Oracle笔记(十四) 用户管理
  6. Silverlight4中右键菜单实现-附源码下载
  7. [改善Java代码]在equals中使用getClass进行类型判断
  8. 朗科32G TF卡的读写测试
  9. Ubuntu上安装博通无线网卡驱动
  10. 计算机进制之间的转换(2进制、10进制、8进制、16进制)
  11. 射影几何----齐次坐标下的三点共线和非齐次坐标下的三点共线是等价的
  12. [经验分享]长期有效的推广网店的方法
  13. 用户唯一登录,最新登录挤掉以前的登录,实现踢人.
  14. UE4中三维几何总结——几何学基础
  15. 计算机网络socket翻译成中文,Socket的错误码和描述(中英文翻译)
  16. 部署AlphaSSL
  17. android 启动3d加速,内置显卡 六款支持3D加速安卓手机推荐
  18. MVC、MVVM、MVP
  19. js判断一个数字是否是整数
  20. [论文阅读笔记44]Named Entity Recognition without Labelled Data:A Weak Supervision Approach

热门文章

  1. linux配置限额超过7mb警告,centos7.x的磁盘限额配置
  2. 2017 蓝桥杯决赛 C++B(2)瓷砖样式 dfs + hash去重
  3. oracle 数据分列,oracle怎么按照范围分列!求高手帮忙.
  4. 2020年数学建模国赛B题题目和解题思路
  5. 《Shell脚本学习指南》读书笔记
  6. iOS工程师 - 简历
  7. 16含参数的极限问题
  8. 比起结果过程更加重要
  9. 微博做内容和收入来源
  10. uni-app实战之社区交友APP(20)兼容处理和打包上线