using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataManagementTools;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string[][] strXY;
string[] XY;
string ScaleStr = "+(30,30;120,30;120,15;30,15)-(50,25;80,25;80,20;50,20)-(90,20;95,20;95,18;90,18)";
IFeatureClass pPublicFeatureClass;
IFeatureWorkspace pPublicFeatureWorkspace;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
IAoInitialize pAo = new AoInitializeClass();
pAo.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
IWorkspaceFactory pSdeWorkspaceFactory = new SdeWorkspaceFactory();
IPropertySet pPropertySet = new PropertySetClass();
pPropertySet.SetProperty("Server", "siwei-gr7bzmd3q");
pPropertySet.SetProperty("Instance", "esri_sde2");
pPropertySet.SetProperty("Database", "sde2");
pPropertySet.SetProperty("user", "sde");
pPropertySet.SetProperty("password", "zhangjun1130");
pPropertySet.SetProperty("version", "sde.DEFAULT");
IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pSdeWorkspaceFactory.Open(pPropertySet, 0);
IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass("sde2.SDE.Ring");
pPublicFeatureClass = pFeatureClass;
pPublicFeatureWorkspace = pFeatureWorkspace;
}
private void button1_Click(object sender, EventArgs e)
{
int n = 1;
int begin;
int end;
string[] split2;
string[] split1;
string sub = string.Empty;
for (int i = 1; i <= n; i++)
{
split1 = ScaleStr.Split(new char[] { '+', '-' });
strXY = new string[split1.Length - 1][];
for (int k = 0; k < split1.Length - 1; k++)
{
string a = split1[k + 1];
if (a.Trim() != "")
{
begin = a.IndexOf('(');
end = a.IndexOf(')');
sub = a.Substring(begin + 1, end - begin - 1);
split2 = sub.Split(new char[] { ';' });
strXY[k] = new string[split2.Length];
for (int j = 0; j < split2.Length; j++)
{
strXY[k][j] = split2[j]; //返回需要的数组,x,y对
}
}
}
}
IPoint pPoint;
IPolygon pPolygon1 = new PolygonClass();
IPointCollection pPointCollection1 = (IPointCollection)pPolygon1;
ITopologicalOperator2 pTopPoerator1 = (ITopologicalOperator2)pPolygon1;
object _missing = Type.Missing;
double x, y;
for (int i = 0; i < strXY[0].Length; i++)
{
XY = strXY[0][i].Split(new char[] { ',' });
x = double.Parse(XY[0]);
y = double.Parse(XY[1]);
pPoint = new PointClass();
pPoint.PutCoords(x, y);
pPointCollection1.AddPoint(pPoint, ref _missing, ref _missing);
}
pPolygon1.Close();
pTopPoerator1.IsKnownSimple_2 = false;
pTopPoerator1.Simplify();
pPolygon1.SnapToSpatialReference();
IPolygon pPolygon2 = new PolygonClass();
IPointCollection pPointCollection2 = (IPointCollection)pPolygon2;
ITopologicalOperator2 pTopPoerator2 = (ITopologicalOperator2)pPolygon2;
for (int i = 0; i < strXY[1].Length; i++)
{
XY = strXY[1][i].Split(new char[] { ',' });
x = double.Parse(XY[0]);
y = double.Parse(XY[1]);
pPoint = new PointClass();
pPoint.PutCoords(x, y);
pPointCollection2.AddPoint(pPoint, ref _missing, ref _missing);
}
pPolygon2.Close();
pTopPoerator2.IsKnownSimple_2 = false;
pTopPoerator2.Simplify();
pPolygon2.SnapToSpatialReference();
IPolygon pPolygon3 = new PolygonClass();
IPointCollection pPointCollection3 = (IPointCollection)pPolygon3;
ITopologicalOperator2 pTopPoerator3 = (ITopologicalOperator2)pPolygon3;
for (int i = 0; i < strXY[2].Length; i++)
{
XY = strXY[2][i].Split(new char[] { ',' });
x = double.Parse(XY[0]);
y = double.Parse(XY[1]);
pPoint = new PointClass();
pPoint.PutCoords(x, y);
pPointCollection3.AddPoint(pPoint, ref _missing, ref _missing);
}
pPolygon3.Close();
pTopPoerator3.IsKnownSimple_2 = false;
pTopPoerator3.Simplify();
pPolygon3.SnapToSpatialReference();
IPolygon pGeometry = (IPolygon)pTopPoerator1.Difference(pPolygon2);
pGeometry = (IPolygon)(pGeometry as ITopologicalOperator).Difference(pPolygon3);
IFeature pFeature=null;
IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pPublicFeatureWorkspace;
pWorkspaceEdit.StartEditing(true);
pWorkspaceEdit.StartEditOperation();
#region 使用FeatureBuffer的方法成功
IFeatureBuffer pFeatureBuffer = pPublicFeatureClass.CreateFeatureBuffer();
IFeatureCursor pFeatureCursor = pPublicFeatureClass.Insert(true);
//目前之设置几何字段
pFeatureBuffer.Shape = pGeometry;
pFeatureCursor.InsertFeature(pFeatureBuffer);
pFeatureCursor.Flush();
#endregion 5句话
#region //使用CreateFeature的方法成功
//pFeature =pPublicFeatureClass.CreateFeature();
//pFeature.Shape = pPolygon;
//pFeature.Store();
#endregion 3句话
pWorkspaceEdit.StopEditOperation();
pWorkspaceEdit.StopEditing(true);
}
}
}