Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
 /// <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;
 }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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;
        }