using System.Collections.Generic;
using GeoAPI.Extensions.Feature;
using GeoAPI.Geometries;
namespace SharpMap.Api.Editors
{
///
/// IFallOffPolicy implements the algorithm to move multiple coordinates of a geometry
/// For example when a coordinate of a line string is moved neighbour coordinates are also moved.
///
public interface IFallOffPolicy
{
FallOffType FallOffPolicy { get; }
///
/// Moves the coordinates of a geometry while applying a falloff policy. In some cases the falloff policy
/// should always be applied to the same 'constant' source geometry. This is the case during certain drag
/// operations.
///
///
/// The geometry that receives a modified sourceGeometry.
///
/// The geometry that is used as source by the FallOffPolicy.
///
/// The coordinates of the geometry parameter that are represented as special IGeometry (IPoint) objects
/// to give the user a visual feedback. There is a 1 to 1 relation between the coordinates of geometry
/// and the Trackers parameter.
///
/// The selected Trackers. In most cases handleIndices has length 1 and handleIndices[0] == mouseIndex
/// A special case is when multiple Trackers are selected (eg by using the CONTROL key).
///
/// The index of the tracker at which the mouse is positioned.
///
///
void Move(IGeometry targetGeometry, IGeometry sourceGeometry, IList trackers,
IList handleIndices, int mouseIndex,
double deltaX, double deltaY);
void Move(IFeature targetFeature, IGeometry sourceGeometry, IList trackers,
IList handleIndices, int mouseIndex,
double deltaX, double deltaY);
void Move(IGeometry geometry, IList trackers, IList handleIndices, int mouseIndex,
double deltaX, double deltaY);
void Move(IGeometry targetGeometry, IGeometry sourceGeometry, int handleIndex, double deltaX, double deltaY);
void Move(IFeature targetFeature, IGeometry sourceGeometry, int handleIndex, double deltaX, double deltaY);
void Move(IGeometry geometry, int handleIndex, double deltaX, double deltaY);
void Reset();
}
}