private static IGeometry GetIntersectionGeometry([NotNull] IGeometry shape1, [NotNull] IGeometry shape2) { IGeometry result = null; foreach (IGeometry intersection in IntersectionUtils.GetAllIntersections(shape1, shape2)) { if (result == null || result.Dimension < intersection.Dimension) { if (result != null) { Marshal.ReleaseComObject(result); } result = intersection; } else { Marshal.ReleaseComObject(intersection); } } return(Assert.NotNull(result)); }
public static int ReportIntersections( [NotNull] IRow row1, int tableIndex1, [NotNull] IRow row2, int tableIndex2, [NotNull] IErrorReporting errorReporting, [CanBeNull] IssueCode issueCode, [CanBeNull] IValidRelationConstraint validRelationConstraint, bool reportIndividualParts, [CanBeNull] GeometryConstraint validIntersectionGeometryConstraint = null, GeometryComponent geomComponent1 = GeometryComponent.EntireGeometry, GeometryComponent geomComponent2 = GeometryComponent.EntireGeometry) { Assert.ArgumentNotNull(row1, nameof(row1)); Assert.ArgumentNotNull(row2, nameof(row2)); Assert.ArgumentNotNull(errorReporting, nameof(errorReporting)); if (row1 == row2) { return(_noError); } string errorDescription; if (HasFulfilledConstraint(row1, tableIndex1, row2, tableIndex2, validRelationConstraint, "Features intersect", out errorDescription)) { return(_noError); } IGeometry shape1 = ((IFeature)row1).Shape; IGeometry shape2 = ((IFeature)row2).Shape; var g1 = GeometryComponentUtils.GetGeometryComponent(shape1, geomComponent1); var g2 = GeometryComponentUtils.GetGeometryComponent(shape2, geomComponent2); var errorCount = 0; if (g1 != null && g2 != null) { foreach (IGeometry errorGeometry in IntersectionUtils.GetAllIntersections(g1, g2)) { if (validIntersectionGeometryConstraint == null || !validIntersectionGeometryConstraint.IsFulfilled(errorGeometry)) { errorCount += errorReporting.Report(errorDescription, errorGeometry, issueCode, reportIndividualParts, row1, row2); } } } return(errorCount); }
private static IEnumerable <IGeometry> GetRelevantIntersections( [NotNull] IGeometry g1, [NotNull] IGeometry g2, Dimension maximumDimension) { foreach (IGeometry geometry in IntersectionUtils.GetAllIntersections(g1, g2)) { if (HasEqualOrLowerDimension(geometry, maximumDimension)) { Simplify(geometry); yield return(geometry); } else { Marshal.ReleaseComObject(geometry); } } }