mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-08-31 15:43:25 +00:00
enable routing tool without selection, and support multi-select
This commit is contained in:
@@ -14,7 +14,7 @@ export abstract class GPXTreeElement<T extends GPXTreeElement<any>> {
|
||||
_data: { [key: string]: any } = {};
|
||||
|
||||
abstract isLeaf(): boolean;
|
||||
abstract get children(): ReadonlyArray<T>;
|
||||
abstract get children(): Array<T>;
|
||||
|
||||
abstract getNumberOfTrackPoints(): number;
|
||||
abstract getStartTimestamp(): Date | undefined;
|
||||
@@ -74,16 +74,15 @@ abstract class GPXTreeNode<T extends GPXTreeElement<any>> extends GPXTreeElement
|
||||
newPreviousTimestamp = og.getStartTimestamp();
|
||||
}
|
||||
|
||||
let children = og.children.slice();
|
||||
children.reverse();
|
||||
this.children.reverse();
|
||||
|
||||
for (let i = 0; i < og.children.length; i++) {
|
||||
let originalStartTimestamp = og.children[og.children.length - i - 1].getStartTimestamp();
|
||||
|
||||
children[i]._reverse(originalNextTimestamp, newPreviousTimestamp);
|
||||
this.children[i]._reverse(originalNextTimestamp, newPreviousTimestamp);
|
||||
|
||||
originalNextTimestamp = originalStartTimestamp;
|
||||
newPreviousTimestamp = children[i].getEndTimestamp();
|
||||
newPreviousTimestamp = this.children[i].getEndTimestamp();
|
||||
}
|
||||
|
||||
if (this instanceof GPXFile) {
|
||||
@@ -102,7 +101,7 @@ abstract class GPXTreeLeaf extends GPXTreeElement<GPXTreeLeaf> {
|
||||
return true;
|
||||
}
|
||||
|
||||
get children(): ReadonlyArray<GPXTreeLeaf> {
|
||||
get children(): Array<GPXTreeLeaf> {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -149,7 +148,7 @@ export class GPXFile extends GPXTreeNode<Track>{
|
||||
});
|
||||
}
|
||||
|
||||
get children(): ReadonlyArray<Track> {
|
||||
get children(): Array<Track> {
|
||||
return this.trk;
|
||||
}
|
||||
|
||||
@@ -246,6 +245,20 @@ export class GPXFile extends GPXTreeNode<Track>{
|
||||
this.trk[trackIndex].reverseTrackSegment(segmentIndex);
|
||||
}
|
||||
|
||||
roundTrip() {
|
||||
this.trk.forEach((track) => {
|
||||
track.roundTrip();
|
||||
});
|
||||
}
|
||||
|
||||
roundTripTrack(trackIndex: number) {
|
||||
this.trk[trackIndex].roundTrip();
|
||||
}
|
||||
|
||||
roundTripTrackSegment(trackIndex: number, segmentIndex: number) {
|
||||
this.trk[trackIndex].roundTripTrackSegment(segmentIndex);
|
||||
}
|
||||
|
||||
crop(start: number, end: number, trackIndices?: number[], segmentIndices?: number[]) {
|
||||
let i = 0;
|
||||
let trackIndex = 0;
|
||||
@@ -404,7 +417,7 @@ export class Track extends GPXTreeNode<TrackSegment> {
|
||||
}
|
||||
}
|
||||
|
||||
get children(): ReadonlyArray<TrackSegment> {
|
||||
get children(): Array<TrackSegment> {
|
||||
return this.trkseg;
|
||||
}
|
||||
|
||||
@@ -470,6 +483,16 @@ export class Track extends GPXTreeNode<TrackSegment> {
|
||||
this.trkseg[segmentIndex]._reverse(this.trkseg[segmentIndex].getEndTimestamp(), this.trkseg[segmentIndex].getStartTimestamp());
|
||||
}
|
||||
|
||||
roundTrip() {
|
||||
this.trkseg.forEach((segment) => {
|
||||
segment.roundTrip();
|
||||
});
|
||||
}
|
||||
|
||||
roundTripTrackSegment(segmentIndex: number) {
|
||||
this.trkseg[segmentIndex].roundTrip();
|
||||
}
|
||||
|
||||
crop(start: number, end: number, segmentIndices?: number[]) {
|
||||
let i = 0;
|
||||
let segmentIndex = 0;
|
||||
@@ -826,6 +849,13 @@ export class TrackSegment extends GPXTreeLeaf {
|
||||
}
|
||||
}
|
||||
|
||||
roundTrip() {
|
||||
let og = getOriginal(this); // Read as much as possible from the original object because it is faster
|
||||
let newSegment = og.clone();
|
||||
newSegment._reverse(newSegment.getEndTimestamp(), newSegment.getEndTimestamp());
|
||||
this.replaceTrackPoints(this.trkpt.length, this.trkpt.length, newSegment.trkpt);
|
||||
}
|
||||
|
||||
crop(start: number, end: number) {
|
||||
this.trkpt = this.trkpt.slice(start, end + 1);
|
||||
}
|
||||
|
Reference in New Issue
Block a user