Forráskód Böngészése

Updated live modelling update operations

Yentl Van Tendeloo 7 éve
szülő
commit
d5da2810cb

+ 5 - 8
examples/live_modelling_CTCBD.py

@@ -31,16 +31,13 @@ transformation_add_AL({}, {}, "models/DTCBD/restartSim", open("models/generic/re
 model_add("models/live_modelling_CTCBD", "formalisms/ProcessModel", open("models/CTCBD/PM_live_modelling.mvc", 'r').read())
 
 def modify_model(model):
-    time.sleep(10)
-
-    constants = all_instances(model, "Design/ConstantBlock")
-    for constant in constants:
-        if read_attrs(model, constant)["value"] == 10:
-            attr_assign(model, constant, "value", 9.81)
+    elements = element_list_nice(model)
+    for e in elements:
+        if e.get("value", None) == 10.0:
+            attr_assign(model, e["id"], "value", 100.0)
             break
     else:
-        # Not found, so assume it was already modified...
         while 1:
-            time.sleep(0.1)
+            time.sleep(1)
 
 process_execute("models/live_modelling_CTCBD", {"design_model": "models/CTCBD_model"}, {"models/CTCBD/edit": modify_model})

+ 19 - 11
examples/live_modelling_DTCBD.py

@@ -30,16 +30,24 @@ transformation_add_AL({}, {}, "models/DTCBD/restartSim", open("models/generic/re
 model_add("models/live_modelling_DTCBD", "formalisms/ProcessModel", open("models/DTCBD/PM_live_modelling.mvc", 'r').read())
 
 def modify_model(model):
-    time.sleep(10)
-
-    if len(all_instances(model, "Design/ProbeBlock")) > 2:
-        import time
-        print("Sufficient Probeblocks detected, so pausing with edits")
-        while 1:
-            time.sleep(1)
-
-    new_block = instantiate(model, "Design/ProbeBlock")
-    attr_assign(model, new_block, "name", "MyProbeBlock")
-    print("Added new probeblock: " + new_block)
+    elements = element_list_nice(model)
+    for e in elements:
+        if e.get("value", None) == 2.0:
+            while 1:
+                time.sleep(1)
+        elif e.get("type", None) == "Design/AdditionBlock":
+            adder = e["id"]
+            links = read_outgoing(model, adder, "Design/Link")
+            destinations = [read_association_destination(model, link) for link in links]
+    else:
+        mult = instantiate(model, "Design/MultiplyBlock")
+        two = instantiate(model, "Design/ConstantBlock")
+        attr_assign(model, two, "value", 2.0)
+        instantiate(model, "Design/Link", (adder, mult))
+        instantiate(model, "Design/Link", (two, mult))
+        for link in links:
+            delete_element(model, link)
+        for destination in destinations:
+            instantiate(model, "Design/Link", (mult, destination))
 
 process_execute("models/live_modelling_DTCBD", {"design_model": "models/DTCBD_model"}, {"models/DTCBD/edit": modify_model})

+ 12 - 11
examples/live_modelling_FSA.py

@@ -29,19 +29,20 @@ transformation_add_AL({}, {}, "models/FSA/restartSim", open("models/generic/rest
 
 model_add("models/live_modelling_FSA", "formalisms/ProcessModel", open("models/FiniteStateAutomata/PM_live_modelling.mvc", 'r').read())
 
-def modify_model(model):
-    time.sleep(10)
-
-    states = all_instances(model, "Design/State")
-    print("Searching")
-    for state in states:
-        if (read_attrs(model, state)["name"] == "detected"):
-            print("Modified!")
-            delete_element(model, state)
+def edit_FSA(model):
+    elements = element_list_nice(model)
+    for e in elements:
+        if e.get("name", None) == "idle":
+            delete_element(model, e["id"])
             break
     else:
-        print("Nothing to do...")
         while 1:
-            time.sleep(0.1)
+            time.sleep(1)
+
+    # Removed, so set a new element as initial
+    for e in elements:
+        if e.get("name", None) == "armed":
+            attr_assign(model, e["id"], "initial", True)
+            break
 
 process_execute("models/live_modelling_FSA", {"design_model": "models/FSA_model"}, {"models/FSA/edit": modify_model})