package org.droidplanner.services.android.impl.core.survey.grid;
import org.droidplanner.services.android.impl.core.helpers.geoTools.LineLatLong;
import org.droidplanner.services.android.impl.core.helpers.geoTools.LineTools;
import com.o3dr.services.android.lib.coordinate.LatLong;
import java.util.ArrayList;
import java.util.List;
public class Trimmer {
List<LineLatLong> trimedGrid = new ArrayList<LineLatLong>();
public Trimmer(List<LineLatLong> grid, List<LineLatLong> polygon) {
for (LineLatLong gridLine : grid) {
ArrayList<LatLong> crosses = findCrossings(polygon, gridLine);
processCrossings(crosses, gridLine);
}
}
private ArrayList<LatLong> findCrossings(List<LineLatLong> polygon, LineLatLong gridLine) {
ArrayList<LatLong> crossings = new ArrayList<LatLong>();
for (LineLatLong polyLine : polygon) {
LatLong intersection = LineTools.FindLineIntersection(polyLine, gridLine);
if(intersection != null)
crossings.add(intersection);
}
return crossings;
}
private void processCrossings(ArrayList<LatLong> crosses, LineLatLong gridLine) {
switch (crosses.size()) {
case 0:
case 1:
break;
case 2:
trimedGrid.add(new LineLatLong(crosses.get(0), crosses.get(1)));
break;
default: // TODO handle multiple crossings in a better way
trimedGrid.add(LineTools.findExternalPoints(crosses));
}
}
public List<LineLatLong> getTrimmedGrid() {
return trimedGrid;
}
}