]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/ExperimentUtil.java
Added Set End Time command and handler as an alternate stepping mode
[simantics/platform.git] / bundles / org.simantics.simulation / src / org / simantics / simulation / experiment / ExperimentUtil.java
index fb9f6780551ba488e32d838bc9ac9597cdcf61fc..d2fc9b560e7e9b54e1e3e4e81e7a5ea7acedec2d 100644 (file)
@@ -88,6 +88,31 @@ public final class ExperimentUtil {
             ((IDynamicExperiment)experiment).simulateDuration(duration);
     }
 
+    public static boolean canStepUntil(double endTime) {
+        IExperimentManager manager = 
+            Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+        IExperiment experiment = manager.getActiveExperiment();
+        if (experiment instanceof IDynamicExperiment) {
+            IDynamicExperiment exp = (IDynamicExperiment) experiment;
+            double currentTime = exp.getSimulationTime();
+            return currentTime < endTime;
+        }
+        return false;
+    }
+
+    public static void stepUntil(double endTime) {
+        IExperimentManager manager = 
+            Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+        IExperiment experiment = manager.getActiveExperiment();
+        if (experiment instanceof IDynamicExperiment) {
+            IDynamicExperiment exp = (IDynamicExperiment) experiment;
+            double currentTime = exp.getSimulationTime();
+            if (currentTime < endTime) {
+                exp.simulateDuration(endTime - currentTime);
+            }
+        }
+    }
+
     public static void simulate(boolean enabled) {
         IExperimentManager manager =
             Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);