Skip to content

Commit dbad5b1

Browse files
authored
Merge pull request #356 from geoblocks/fix_editing_and_mask
Fixed route editing and drawing mask
2 parents 560a457 + 4075c04 commit dbad5b1

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

src/interaction/TrackManager.ts

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -651,28 +651,38 @@ export default class TrackManager<POIMeta> {
651651
if (!extent?.length) return;
652652
const viewport = event.target.getViewport();
653653
const canvases = viewport.getElementsByTagName('canvas');
654+
const frameState = event.frameState;
655+
const viewportWidth = Math.round(frameState.size[0] * frameState.pixelRatio);
656+
const viewportHeight = Math.round(frameState.size[1] * frameState.pixelRatio);
657+
654658
const canvas = canvases.item(canvases.length - 1);
655-
const context = canvas.getContext('2d');
656659

657-
const coordinates = [
658-
[extent[0], extent[1]], // Bottom-left
659-
[extent[0], extent[3]], // Top-left
660-
[extent[2], extent[3]], // Top-right
661-
[extent[2], extent[1]], // Bottom-right
662-
];
660+
const canvasViewportRatio = (canvas.width / viewportWidth) * frameState.pixelRatio;
661+
console.assert(
662+
canvasViewportRatio === (canvas.height / viewportHeight) * frameState.pixelRatio,
663+
);
664+
665+
const coordinates = [
666+
[extent[0], extent[1]], // Bottom-left
667+
[extent[0], extent[3]], // Top-left
668+
[extent[2], extent[3]], // Top-right
669+
[extent[2], extent[1]], // Bottom-right
670+
];
663671

664-
const pixelCoordinates = coordinates.map((coord) => this.map_.getPixelFromCoordinate(coord));
672+
const pixelCoordinates = coordinates.map((coord) => this.map_.getPixelFromCoordinate(coord));
665673

674+
const width = (pixelCoordinates[3][0] - pixelCoordinates[0][0]) * canvasViewportRatio;
675+
const height = (pixelCoordinates[1][1] - pixelCoordinates[0][1]) * canvasViewportRatio;
676+
677+
678+
const context = canvas.getContext('2d');
666679
context.beginPath();
667680

668681
// outer rectangle
669682
context.rect(0, 0, canvas.width, canvas.height);
670683

671-
const width = pixelCoordinates[3][0] - pixelCoordinates[0][0];
672-
const height = pixelCoordinates[1][1] - pixelCoordinates[0][1];
673-
674684
// inner rectangle
675-
context.rect(pixelCoordinates[0][0], pixelCoordinates[0][1], width, height);
685+
context.rect(pixelCoordinates[0][0] * canvasViewportRatio, pixelCoordinates[0][1] * canvasViewportRatio, width, height);
676686

677687
context.closePath();
678688
context.fillStyle = this.drawMaskColor_;

src/interaction/TrackUpdater.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ export default class TrackUpdater {
7373
if (after) {
7474
geometryUpdates.push(this.router.snapSegment(after, modifiedControlPoint, pointTo));
7575
}
76+
// wait for snap before equalize coordinates
77+
const results = await Promise.all(geometryUpdates);
7678
this.equalizeCoordinates(pointFrom);
7779
this.equalizeCoordinates(modifiedControlPoint);
7880
this.equalizeCoordinates(pointTo);
79-
return Promise.all(geometryUpdates);
81+
return results;
8082
}
8183
}
8284

src/router/RouterBase.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ export default abstract class RouterBase implements Router {
4242

4343
const resultCoordinates = await this.getRoute(pointFromCoordinates, pointToCoordinates);
4444
if (resultCoordinates.length === 0) {
45+
segment.getGeometry()!.setCoordinates([pointFromCoordinates, pointToCoordinates], 'XY');
46+
segment.set('snapped', false);
4547
return false;
4648
}
4749
const resultFromCoordinates = resultCoordinates[0].slice(0, 2);

0 commit comments

Comments
 (0)