IGeometryCollection rings = (IGeometryCollection) editGeometry; // the rings of the edit-geometry
IGeometryCollection paths = (IGeometryCollection) reshaper; // the paths of the reshaper
if (paths.GeometryCount > 1) throw new ArgumentException("The reshape-geometry must be single-part");
for (int i = 0; i < rings.GeometryCount; i++) {
// get the affected rings of the current polygon
IRelationalOperator relOp1 = (IRelationalOperator) reshaper.FromPoint;
IRelationalOperator relOp2 = (IRelationalOperator) reshaper.ToPoint;
// check if Ring touches from- and toPoint of the reshaper
if (relOp1.Touches(singlePolygon) && relOp2.Touches(singlePolygon)) {
IPath path = (IPath) paths.get_Geometry(0);
bool res = ring.Reshape(path);
// only in case of success the ring is reshaped
if (res && !ring.IsEmpty) return editGeometry;
}
}
Are the shaper geometry and edit geometry simple?
Sub Test_Reshape() Dim mxDoc As IMxDocument Set mxDoc = ThisDocument Dim featLyr As IFeatureLayer Dim featCls As IFeatureClass Set featLyr = mxDoc.FocusMap.Layer(0) 'PolylineFC Set featCls = featLyr.FeatureClass Dim feat0 As IFeature Set feat0 = featCls.GetFeature(0) Dim geomColl0 As IGeometryCollection Set geomColl0 = feat0.ShapeCopy Dim geom0 As IGeometry Set geom0 = geomColl0.Geometry(0) Debug.Print geom0.GeometryType Set featLyr = mxDoc.FocusMap.Layer(1) 'SlaveClass Set featCls = featLyr.FeatureClass Dim feat1 As IFeature Set feat1 = featCls.GetFeature(0) Dim geomColl1 As IGeometryCollection Set geomColl1 = feat1.ShapeCopy Dim geom1 As IGeometry Set geom1 = geomColl1.Geometry(0) Debug.Print geom1.GeometryType Dim ring As IRing Set ring = geom1 Dim path As IPath Set path = geom0 Debug.Print ring.Reshape(path) Debug.Print ring.IsEmpty End Sub