+++ /dev/null
-package tim.prune.function.compress;
-
-import tim.prune.App;
-import tim.prune.UpdateMessageBroker;
-import tim.prune.data.DataPoint;
-
-/**
- * Function to mark all the points in the selected rectangle
- */
-public class MarkPointsInRectangleFunction extends MarkAndDeleteFunction
-{
- /** Minimum and maximum latitude values of rectangle */
- private double _minLat = 0.0, _maxLat = 0.0;
- /** Minimum and maximum longitude values of rectangle */
- private double _minLon = 0.0, _maxLon = 0.0;
-
-
- /**
- * Constructor
- * @param inApp App object
- */
- public MarkPointsInRectangleFunction(App inApp)
- {
- super(inApp);
- }
-
- /** @return name key */
- public String getNameKey() {
- return "menu.track.markrectangle";
- }
-
- /**
- * Set the coordinates of the rectangle
- * @param inLon1 first longitude value
- * @param inLat1 first latitude value
- * @param inLon2 second longitude value
- * @param inLat2 second latitude value
- */
- public void setRectCoords(double inLon1, double inLat1, double inLon2, double inLat2)
- {
- if (inLon1 == inLon2 || inLat1 == inLat2)
- {
- // Coordinates not valid
- _minLat = _maxLat = _minLon = _maxLon = 0.0;
- }
- else
- {
- if (inLon2 > inLon1) {
- _minLon = inLon1; _maxLon = inLon2;
- }
- else {
- _minLon = inLon2; _maxLon = inLon1;
- }
- if (inLat2 > inLat1) {
- _minLat = inLat1; _maxLat = inLat2;
- }
- else {
- _minLat = inLat2; _maxLat = inLat1;
- }
- }
- }
-
- /**
- * Begin the function using the set parameters
- */
- public void begin()
- {
- if (_maxLon == _minLon || _maxLat == _minLat) {
- return;
- }
-
- // Loop over all points in track
- final int numPoints = _app.getTrackInfo().getTrack().getNumPoints();
- int numMarked = 0;
- for (int i=0; i<numPoints; i++)
- {
- DataPoint point = _app.getTrackInfo().getTrack().getPoint(i);
- // For each point, see if it's within the rectangle
- final double pointLon = point.getLongitude().getDouble();
- final double pointLat = point.getLatitude().getDouble();
- final boolean insideRect = (pointLon >= _minLon && pointLon <= _maxLon
- && pointLat >= _minLat && pointLat <= _maxLat);
- // Mark it accordingly (also resetting points outside the rect to false)
- point.setMarkedForDeletion(insideRect);
- if (insideRect) {
- numMarked++;
- }
- }
-
- // Inform subscribers to update display
- UpdateMessageBroker.informSubscribers();
- // Confirm message showing how many marked
- if (numMarked > 0)
- {
- optionallyDeleteMarkedPoints(numMarked);
- }
- }
-}