瀏覽代碼

Fixed many bugs in render_OD

Yentl Van Tendeloo 8 年之前
父節點
當前提交
703eb98b9e
共有 4 個文件被更改,包括 37 次插入28 次删除
  1. 0 1
      classes/modelverse/modelverse.xml
  2. 1 1
      classes/window/main_window.xml
  3. 2 3
      frontend.py
  4. 34 23
      models/render_OD.alc

+ 0 - 1
classes/modelverse/modelverse.xml

@@ -574,7 +574,6 @@
 
                                     <script>
                                         self.context = str(uuid.uuid4())
-                                        print("Create new context: " + str(self.context))
                                         self.actions[self.context] = []
                                         self.code = self.parameters[3]
                                     </script>

+ 1 - 1
classes/window/main_window.xml

@@ -180,7 +180,7 @@
                             </raise>
                         </onentry>
 
-                        <transition event="mv_response" target="../../../rerender_model"/>
+                        <transition event="mv_response" target="../../../open_model/search_CS_mappers"/>
                     </state>
                 </state>
             </state>

+ 2 - 3
frontend.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Thu Oct  5 08:57:58 2017
+Date:   Thu Oct  5 09:29:40 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -2286,7 +2286,6 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_send_metadata_enter(self):
         self.raiseInternalEvent(Event("request", None, [['transformation_add_AL'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1]) + [self.parameters[2]]]))
         self.context = str(uuid.uuid4())
-        print("Create new context: " + str(self.context))
         self.actions[self.context] = []
         self.code = self.parameters[3]
         self.raiseInternalEvent(Event("result", None, [self.context]))
@@ -4385,7 +4384,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/running/add_object_diagrams/init"].addTransition(_running_add_object_diagrams_init_0)
         
         # transition /running/add_object_diagrams/modify_render_OD/exit
-        _running_add_object_diagrams_modify_render_OD_exit_0 = Transition(self, self.states["/running/add_object_diagrams/modify_render_OD/exit"], [self.states["/running/rerender_model"]])
+        _running_add_object_diagrams_modify_render_OD_exit_0 = Transition(self, self.states["/running/add_object_diagrams/modify_render_OD/exit"], [self.states["/running/open_model/search_CS_mappers"]])
         _running_add_object_diagrams_modify_render_OD_exit_0.setTrigger(Event("mv_response", None))
         self.states["/running/add_object_diagrams/modify_render_OD/exit"].addTransition(_running_add_object_diagrams_modify_render_OD_exit_0)
         

+ 34 - 23
models/render_OD.alc

@@ -14,14 +14,29 @@ Boolean function main(model : Element):
 	Integer text_loc
 	loc = 10
 
+	Element to_remove
+	String elem_to_remove
 	Element groups
-	groups = dict_create()
-
 	Element class_types
 	Element metamodel
 	metamodel = model["metamodel"]
 	String class_type
 
+	// Construct our own kind of tracability
+	Element cs_to_as
+	Element as_to_cs
+	String asid
+	cs_to_as = dict_create()
+	as_to_cs = dict_create()
+	groups = allInstances(model, "rendered/Group")
+	while (set_len(groups) > 0):
+		group = set_pop(groups)
+		asid = read_attribute(model, group, "__asid")
+		dict_add(cs_to_as, group, "abstract/" + asid)
+		dict_add(as_to_cs, "abstract/" + asid, group)
+
+	// Now render everything
+	groups = dict_create()
 	class_types = allInstances(metamodel, "Class")
 	while (set_len(class_types) > 0):
 		class_type = set_pop(class_types)
@@ -37,13 +52,13 @@ Boolean function main(model : Element):
 			y = 10
 
 			// Check if there is already an associated element
-			if (set_len(allOutgoingAssociationInstances(model, class, "TracabilityClass")) > 0):
+			if (dict_in(as_to_cs, class)):
 				// Yes, but is it still clean?
 				Element related_groups
 				Boolean dirty
 				dirty = False
 
-				related_groups = allAssociationDestinations(model, class, "TracabilityClass")
+				related_groups = as_to_cs[class]
 				while (set_len(related_groups) > 0):
 					group = set_pop(related_groups)
 					if (value_eq(read_attribute(model, group, "dirty"), True)):
@@ -58,21 +73,19 @@ Boolean function main(model : Element):
 					dict_add(groups, class, group)
 					continue!
 				else:
-					related_groups = allAssociationDestinations(model, class, "TracabilityClass")
-					Element to_remove
-					String elem_to_remove
-					while (set_len(related_groups) > 0):
-						group = set_pop(related_groups)
-						to_remove = allAssociationDestinations(model, group, "rendered/contains")
-						x = create_value(read_attribute(model, group, "x"))
-						y = create_value(read_attribute(model, group, "y"))
-						while (set_len(to_remove) > 0):
-							elem_to_remove = set_pop(to_remove)
-							if (read_type(model, elem_to_remove) == "rendered/Group"):
-								set_add(to_remove, elem_to_remove)
-							else:
-								model_delete_element(model, elem_to_remove)
-						model_delete_element(model, group)
+					group = as_to_cs[class]
+					group = set_pop(related_groups)
+					to_remove = allAssociationDestinations(model, group, "rendered/contains")
+					x = create_value(read_attribute(model, group, "x"))
+					y = create_value(read_attribute(model, group, "y"))
+
+					while (set_len(to_remove) > 0):
+						elem_to_remove = set_pop(to_remove)
+						if (read_type(model, elem_to_remove) == "rendered/Group"):
+							set_add(to_remove, elem_to_remove)
+						else:
+							model_delete_element(model, elem_to_remove)
+					model_delete_element(model, group)
 
 			attr_keys = dict_keys(getAttributeList(model, class))
 			text_loc = 5
@@ -87,7 +100,7 @@ Boolean function main(model : Element):
 			elem = instantiate_node(model, "rendered/Rectangle", "")
 			instantiate_attribute(model, elem, "x", 0)
 			instantiate_attribute(model, elem, "y", 0)
-			instantiate_attribute(model, elem, "height", 40 + set_len(geteAttributeList(model, class)) * 20)
+			instantiate_attribute(model, elem, "height", 40 + set_len(getAttributeList(model, class)) * 20)
 			instantiate_attribute(model, elem, "width", 150)
 			instantiate_attribute(model, elem, "lineWidth", 2) 
 			instantiate_attribute(model, elem, "lineColour", "black")
@@ -99,7 +112,7 @@ Boolean function main(model : Element):
 			instantiate_attribute(model, elem, "y", 3)
 			instantiate_attribute(model, elem, "lineWidth", 1)
 			instantiate_attribute(model, elem, "lineColour", "black")
-			instantiate_attribute(model, elem, "text", string_join(class, " : " + list_read(string_split(read_type(model, class)), 1)))
+			instantiate_attribute(model, elem, "text", string_join(class, " : " + cast_v2s(list_read(string_split(read_type(model, class), "/"), 1))))
 			instantiate_link(model, "rendered/contains", "", group, elem)
 
 			elem = instantiate_node(model, "rendered/Line", "")
@@ -125,8 +138,6 @@ Boolean function main(model : Element):
 				instantiate_link(model, "rendered/contains", "", group, elem)
 				text_loc = text_loc + 15
 
-			instantiate_link(model, "TracabilityClass", "", class, group)
-
 	// Flush all associations
 	elements = allInstances(model, "rendered/ConnectingLine")
 	while (set_len(elements) > 0):