Optimize WEA drag performance by calculating geometries on dragend
Deploy Standortplaner / deploy (push) Successful in 17s
Details
Deploy Standortplaner / deploy (push) Successful in 17s
Details
This commit is contained in:
parent
89a3a7cd6b
commit
21bd7f00be
33
app.js
33
app.js
|
|
@ -524,10 +524,26 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||||
if (state.isEditMode) openEditPanel(turbine);
|
if (state.isEditMode) openEditPanel(turbine);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Drag Update
|
// Drag Update (Nur Marker und Panel bewegen, Geometrien erst bei dragend)
|
||||||
turbine.layers.marker.on('drag', (e) => {
|
turbine.layers.marker.on('drag', (e) => {
|
||||||
const newPos = e.target.getLatLng();
|
const newPos = e.target.getLatLng();
|
||||||
turbine.latlng = newPos;
|
turbine.latlng = newPos;
|
||||||
|
|
||||||
|
// Move rotation handle along with it during drag
|
||||||
|
updateRotationHandlePos(turbine);
|
||||||
|
|
||||||
|
if (activeTurbine?.id === turbine.id) {
|
||||||
|
// Keep fields updated
|
||||||
|
editNr.value = turbine.nr;
|
||||||
|
updateEditPanelPosition(); // Sync floating panel
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
turbine.layers.marker.on('dragend', (e) => {
|
||||||
|
const newPos = e.target.getLatLng();
|
||||||
|
turbine.latlng = newPos;
|
||||||
|
|
||||||
|
// Recalculate all geometries ONCE after dragging is finished to avoid lagging
|
||||||
const newGeoms = calculateGeometries(newPos, turbine.rd, turbine.hh, turbine.fr, turbine.ksfAngle, turbine.ksfMirrored, turbine.hersteller);
|
const newGeoms = calculateGeometries(newPos, turbine.rd, turbine.hh, turbine.fr, turbine.ksfAngle, turbine.ksfMirrored, turbine.hersteller);
|
||||||
turbine.layers.sweptArea.clearLayers().addData(newGeoms.sweptArea);
|
turbine.layers.sweptArea.clearLayers().addData(newGeoms.sweptArea);
|
||||||
turbine.layers.techDist.clearLayers().addData(newGeoms.techDist);
|
turbine.layers.techDist.clearLayers().addData(newGeoms.techDist);
|
||||||
|
|
@ -537,16 +553,11 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||||
turbine.layers.ksf.clearLayers().addData(newGeoms.ksf);
|
turbine.layers.ksf.clearLayers().addData(newGeoms.ksf);
|
||||||
turbine.layers.blf.clearLayers().addData(newGeoms.blf);
|
turbine.layers.blf.clearLayers().addData(newGeoms.blf);
|
||||||
turbine.layers.mf.clearLayers().addData(newGeoms.mf);
|
turbine.layers.mf.clearLayers().addData(newGeoms.mf);
|
||||||
|
|
||||||
updateRotationHandlePos(turbine);
|
updateRotationHandlePos(turbine);
|
||||||
updateLabel(turbine, newGeoms);
|
updateLabel(turbine, newGeoms);
|
||||||
updateProximityLines();
|
updateProximityLines();
|
||||||
updateLegend(); // Show symbols in legend
|
|
||||||
triggerAutoSave();
|
triggerAutoSave();
|
||||||
if (activeTurbine?.id === turbine.id) {
|
|
||||||
// Keep fields updated
|
|
||||||
editNr.value = turbine.nr;
|
|
||||||
updateEditPanelPosition(); // Sync floating panel
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Rotation Handle drag logic
|
// Rotation Handle drag logic
|
||||||
|
|
@ -2740,11 +2751,11 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||||
|
|
||||||
state.turbines.forEach(t => {
|
state.turbines.forEach(t => {
|
||||||
if (state.isEditMode) {
|
if (state.isEditMode) {
|
||||||
t.layers.marker.dragging.enable();
|
if (t.layers.marker.dragging) t.layers.marker.dragging.enable();
|
||||||
t.layers.rotationHandle.dragging.enable();
|
if (t.layers.rotationHandle.dragging) t.layers.rotationHandle.dragging.enable();
|
||||||
} else {
|
} else {
|
||||||
t.layers.marker.dragging.disable();
|
if (t.layers.marker.dragging) t.layers.marker.dragging.disable();
|
||||||
t.layers.rotationHandle.dragging.disable();
|
if (t.layers.rotationHandle.dragging) t.layers.rotationHandle.dragging.disable();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue