From e85c507d7fc087823b50f148353eae6a207e6d20 Mon Sep 17 00:00:00 2001 From: Joppe Blondel Date: Sun, 2 Aug 2026 11:30:57 +0200 Subject: [PATCH] Fixed simulation advancing with play button --- src/bedit_gui/controllers/simulation_run_controller.py | 4 ++-- src/bedit_simulation/runtime.py | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bedit_gui/controllers/simulation_run_controller.py b/src/bedit_gui/controllers/simulation_run_controller.py index ddc949a..a0d85cf 100644 --- a/src/bedit_gui/controllers/simulation_run_controller.py +++ b/src/bedit_gui/controllers/simulation_run_controller.py @@ -47,8 +47,8 @@ class SimulationRunController(QObject): def start(self) -> None: if self._running or self.session is None: return - start_time = self.session.current_end_time - stop_time = start_time + self.session.settings.duration + start_time = self.session.settings.start_time + stop_time = self.session.current_end_time + self.session.settings.duration self._running = True self._update_actions() logger.info("Starting simulation from %s to %s", start_time, stop_time) diff --git a/src/bedit_simulation/runtime.py b/src/bedit_simulation/runtime.py index 0298b26..7633828 100644 --- a/src/bedit_simulation/runtime.py +++ b/src/bedit_simulation/runtime.py @@ -46,13 +46,15 @@ class SimulationSession: return self._simulation.is_running async def run_next(self) -> SimulationResult: - start_time = self.current_end_time - stop_time = start_time + self.settings.duration - intervals = math.ceil(self.settings.duration / self.settings.step_size) if self.settings.use_timed_steps else self.settings.number_of_steps + start_time = self.settings.start_time + stop_time = self.current_end_time + self.settings.duration + run_duration = stop_time - start_time + intervals = math.ceil(run_duration / self.settings.step_size) if self.settings.use_timed_steps else math.ceil(self.settings.number_of_steps * run_duration / self.settings.duration) options = SimulationOptions(start_time=start_time, stop_time=stop_time, number_of_intervals=intervals, tolerance=self.settings.tolerance, method=self.settings.method) result = await self._simulation.run(options) + # TODO: Continue from OpenModelica restart state instead of recomputing the full time range. self.current_end_time = stop_time - self.results.append(result) + self.results[:] = [result] return result def cancel(self) -> bool: