/// <summary> /// Update snapping /// </summary> /// <param name="sourceLayer"></param> /// The layer of feature. /// <param name="feature"></param> /// Feature that is snapped. Feature is not always available. /// <param name="geometry"></param> /// actual geometry of the feature that is snapped. /// <param name="worldPosition"></param> /// <param name="trackerIndex"></param> public ISnapResult ExecuteLayerSnapRules(ILayer sourceLayer, IFeature feature, IGeometry geometry, ICoordinate worldPosition, int trackerIndex) { IList <ISnapRule> snapRules = MapControl.GetSnapRules(sourceLayer, feature, geometry, trackerIndex); ISnapResult snapResult = null; for (int i = 0; i < snapRules.Count; i++) { ISnapRule rule = snapRules[i]; snapResult = ExecuteSnapRule(rule, feature, geometry, null, worldPosition, trackerIndex); if (null != snapResult) { break; } // If snapping failed for the last rule and snapping is obligatory // any position is valid // todo add rule with SnapRole.Free? if ((!rule.Obligatory) && (i == snapRules.Count - 1)) { snapResult = new SnapResult(worldPosition, null, null, -1, -1); } } if (0 == snapRules.Count) { snapResult = new SnapResult(worldPosition, null, null, -1, -1); } return(snapResult); }
/// <summary> /// Update snapping /// </summary> /// <param name="sourceLayer"></param> /// The layer of feature. /// <param name="feature"></param> /// Feature that is snapped. Feature is not always available. /// <param name="geometry"></param> /// actual geometry of the feature that is snapped. /// <param name="worldPosition"></param> /// <param name="trackerIndex"></param> public SnapResult ExecuteLayerSnapRules(ILayer sourceLayer, IFeature feature, IGeometry geometry, ICoordinate worldPosition, int trackerIndex) { var snapRules = sourceLayer.FeatureEditor.SnapRules; SnapResult = null; for (int i = 0; i < snapRules.Count; i++) { ISnapRule rule = snapRules[i]; ExecuteSnapRule(rule, feature, geometry, null, worldPosition, trackerIndex); if (null != SnapResult) { break; } // If snapping failed for the last rule and snapping is obligatory // any position is valid // todo add rule with SnapRole.Free? if ((!rule.Obligatory) && (i == snapRules.Count - 1)) { SnapResult = new SnapResult(worldPosition, null, sourceLayer, null, -1, -1) { Rule = rule }; } } if (0 == snapRules.Count) { SnapResult = new SnapResult(worldPosition, null, sourceLayer, null, -1, -1); } return(SnapResult); }
/// <summary> /// Executes snapRule and shows the result in the snaptools' layer /// </summary> /// <param name="snapRule"></param> /// <param name="sourceFeature"></param> /// <param name="snapSource"></param> /// <param name="snapTargets"></param> /// <param name="worldPos"></param> /// <param name="trackingIndex"></param> /// <returns></returns> public ISnapResult ExecuteSnapRule(ISnapRule snapRule, IFeature sourceFeature, IGeometry snapSource, IList<IFeature> snapTargets, ICoordinate worldPos, int trackingIndex) { float marge = (float)MapControlHelper.ImageToWorld(Map, snapRule.PixelGravity); IEnvelope envelope = MapControlHelper.GetEnvelope(worldPos, marge); SnapResult = snapRule.Execute(sourceFeature, snapSource, snapTargets, worldPos, envelope, trackingIndex); ShowSnapResult(SnapResult); return SnapResult; }
/// <summary> /// Executes snapRule and shows the result in the snaptools' layer /// </summary> /// <param name="snapRule"></param> /// <param name="sourceFeature"></param> /// <param name="snapSource"></param> /// <param name="snapTargets"></param> /// <param name="worldPos"></param> /// <param name="trackingIndex"></param> /// <returns></returns> public ISnapResult ExecuteSnapRule(ISnapRule snapRule, IFeature sourceFeature, IGeometry snapSource, IList <IFeature> snapTargets, ICoordinate worldPos, int trackingIndex) { float marge = (float)MapControlHelper.ImageToWorld(Map, snapRule.PixelGravity); IEnvelope envelope = MapControlHelper.GetEnvelope(worldPos, marge); SnapResult = snapRule.Execute(sourceFeature, snapSource, snapTargets, worldPos, envelope, trackingIndex); ShowSnapResult(SnapResult); return(SnapResult); }
/// <summary> /// Executes snapRule and shows the result in the snaptools' layer /// </summary> /// <param name="snapRule"></param> /// <param name="sourceFeature"></param> /// <param name="snapSource"></param> /// <param name="snapTargets"></param> /// <param name="worldPos"></param> /// <param name="trackingIndex"></param> /// <returns></returns> public SnapResult ExecuteSnapRule(ISnapRule snapRule, IFeature sourceFeature, IGeometry snapSource, IList <IFeature> snapTargets, ICoordinate worldPos, int trackingIndex) { float marge = (float)MapHelper.ImageToWorld(Map, snapRule.PixelGravity); IEnvelope envelope = MapHelper.GetEnvelope(worldPos, marge); var snapCandidates = GetSnapCandidates(envelope); var candidates = snapCandidates as DelftTools.Utils.Tuple <IFeature, ILayer>[] ?? snapCandidates.ToArray(); var features = candidates.Select(c => c.First).ToArray(); var layers = candidates.Select(c => c.Second).ToArray(); SnapResult = snapRule.Execute(sourceFeature, features, layers, snapSource, snapTargets, worldPos, envelope, trackingIndex); ShowSnapResult(SnapResult); return(SnapResult); }
/// <summary> /// Executes snapRule and shows the result in the snaptools' layer /// </summary> /// <param name="snapRule"></param> /// <param name="sourceFeature"></param> /// <param name="snapSource"></param> /// <param name="snapTargets"></param> /// <param name="worldPos"></param> /// <param name="trackingIndex"></param> /// <returns></returns> public SnapResult ExecuteSnapRule(ISnapRule snapRule, IFeature sourceFeature, IGeometry snapSource, IList<IFeature> snapTargets, ICoordinate worldPos, int trackingIndex) { float marge = (float)MapHelper.ImageToWorld(Map, snapRule.PixelGravity); IEnvelope envelope = MapHelper.GetEnvelope(worldPos, marge); var snapCandidates = GetSnapCandidates(envelope); var candidates = snapCandidates as DelftTools.Utils.Tuple<IFeature, ILayer>[] ?? snapCandidates.ToArray(); var features = candidates.Select(c => c.First).ToArray(); var layers = candidates.Select(c => c.Second).ToArray(); SnapResult = snapRule.Execute(sourceFeature, features, layers, snapSource, snapTargets, worldPos, envelope, trackingIndex); ShowSnapResult(SnapResult); return SnapResult; }