private ChangeAlongZSource DetermineZSource(IFeature feature) { string note = null; ChangeAlongZSource zSource = ZSourceProvider?.GetValue(feature, out note) ?? ChangeAlongZSource.Target; if (note != null) { _msg.Info(note); } return(zSource); }
private void ProcessFeature([NotNull] IFeature feature, [NotNull] IPolycurve overlappingGeometry) { IGeometry featureShape = feature.Shape; if (GeometryUtils.Disjoint(featureShape, overlappingGeometry)) { return; } IList <IGeometry> overlappingResults; string note = null; ChangeAlongZSource zSource = ZSourceProvider?.GetValue(feature, out note) ?? ChangeAlongZSource.Target; if (note != null) { _msg.Info(note); } var sourceMultipatch = featureShape as IMultiPatch; IList <IGeometry> modifiedGeometries = sourceMultipatch != null ? RemoveOverlaps(sourceMultipatch, (IPolygon)overlappingGeometry, zSource, out overlappingResults) : RemoveOverlap((IPolycurve)featureShape, overlappingGeometry, zSource, out overlappingResults); // additional check for undefined z values - this happens if the target has no Zs or UseSourceZs is active // -> currently the undefined Zs are interpolated before storing if (HasAnyGeometryUndefinedZs(modifiedGeometries)) { _msg.DebugFormat( "The result geometry of {0} has undefined z values.", GdbObjectUtils.ToString(feature)); } OverlapResultGeometries singleFeatureResult = new OverlapResultGeometries(feature, modifiedGeometries, overlappingResults); Result.ResultsByFeature.Add(singleFeatureResult); }