Refactor drawing
This commit is contained in:
parent
2214d4996b
commit
46bed0cf4b
3 changed files with 147 additions and 337 deletions
|
@ -5,6 +5,7 @@ import android.util.Pair;
|
|||
import net.osmand.plus.ApplicationMode;
|
||||
import net.osmand.plus.GPXUtilities.TrkSegment;
|
||||
import net.osmand.plus.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.views.Renderable;
|
||||
import net.osmand.router.RoutingContext;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
|
@ -24,6 +25,8 @@ public class MeasurementEditingContext {
|
|||
private TrkSegment afterCacheForSnap;
|
||||
|
||||
private boolean inMovePointMode;
|
||||
private boolean inAddPointBeforeMode;
|
||||
private boolean inAddPointAfterMode;
|
||||
|
||||
private boolean isInSnapToRoadMode;
|
||||
private ApplicationMode snapToRoadAppMode;
|
||||
|
@ -33,10 +36,20 @@ public class MeasurementEditingContext {
|
|||
|
||||
public void setBefore(TrkSegment before) {
|
||||
this.before = before;
|
||||
addBeforeRenders();
|
||||
}
|
||||
|
||||
public void setAfter(TrkSegment after) {
|
||||
this.after = after;
|
||||
addAfterRenders();
|
||||
}
|
||||
|
||||
public void addBeforeRenders() {
|
||||
before.renders.add(new Renderable.StandardTrack(before.points, 17.2));
|
||||
}
|
||||
|
||||
public void addAfterRenders() {
|
||||
after.renders.add(new Renderable.StandardTrack(after.points, 17.2));
|
||||
}
|
||||
|
||||
public boolean isInMovePointMode() {
|
||||
|
@ -51,6 +64,22 @@ public class MeasurementEditingContext {
|
|||
return isInSnapToRoadMode;
|
||||
}
|
||||
|
||||
public void setInAddPointBeforeMode(boolean inAddPointBeforeMode) {
|
||||
this.inAddPointBeforeMode = inAddPointBeforeMode;
|
||||
}
|
||||
|
||||
public boolean isInAddPointBeforeMode() {
|
||||
return inAddPointBeforeMode;
|
||||
}
|
||||
|
||||
public void setInAddPointAfterMode(boolean inAddPointAfterMode) {
|
||||
this.inAddPointAfterMode = inAddPointAfterMode;
|
||||
}
|
||||
|
||||
public boolean isInAddPointAfterMode() {
|
||||
return inAddPointAfterMode;
|
||||
}
|
||||
|
||||
public void setInSnapToRoadMode(boolean inSnapToRoadMode) {
|
||||
isInSnapToRoadMode = inSnapToRoadMode;
|
||||
}
|
||||
|
@ -93,11 +122,11 @@ public class MeasurementEditingContext {
|
|||
// return beforeCacheForSnap;
|
||||
// }
|
||||
// calculate beforeCacheForSnap
|
||||
return null;
|
||||
return before;
|
||||
}
|
||||
|
||||
public TrkSegment getAfterTrkSegmentLine() {
|
||||
return null;
|
||||
return after;
|
||||
}
|
||||
|
||||
public void scheduleRouteCalculateIfNotEmpty() {
|
||||
|
|
|
@ -125,9 +125,6 @@ public class MeasurementToolFragment extends Fragment {
|
|||
private boolean gpxPointsAdded;
|
||||
private ApplicationMode snapToRoadAppMode;
|
||||
|
||||
private boolean inMovePointMode;
|
||||
private boolean inAddPointAfterMode;
|
||||
private boolean inAddPointBeforeMode;
|
||||
private boolean isInSnapToRoadMode;
|
||||
|
||||
private int selectedPointPos = -1;
|
||||
|
@ -230,18 +227,16 @@ public class MeasurementToolFragment extends Fragment {
|
|||
mainView.findViewById(R.id.cancel_move_point_button).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (inMovePointMode) {
|
||||
cancelMovePointMode();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mainView.findViewById(R.id.cancel_point_before_after_button).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (inAddPointAfterMode) {
|
||||
if (measurementEditingContext.isInAddPointAfterMode()) {
|
||||
cancelAddPointAfterMode();
|
||||
} else if (inAddPointBeforeMode) {
|
||||
} else if (measurementEditingContext.isInAddPointBeforeMode()) {
|
||||
cancelAddPointBeforeMode();
|
||||
}
|
||||
}
|
||||
|
@ -266,18 +261,16 @@ public class MeasurementToolFragment extends Fragment {
|
|||
mainView.findViewById(R.id.apply_move_point_button).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (inMovePointMode) {
|
||||
applyMovePointMode();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mainView.findViewById(R.id.apply_point_before_after_point_button).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (inAddPointAfterMode) {
|
||||
if (measurementEditingContext.isInAddPointAfterMode()) {
|
||||
applyAddPointAfterMode();
|
||||
} else if (inAddPointBeforeMode) {
|
||||
} else if (measurementEditingContext.isInAddPointBeforeMode()) {
|
||||
applyAddPointBeforeMode();
|
||||
}
|
||||
}
|
||||
|
@ -286,9 +279,9 @@ public class MeasurementToolFragment extends Fragment {
|
|||
mainView.findViewById(R.id.add_point_before_after_button).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (inAddPointAfterMode) {
|
||||
if (measurementEditingContext.isInAddPointAfterMode()) {
|
||||
addPointAfter();
|
||||
} else if (inAddPointBeforeMode) {
|
||||
} else if (measurementEditingContext.isInAddPointBeforeMode()) {
|
||||
addPointBefore();
|
||||
}
|
||||
}
|
||||
|
@ -313,6 +306,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
@Override
|
||||
public void onClick(View view) {
|
||||
MeasurementCommandType type = commandManager.undo();
|
||||
recreateSegments();
|
||||
if (type != null && type != MeasurementCommandType.SNAP_TO_ROAD) {
|
||||
recalculateSnapToRoadIfNedeed();
|
||||
}
|
||||
|
@ -336,6 +330,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
@Override
|
||||
public void onClick(View view) {
|
||||
commandManager.redo();
|
||||
recreateSegments();
|
||||
recalculateSnapToRoadIfNedeed();
|
||||
if (commandManager.canRedo()) {
|
||||
enable(redoBtn);
|
||||
|
@ -407,7 +402,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
toolBarController = new MeasurementToolBarController(newGpxData);
|
||||
if (inMovePointMode || inAddPointAfterMode || inAddPointBeforeMode) {
|
||||
if (measurementEditingContext.isInAddPointAfterMode() || measurementEditingContext.isInAddPointBeforeMode() || measurementEditingContext.isInMovePointMode()) {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
|
||||
} else {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
|
||||
|
@ -487,6 +482,14 @@ public class MeasurementToolFragment extends Fragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
private void recreateSegments() {
|
||||
TrkSegment before = new TrkSegment();
|
||||
before.points.addAll(measurementPoints);
|
||||
measurementEditingContext.setBefore(before);
|
||||
TrkSegment after = new TrkSegment();
|
||||
measurementEditingContext.setAfter(after);
|
||||
}
|
||||
|
||||
private void recalculateSnapToRoadIfNedeed() {
|
||||
if (calculationProgress != null) {
|
||||
calculationProgress.isCancelled = true;
|
||||
|
@ -504,13 +507,13 @@ public class MeasurementToolFragment extends Fragment {
|
|||
if (pointsListOpened) {
|
||||
hidePointsList();
|
||||
}
|
||||
if (inMovePointMode) {
|
||||
if (measurementEditingContext.isInMovePointMode()) {
|
||||
switchMovePointMode(false);
|
||||
}
|
||||
if (inAddPointAfterMode) {
|
||||
if (measurementEditingContext.isInAddPointAfterMode()) {
|
||||
switchAddPointAfterMode(false);
|
||||
}
|
||||
if (inAddPointBeforeMode) {
|
||||
if (measurementEditingContext.isInAddPointBeforeMode()) {
|
||||
switchAddPointBeforeMode(false);
|
||||
}
|
||||
MeasurementToolLayer layer = getMeasurementLayer();
|
||||
|
@ -608,6 +611,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
@Override
|
||||
public void clearAllOnClick() {
|
||||
commandManager.execute(new ClearPointsCommand(measurementLayer));
|
||||
recreateSegments();
|
||||
if (calculationProgress != null) {
|
||||
calculationProgress.isCancelled = true;
|
||||
}
|
||||
|
@ -695,6 +699,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
|
||||
private void removePoint(MeasurementToolLayer layer, int position) {
|
||||
commandManager.execute(new RemovePointCommand(layer, position));
|
||||
recreateSegments();
|
||||
recalculateSnapToRoadIfNedeed();
|
||||
adapter.notifyDataSetChanged();
|
||||
disable(redoBtn);
|
||||
|
@ -762,6 +767,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
toPosition = holder.getAdapterPosition();
|
||||
if (toPosition >= 0 && fromPosition >= 0 && toPosition != fromPosition) {
|
||||
commandManager.execute(new ReorderPointCommand(measurementLayer, fromPosition, toPosition));
|
||||
recreateSegments();
|
||||
recalculateSnapToRoadIfNedeed();
|
||||
adapter.notifyDataSetChanged();
|
||||
disable(redoBtn);
|
||||
|
@ -870,6 +876,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
MeasurementToolLayer layer = getMeasurementLayer();
|
||||
if (layer != null) {
|
||||
commandManager.execute(new SnapToRoadCommand(layer, pts));
|
||||
recreateSegments();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -953,15 +960,14 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void applyMovePointMode() {
|
||||
if (inMovePointMode) {
|
||||
switchMovePointMode(false);
|
||||
}
|
||||
MeasurementToolLayer measurementLayer = getMeasurementLayer();
|
||||
if (measurementLayer != null) {
|
||||
WptPt newPoint = measurementLayer.getMovedPointToApply();
|
||||
WptPt oldPoint = measurementLayer.getSelectedCachedPoint();
|
||||
int position = measurementLayer.getSelectedPointPos();
|
||||
commandManager.execute(new MovePointCommand(measurementLayer, oldPoint, newPoint, position));
|
||||
recreateSegments();
|
||||
doAddOrMovePointCommonStuff();
|
||||
measurementLayer.exitMovePointMode();
|
||||
measurementLayer.refreshMap();
|
||||
|
@ -970,9 +976,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void cancelMovePointMode() {
|
||||
if (inMovePointMode) {
|
||||
switchMovePointMode(false);
|
||||
}
|
||||
MeasurementToolLayer measurementToolLayer = getMeasurementLayer();
|
||||
if (measurementToolLayer != null) {
|
||||
measurementToolLayer.exitMovePointMode();
|
||||
|
@ -996,9 +1000,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void applyAddPointAfterMode() {
|
||||
if (inAddPointAfterMode) {
|
||||
switchAddPointAfterMode(false);
|
||||
}
|
||||
MeasurementToolLayer measurementLayer = getMeasurementLayer();
|
||||
if (measurementLayer != null) {
|
||||
measurementLayer.exitAddPointAfterMode();
|
||||
|
@ -1009,9 +1011,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void cancelAddPointAfterMode() {
|
||||
if (inAddPointAfterMode) {
|
||||
switchAddPointAfterMode(false);
|
||||
}
|
||||
MeasurementToolLayer measurementToolLayer = getMeasurementLayer();
|
||||
if (measurementToolLayer != null) {
|
||||
measurementToolLayer.exitAddPointAfterMode();
|
||||
|
@ -1034,9 +1034,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void applyAddPointBeforeMode() {
|
||||
if (inAddPointBeforeMode) {
|
||||
switchAddPointBeforeMode(false);
|
||||
}
|
||||
MeasurementToolLayer measurementLayer = getMeasurementLayer();
|
||||
if (measurementLayer != null) {
|
||||
measurementLayer.exitAddPointBeforeMode();
|
||||
|
@ -1047,9 +1045,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void cancelAddPointBeforeMode() {
|
||||
if (inAddPointBeforeMode) {
|
||||
switchAddPointBeforeMode(false);
|
||||
}
|
||||
MeasurementToolLayer measurementToolLayer = getMeasurementLayer();
|
||||
if (measurementToolLayer != null) {
|
||||
measurementToolLayer.exitAddPointBeforeMode();
|
||||
|
@ -1069,8 +1065,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void switchMovePointMode(boolean enable) {
|
||||
inMovePointMode = enable;
|
||||
if (inMovePointMode) {
|
||||
if (measurementEditingContext.isInMovePointMode()) {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
|
||||
} else {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
|
||||
|
@ -1089,8 +1084,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void switchAddPointAfterMode(boolean enable) {
|
||||
inAddPointAfterMode = enable;
|
||||
if (inAddPointAfterMode) {
|
||||
if (measurementEditingContext.isInAddPointAfterMode()) {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
|
||||
} else {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
|
||||
|
@ -1109,8 +1103,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void switchAddPointBeforeMode(boolean enable) {
|
||||
inAddPointBeforeMode = enable;
|
||||
if (inAddPointBeforeMode) {
|
||||
if (measurementEditingContext.isInAddPointBeforeMode()) {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
|
||||
} else {
|
||||
toolBarController.setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
|
||||
|
@ -1141,14 +1134,21 @@ public class MeasurementToolFragment extends Fragment {
|
|||
MeasurementToolLayer measurementLayer = getMeasurementLayer();
|
||||
if (measurementLayer != null) {
|
||||
commandManager.execute(new AddPointCommand(measurementLayer, false));
|
||||
recreateSegments();
|
||||
doAddOrMovePointCommonStuff();
|
||||
}
|
||||
TrkSegment before = new TrkSegment();
|
||||
before.points.addAll(measurementPoints);
|
||||
measurementEditingContext.setBefore(before);
|
||||
TrkSegment after = new TrkSegment();
|
||||
measurementEditingContext.setAfter(after);
|
||||
}
|
||||
|
||||
private void addCenterPoint() {
|
||||
MeasurementToolLayer measurementLayer = getMeasurementLayer();
|
||||
if (measurementLayer != null) {
|
||||
commandManager.execute(new AddPointCommand(measurementLayer, true));
|
||||
recreateSegments();
|
||||
doAddOrMovePointCommonStuff();
|
||||
}
|
||||
}
|
||||
|
@ -1158,6 +1158,7 @@ public class MeasurementToolFragment extends Fragment {
|
|||
MeasurementToolLayer measurementLayer = getMeasurementLayer();
|
||||
if (measurementLayer != null) {
|
||||
added = commandManager.execute(new AddPointCommand(measurementLayer, position));
|
||||
recreateSegments();
|
||||
doAddOrMovePointCommonStuff();
|
||||
}
|
||||
return added;
|
||||
|
@ -1550,15 +1551,15 @@ public class MeasurementToolFragment extends Fragment {
|
|||
}
|
||||
|
||||
public void quit(boolean hidePointsListFirst) {
|
||||
if (inMovePointMode) {
|
||||
if (measurementEditingContext.isInMovePointMode()) {
|
||||
cancelMovePointMode();
|
||||
return;
|
||||
}
|
||||
if (inAddPointAfterMode) {
|
||||
if (measurementEditingContext.isInAddPointAfterMode()) {
|
||||
cancelAddPointAfterMode();
|
||||
return;
|
||||
}
|
||||
if (inAddPointBeforeMode) {
|
||||
if (measurementEditingContext.isInAddPointBeforeMode()) {
|
||||
cancelAddPointBeforeMode();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.QuadPoint;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.GPXUtilities.TrkSegment;
|
||||
import net.osmand.plus.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.R;
|
||||
|
@ -39,19 +40,13 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
private Bitmap applyingPointIcon;
|
||||
private Paint bitmapPaint;
|
||||
private final RenderingLineAttributes lineAttrs = new RenderingLineAttributes("measureDistanceLine");
|
||||
private final Path leftPath = new Path();
|
||||
private final Path centerPath = new Path();
|
||||
private final Path rightPath = new Path();
|
||||
private int marginPointIconX;
|
||||
private int marginPointIconY;
|
||||
private int marginApplyingPointIconX;
|
||||
private int marginApplyingPointIconY;
|
||||
private final TIntArrayList leftTx = new TIntArrayList();
|
||||
private final TIntArrayList leftTy = new TIntArrayList();
|
||||
private final TIntArrayList centerTx = new TIntArrayList();
|
||||
private final TIntArrayList centerTy = new TIntArrayList();
|
||||
private final TIntArrayList rightTx = new TIntArrayList();
|
||||
private final TIntArrayList rightTy = new TIntArrayList();
|
||||
private Path path = new Path();
|
||||
private TIntArrayList tx = new TIntArrayList();
|
||||
private TIntArrayList ty = new TIntArrayList();
|
||||
private OnMeasureDistanceToCenter measureDistanceToCenterListener;
|
||||
private OnSingleTapListener singleTapListener;
|
||||
private OnEnterMovePointModeListener enterMovePointModeListener;
|
||||
|
@ -248,175 +243,11 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
if (inMeasurementMode) {
|
||||
lineAttrs.updatePaints(view, settings, tb);
|
||||
|
||||
List<WptPt> drawPoints;
|
||||
if (snappedToRoadPoints.size() > 0) {
|
||||
drawPoints = snappedToRoadPoints;
|
||||
} else {
|
||||
drawPoints = measurementPoints;
|
||||
}
|
||||
if (drawPoints.size() > 0) {
|
||||
leftPath.reset();
|
||||
leftTx.reset();
|
||||
leftTy.reset();
|
||||
TrkSegment before = measurementEditingContext.getBeforeTrkSegmentLine();
|
||||
before.drawRenderers(view.getZoom(), lineAttrs.paint, canvas, tb);
|
||||
|
||||
rightPath.reset();
|
||||
rightTx.reset();
|
||||
rightTy.reset();
|
||||
if (selectedPointPos == -1) {
|
||||
for (int i = 0; i < drawPoints.size(); i++) {
|
||||
WptPt pt = drawPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (i == 0) {
|
||||
leftPath.moveTo(locX, locY);
|
||||
} else {
|
||||
leftPath.lineTo(locX, locY);
|
||||
}
|
||||
leftTx.add(locX);
|
||||
leftTy.add(locY);
|
||||
}
|
||||
if (leftTx.size() > 1) {
|
||||
calculatePath(tb, leftTx, leftTy, leftPath);
|
||||
canvas.drawPath(leftPath, lineAttrs.paint);
|
||||
}
|
||||
} else if (selectedPointPos == drawPoints.size() - 1) {
|
||||
for (int i = 0; i < drawPoints.size() - 1; i++) {
|
||||
WptPt pt = drawPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (i == 0) {
|
||||
leftPath.moveTo(locX, locY);
|
||||
} else {
|
||||
leftPath.lineTo(locX, locY);
|
||||
}
|
||||
leftTx.add(locX);
|
||||
leftTy.add(locY);
|
||||
}
|
||||
if (!inAddPointAfterMode && !inAddPointBeforeMode && !inMovePointMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
leftPath.lineTo(locX, locY);
|
||||
leftTx.add(locX);
|
||||
leftTy.add(locY);
|
||||
}
|
||||
if (inAddPointAfterMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
leftPath.lineTo(locX, locY);
|
||||
leftTx.add(locX);
|
||||
leftTy.add(locY);
|
||||
}
|
||||
if (leftTx.size() > 1) {
|
||||
calculatePath(tb, leftTx, leftTy, leftPath);
|
||||
canvas.drawPath(leftPath, lineAttrs.paint);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < selectedPointPos; i++) {
|
||||
WptPt pt = drawPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (i == 0) {
|
||||
leftPath.moveTo(locX, locY);
|
||||
} else {
|
||||
leftPath.lineTo(locX, locY);
|
||||
}
|
||||
leftTx.add(locX);
|
||||
leftTy.add(locY);
|
||||
}
|
||||
if (!inAddPointAfterMode && !inAddPointBeforeMode && !inMovePointMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
leftPath.lineTo(locX, locY);
|
||||
leftTx.add(locX);
|
||||
leftTy.add(locY);
|
||||
}
|
||||
if (inAddPointAfterMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
leftPath.lineTo(locX, locY);
|
||||
leftTx.add(locX);
|
||||
leftTy.add(locY);
|
||||
}
|
||||
if (leftTx.size() > 1) {
|
||||
calculatePath(tb, leftTx, leftTy, leftPath);
|
||||
canvas.drawPath(leftPath, lineAttrs.paint);
|
||||
}
|
||||
|
||||
if (inAddPointBeforeMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
rightPath.moveTo(locX, locY);
|
||||
rightTx.add(locX);
|
||||
rightTy.add(locY);
|
||||
}
|
||||
if (inAddPointAfterMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos + 1);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
rightPath.moveTo(locX, locY);
|
||||
rightTx.add(locX);
|
||||
rightTy.add(locY);
|
||||
}
|
||||
if (!inAddPointAfterMode && !inAddPointBeforeMode && !inMovePointMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
rightPath.moveTo(locX, locY);
|
||||
rightTx.add(locX);
|
||||
rightTy.add(locY);
|
||||
}
|
||||
for (int i = selectedPointPos + 1; i < drawPoints.size(); i++) {
|
||||
WptPt pt = drawPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (inMovePointMode && i == selectedPointPos + 1) {
|
||||
rightPath.moveTo(locX, locY);
|
||||
} else {
|
||||
rightPath.lineTo(locX, locY);
|
||||
}
|
||||
rightTx.add(locX);
|
||||
rightTy.add(locY);
|
||||
}
|
||||
if (rightTx.size() > 1) {
|
||||
calculatePath(tb, rightTx, rightTy, rightPath);
|
||||
canvas.drawPath(rightPath, lineAttrs.paint);
|
||||
}
|
||||
}
|
||||
|
||||
overlapped = false;
|
||||
int drawn = 0;
|
||||
for (int i = 0; i < measurementPoints.size(); i++) {
|
||||
WptPt pt = measurementPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && i == selectedPointPos)) {
|
||||
drawn++;
|
||||
if (drawn > pointsToDraw) {
|
||||
overlapped = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!overlapped) {
|
||||
for (int i = 0; i < measurementPoints.size(); i++) {
|
||||
WptPt pt = measurementPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && i == selectedPointPos)) {
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
TrkSegment after = measurementEditingContext.getAfterTrkSegmentLine();
|
||||
after.drawRenderers(view.getZoom(), lineAttrs.paint, canvas, tb);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -437,129 +268,78 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
measureDistanceToCenterListener.onMeasure(distance);
|
||||
}
|
||||
}
|
||||
|
||||
List<WptPt> drawPoints;
|
||||
if (snappedToRoadPoints.size() > 0) {
|
||||
drawPoints = snappedToRoadPoints;
|
||||
} else {
|
||||
drawPoints = measurementPoints;
|
||||
}
|
||||
|
||||
if (drawPoints.size() > 0) {
|
||||
if (inMovePointMode || inAddPointBeforeMode || inAddPointAfterMode) {
|
||||
centerPath.reset();
|
||||
centerTx.reset();
|
||||
centerTy.reset();
|
||||
|
||||
if (selectedPointPos == 0) {
|
||||
if (inMovePointMode) {
|
||||
centerPath.moveTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
centerTx.add(tb.getCenterPixelX());
|
||||
centerTy.add(tb.getCenterPixelY());
|
||||
if (drawPoints.size() > 1) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos + 1);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.lineTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
}
|
||||
} else if (inAddPointAfterMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.moveTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
centerPath.lineTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
centerTx.add(tb.getCenterPixelX());
|
||||
centerTy.add(tb.getCenterPixelY());
|
||||
} else if (inAddPointBeforeMode) {
|
||||
centerPath.moveTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
centerTx.add(tb.getCenterPixelX());
|
||||
centerTy.add(tb.getCenterPixelY());
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.moveTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
}
|
||||
} else {
|
||||
if (inMovePointMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos - 1);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.moveTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
centerPath.lineTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
centerTx.add(tb.getCenterPixelX());
|
||||
centerTy.add(tb.getCenterPixelY());
|
||||
if (selectedPointPos != drawPoints.size() - 1) {
|
||||
pt = drawPoints.get(selectedPointPos + 1);
|
||||
locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.lineTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
}
|
||||
} else if (inAddPointAfterMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.moveTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
centerPath.lineTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
centerTx.add(tb.getCenterPixelX());
|
||||
centerTy.add(tb.getCenterPixelY());
|
||||
if (selectedPointPos != drawPoints.size() - 1) {
|
||||
pt = drawPoints.get(selectedPointPos + 1);
|
||||
locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.lineTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
}
|
||||
} else if (inAddPointBeforeMode) {
|
||||
WptPt pt = drawPoints.get(selectedPointPos - 1);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.moveTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
centerPath.lineTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
centerTx.add(tb.getCenterPixelX());
|
||||
centerTy.add(tb.getCenterPixelY());
|
||||
pt = drawPoints.get(selectedPointPos);
|
||||
locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.lineTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
}
|
||||
}
|
||||
|
||||
calculatePath(tb, centerTx, centerTy, centerPath);
|
||||
canvas.drawPath(centerPath, lineAttrs.paint);
|
||||
} else {
|
||||
centerPath.reset();
|
||||
centerTx.reset();
|
||||
centerTy.reset();
|
||||
path.reset();
|
||||
tx.reset();
|
||||
ty.reset();
|
||||
|
||||
WptPt pt = drawPoints.get(drawPoints.size() - 1);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
centerPath.moveTo(locX, locY);
|
||||
centerTx.add(locX);
|
||||
centerTy.add(locY);
|
||||
centerPath.lineTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
centerTx.add(tb.getCenterPixelX());
|
||||
centerTy.add(tb.getCenterPixelY());
|
||||
path.moveTo(locX, locY);
|
||||
tx.add(locX);
|
||||
ty.add(locY);
|
||||
path.lineTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
tx.add(tb.getCenterPixelX());
|
||||
ty.add(tb.getCenterPixelY());
|
||||
calculatePath(tb, tx, ty, path);
|
||||
canvas.drawPath(path, lineAttrs.paint);
|
||||
}
|
||||
|
||||
calculatePath(tb, centerTx, centerTy, centerPath);
|
||||
canvas.drawPath(centerPath, lineAttrs.paint);
|
||||
overlapped = false;
|
||||
int drawn = 0;
|
||||
for (int i = 0; i < measurementPoints.size(); i++) {
|
||||
WptPt pt = measurementPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && i == selectedPointPos)) {
|
||||
drawn++;
|
||||
if (drawn > pointsToDraw) {
|
||||
overlapped = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (overlapped) {
|
||||
WptPt pt = measurementPoints.get(0);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && 0 == selectedPointPos)) {
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
pt = measurementPoints.get(measurementPoints.size() - 1);
|
||||
locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && measurementPoints.size() - 1 == selectedPointPos)) {
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < measurementPoints.size(); i++) {
|
||||
WptPt pt = measurementPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && i == selectedPointPos)) {
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (inAddPointAfterMode || inAddPointBeforeMode || inMovePointMode) {
|
||||
int locX = tb.getCenterPixelX();
|
||||
int locY = tb.getCenterPixelY();
|
||||
|
|
Loading…
Reference in a new issue