snap to original

This commit is contained in:
Dennis Orlando 2025-08-02 09:25:04 +02:00
parent 51c0117b9d
commit 593d4179e3

View file

@ -163,6 +163,7 @@ editor = {
},
_sidebar_unload: function () {
// unload the sidebar. called on sidebar_get and form submit.
editor._hide_original_geometry();
editor._level_control.disable();
editor._sublevel_control.disable();
@ -1687,6 +1688,8 @@ editor = {
editor._add_snap_controls();
},
_add_snap_controls: function() {
// add snap to edge toggle
@ -1743,6 +1746,45 @@ editor = {
if (toggle) {
toggle.classList.toggle('active', editor._snap_to_original_enabled);
}
// Show/hide original geometry
if (editor._snap_to_original_enabled) {
editor._show_original_geometry();
} else {
editor._hide_original_geometry();
}
},
_show_original_geometry: function() {
if (!editor._bounds_layer || editor._original_geometry_layer) return;
// Create a copy of the original geometry with different styling
var originalFeature = editor._bounds_layer.feature;
if (!originalFeature) return;
editor._original_geometry_layer = L.geoJSON(originalFeature, {
style: function() {
return {
stroke: true,
color: '#888888',
weight: 2,
opacity: 0.7,
fill: false,
dashArray: '5, 5',
className: 'original-geometry'
};
},
pointToLayer: editor._point_to_layer
});
editor._original_geometry_layer.addTo(editor.map);
},
_hide_original_geometry: function() {
if (editor._original_geometry_layer) {
editor.map.removeLayer(editor._original_geometry_layer);
editor._original_geometry_layer = null;
}
},
_handle_snap_during_draw: function(e) {
@ -1785,6 +1827,7 @@ editor = {
// find snap candidates from existing geometries with area-limited infinite extension
editor._geometries_layer.eachLayer(function(layer) {
if (layer === editor._bounds_layer && !editor._snap_to_original_enabled) return; //don't snap to original if not toggled.
if (layer === editor._editing_layer) return; // don't snap to self
// check if layer is within the area limit for infinite extension