-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEraseClass.cs
More file actions
136 lines (69 loc) · 2.42 KB
/
EraseClass.cs
File metadata and controls
136 lines (69 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
namespace ArcEngine
{
public class EraseClass
{
///<summary>
///裁切框
///</summary>
private IEnvelope _Envelope;
public IEnvelope pEnvelope
{
get { return _Envelope; }
set { _Envelope = value; }
}
///<summary>
///被裁切图层
///</summary>
private IFeatureClass _FeatureClass;
public IFeatureClass pFeatureClass
{
get { return _FeatureClass; }
set { _FeatureClass = value; }
}
public EraseClass()
{ }
public EraseClass(IEnvelope pEnvelope, IFeatureClass pFeatureClass)
{
_FeatureClass = pFeatureClass;
_Envelope = pEnvelope;
}
public void EraseOper()
{
ISpatialFilter tSF = new SpatialFilterClass();
tSF.Geometry = _Envelope;
tSF.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
//求出与裁切框相交要素
IFeatureCursor tFeatureCursor = _FeatureClass.Search(tSF, false);
IFeature tFeature = tFeatureCursor.NextFeature();
while (tFeature != null)
{
IGeometry tGeo2 = tFeature.ShapeCopy;
ITopologicalOperator tTope2 = tGeo2 as ITopologicalOperator;
tTope2.Simplify();
IGeometry tGeo = tFeature.ShapeCopy;
ITopologicalOperator tTope = tGeo as ITopologicalOperator;
tTope.Simplify();
//用Envelope对要素进行裁切
tTope.Clip(this._Envelope);
IGeometry tGeoClip = (IGeometry)tTope;
//用裁切出来的要素,再与其源要素进行求差处理,即得到外围要素
IGeometry tGeoDe = tTope2.Difference(tGeoClip);
//把外围要素赋予源要素
tFeature.Shape = tGeoDe;
tFeature.Store();
tFeature = tFeatureCursor.NextFeature();
}
ReleaseCom(tFeatureCursor);
}
private void ReleaseCom(object o)
{
if (o != null)
{
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0)
{ }
}
}
}
}