render_mapper.alc 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. include "utils.alh"
  5. Boolean function main(model : Element):
  6. Element elements
  7. String class
  8. String elem
  9. String name
  10. String symbol
  11. String label
  12. Integer xloc
  13. String as_src
  14. String as_dest
  15. String link
  16. Element symbols_dict
  17. symbols_dict = dict_create()
  18. // Clear model
  19. elements = allInstances(model, "rendered/GraphicalElement")
  20. while (set_len(elements) > 0):
  21. class = set_pop(elements)
  22. model_delete_element(model, class)
  23. // render symbols
  24. xloc = 0
  25. elements = allInstances(model, "abstract/Symbol")
  26. while (set_len(elements) > 0):
  27. class = set_pop(elements)
  28. name = read_attribute(model, class, "typeID")
  29. symbol = instantiate_node(model, "rendered/Symbol", "")
  30. instantiate_attribute(model, symbol, "x", xloc)
  31. instantiate_attribute(model, symbol, "y", 0)
  32. instantiate_attribute(model, symbol, "typeID", name)
  33. instantiate_attribute(model, symbol, "__asid", list_read(string_split_nr(class, "/", 1), 1))
  34. xloc = xloc + 200
  35. dict_add(symbols_dict, class, symbol)
  36. // abstract links between symbols to concrete connecting lines between icons
  37. elements = allInstances(model, "abstract/Link")
  38. while (set_len(elements) > 0):
  39. class = set_pop(elements)
  40. as_src = readAssociationSource(model, class)
  41. as_dest = readAssociationDestination(model, class)
  42. link = instantiate_link(model, "rendered/ConnectingLine", "", symbols_dict[as_src], symbols_dict[as_dest])
  43. // render attributes to text labels
  44. xloc = 0
  45. elements = allInstances(model, "abstract/Attribute")
  46. while (set_len(elements) > 0):
  47. class = set_pop(elements)
  48. name = cast_string(read_attribute(model, class, "key")) + "=" + cast_string(read_attribute(model, class, "value"))
  49. label = instantiate_node(model, "rendered/TextLabel", "")
  50. instantiate_attribute(model, label, "text", name)
  51. instantiate_attribute(model, label, "x", xloc)
  52. instantiate_attribute(model, label, "y", 80)
  53. xloc = xloc + 200
  54. dict_add(symbols_dict, class, label)
  55. // abstract SymbolAttribute association to concrete IconTextLabel
  56. elements = allInstances(model, "abstract/SymbolAttribute")
  57. while (set_len(elements) > 0):
  58. class = set_pop(elements)
  59. as_src = readAssociationSource(model, class)
  60. as_dest = readAssociationDestination(model, class)
  61. instantiate_link(model, "rendered/SymbolTextLabel", "", symbols_dict[as_src], symbols_dict[as_dest])
  62. return True!