GridCal 5.3.4__tar.gz → 5.3.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +1 -7
  2. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +1 -2
  3. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +7 -5
  4. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +8 -4
  5. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +26 -7
  6. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +3 -1
  7. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +8 -8
  8. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +34 -18
  9. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +12 -15
  10. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -68
  11. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +31 -44
  12. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +29 -203
  13. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +178 -172
  14. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +1 -1
  15. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +12 -2
  16. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +5 -0
  17. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +2 -2
  18. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +6 -8
  19. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/__version__.py +1 -1
  20. {gridcal-5.3.4 → gridcal-5.3.5}/PKG-INFO +1 -1
  21. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -153
  22. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -90
  23. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -93
  24. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_infra_map.py +0 -102
  25. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -103
  26. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -91
  27. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -94
  28. gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -92
  29. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ExecuteGridCal.py +0 -0
  30. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  31. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  32. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  33. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  34. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  35. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  36. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Analysis/__init__.py +0 -0
  37. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Analysis/gui.py +0 -0
  38. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  39. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  40. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  41. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  42. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  43. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  44. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  45. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  46. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  47. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  48. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  49. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  50. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  51. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  52. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  53. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  54. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  55. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  56. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  57. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  58. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  59. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  60. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  61. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  62. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  63. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  64. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  65. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  66. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  67. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  68. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  69. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  70. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  71. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  72. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  73. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  74. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  75. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  76. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
  77. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  78. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  79. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  80. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  81. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  82. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  83. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  84. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  85. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  86. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  87. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  88. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  89. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  90. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  91. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  92. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  93. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  94. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  95. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  96. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  97. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  98. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  99. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  100. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  101. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  102. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  103. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  104. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  105. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  106. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/__init__.py +0 -0
  107. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  108. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  109. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  110. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  111. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  112. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  113. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/GridGenerator/gui.py +0 -0
  114. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  115. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  116. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  117. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  118. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  119. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  120. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  121. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  122. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  123. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  124. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  125. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  126. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  127. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  128. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/GridCalMain.py +0 -0
  129. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/MainWindow.py +0 -0
  130. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  131. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  132. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  133. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  134. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  135. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  136. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  137. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  138. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  139. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  140. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  141. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  142. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  143. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  144. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  145. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  146. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  147. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
  148. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/__init__.py +0 -0
  149. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/icons_rc.py +0 -0
  150. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/object_select_window.py +0 -0
  151. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Main/update_gui_file.py +0 -0
  152. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  153. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  154. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  155. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  156. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  157. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  158. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  159. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  160. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  161. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  162. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  163. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  164. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  165. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  166. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  167. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  168. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  169. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  170. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  171. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  172. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  173. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  174. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  175. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  176. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  177. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  178. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  179. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  180. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  181. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  182. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  183. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  184. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  185. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  186. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  187. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  188. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  189. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  190. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  191. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  192. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  193. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  194. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  195. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  196. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  197. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  198. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  199. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  200. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  201. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  202. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  203. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  204. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Visualization/__init__.py +0 -0
  205. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Visualization/visualization.py +0 -0
  206. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Widgets/__init__.py +0 -0
  207. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  208. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  209. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  210. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  211. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  212. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  213. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  214. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/__init__.py +0 -0
  215. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/associations_model.py +0 -0
  216. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/console_widget.py +0 -0
  217. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/general_dialogues.py +0 -0
  218. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/gui_functions.py +0 -0
  219. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/messages.py +0 -0
  220. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/object_model.py +0 -0
  221. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/pandas_model.py +0 -0
  222. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/plot_config.py +0 -0
  223. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/profiles_model.py +0 -0
  224. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/results_model.py +0 -0
  225. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/table_view_header_wrap.py +0 -0
  226. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/themes.py +0 -0
  227. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/update_gui_all.py +0 -0
  228. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/update_gui_common.py +0 -0
  229. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Gui/wrappable_table_model.py +0 -0
  230. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/LICENSE.txt +0 -0
  231. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Session/__init__.py +0 -0
  232. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Session/export_results_driver.py +0 -0
  233. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Session/file_handler.py +0 -0
  234. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Session/server_driver.py +0 -0
  235. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Session/session.py +0 -0
  236. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/Session/synchronization_driver.py +0 -0
  237. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/__init__.py +0 -0
  238. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  239. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  240. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  241. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  242. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  243. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  244. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  245. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  246. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  247. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  248. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  249. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  250. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  251. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  252. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  253. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  254. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  255. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  256. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  257. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  258. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  259. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  260. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  261. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  262. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  263. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  264. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  265. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  266. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  267. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  268. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  269. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  270. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  271. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  272. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  273. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  274. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  275. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  276. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/__init__.py +0 -0
  277. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/data/GridCal.ico +0 -0
  278. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/data/GridCal.svg +0 -0
  279. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/data/__init__.py +0 -0
  280. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/data/cables.csv +0 -0
  281. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/data/sequence_lines.csv +0 -0
  282. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/data/transformers.csv +0 -0
  283. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/data/wires.csv +0 -0
  284. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/plugins.py +0 -0
  285. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/templates.py +0 -0
  286. {gridcal-5.3.4 → gridcal-5.3.5}/GridCal/update.py +0 -0
  287. {gridcal-5.3.4 → gridcal-5.3.5}/setup.cfg +0 -0
  288. {gridcal-5.3.4 → gridcal-5.3.5}/setup.py +0 -0
@@ -144,7 +144,7 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
144
144
  x = pos.x() - self.rect().width() / 2
145
145
  y = pos.y() - self.rect().height() / 2
146
146
  self.setRect(x, y, self.rect().width(), self.rect().height())
147
- self.set_callabacks(pos.x(), pos.y())
147
+ self.set_callbacks(pos.x(), pos.y())
148
148
 
149
149
  if self.hovered and self.enabled:
150
150
  self.update_position()
@@ -232,13 +232,7 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
232
232
  # Implement the functionality for Action 1 here
233
233
  self.editor.remove_line_location_graphic(self)
234
234
 
235
- def MergeFunction(self):
236
- """
237
235
 
238
- :return:
239
- """
240
- self.editor.merge_lines()
241
- pass
242
236
 
243
237
  def setNodeColor(self, inner_color: QColor, border_color: QColor = None) -> None:
244
238
  """
@@ -47,7 +47,6 @@ class MapLineContainer(GenericDiagramWidget):
47
47
  self.nodes_list: List[LineLocationGraphicItem] = list()
48
48
  self.segments_list: List[MapLineSegment] = list()
49
49
  self.enabled = True
50
- self.original = True # TODO: Que es esto?
51
50
 
52
51
  def set_width_scale(self, branch_scale: float, arrow_scale: float):
53
52
  """
@@ -469,7 +468,7 @@ class MapLineContainer(GenericDiagramWidget):
469
468
  for line in self.segments_list:
470
469
  line.set_enable(val=False)
471
470
 
472
- def set_arrows_with_power(self, Sf: complex, St: complex) -> None:
471
+ def set_arrows_with_power(self, Sf: complex | None, St: complex | None) -> None:
473
472
  """
474
473
 
475
474
  :param Sf:
@@ -63,7 +63,7 @@ class MapLineSegment(QGraphicsLineItem):
63
63
  self.first.add_position_change_callback(self.set_from_side_coordinates)
64
64
  self.second.add_position_change_callback(self.set_to_side_coordinates)
65
65
 
66
- self.set_colour(self.color, self.style)
66
+ self._pen = self.set_colour(self.color, self.style)
67
67
  self.update_endings()
68
68
  self.needsUpdate = True
69
69
  self.setZValue(0)
@@ -93,9 +93,9 @@ class MapLineSegment(QGraphicsLineItem):
93
93
  :param width:
94
94
  :return:
95
95
  """
96
- pen = self.pen()
97
- pen.setWidthF(width)
98
- self.setPen(pen)
96
+ if self._pen.widthF() != width: # Only update if width changes
97
+ self._pen.setWidthF(width)
98
+ self.setPen(self._pen)
99
99
 
100
100
  def set_arrow_scale(self, width: float):
101
101
  """
@@ -124,6 +124,8 @@ class MapLineSegment(QGraphicsLineItem):
124
124
  self.arrow_p_to.set_colour(color, self.arrow_p_to.w, style)
125
125
  self.arrow_q_to.set_colour(color, self.arrow_q_to.w, style)
126
126
 
127
+ return pen
128
+
127
129
  def set_from_side_coordinates(self, x: float, y: float):
128
130
  """
129
131
 
@@ -383,7 +385,7 @@ class MapLineSegment(QGraphicsLineItem):
383
385
  self.editor.circuit.delete_branch(obj=self.api_object)
384
386
  self.editor.delete_diagram_element(device=self.api_object)
385
387
 
386
- def set_arrows_with_power(self, Sf: complex, St: complex) -> None:
388
+ def set_arrows_with_power(self, Sf: complex | None, St: complex | None) -> None:
387
389
  """
388
390
  Set the arrow directions
389
391
  :param Sf: Complex power from
@@ -5,7 +5,7 @@
5
5
  from __future__ import annotations
6
6
  from typing import Union, TYPE_CHECKING, List, Callable
7
7
  from PySide6.QtCore import QPointF
8
- from PySide6.QtGui import QBrush, QColor
8
+ from PySide6.QtGui import QBrush
9
9
 
10
10
  from GridCal.Gui.Diagrams.generic_graphics import GenericDiagramWidget
11
11
 
@@ -24,10 +24,15 @@ class NodeTemplate(GenericDiagramWidget):
24
24
  api_object: ALL_DEV_TYPES = None,
25
25
  editor: Union[GridMapWidget, None] = None,
26
26
  draw_labels: bool = True,
27
- needsUpdate: bool = True,
28
27
  lat: float = 0.0,
29
28
  lon: float = 0.0):
30
29
  """
30
+
31
+ :param api_object: any GridCal device object
32
+ :param editor: GridMapWidget
33
+ :param draw_labels:
34
+ :param lat:
35
+ :param lon:
31
36
  """
32
37
  GenericDiagramWidget.__init__(self,
33
38
  parent=None,
@@ -35,7 +40,6 @@ class NodeTemplate(GenericDiagramWidget):
35
40
  editor=editor,
36
41
  draw_labels=draw_labels)
37
42
 
38
- self.needs_update: bool = needsUpdate
39
43
  self.lat = lat
40
44
  self.lon = lon
41
45
 
@@ -52,7 +56,7 @@ class NodeTemplate(GenericDiagramWidget):
52
56
  """
53
57
  self._callbacks.append(fcn)
54
58
 
55
- def set_callabacks(self, x: float, y: float) -> None:
59
+ def set_callbacks(self, x: float, y: float) -> None:
56
60
  """
57
61
  Call all callback functions with x, y
58
62
  :param x: x position
@@ -62,8 +62,14 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
62
62
  self.api_object: Substation = api_object # reassign for the types to be clear
63
63
 
64
64
  self.radius = r
65
- x, y = self.editor.to_x_y(lat=lat, lon=lon)
66
- self.setRect(x, y, self.radius, self.radius)
65
+ r2 = r / 2
66
+ x, y = self.editor.to_x_y(lat=lat, lon=lon) # upper left corner
67
+ self.setRect(
68
+ x - r2,
69
+ y - r2,
70
+ self.radius,
71
+ self.radius
72
+ )
67
73
 
68
74
  # Enable hover events for the item
69
75
  self.setAcceptHoverEvents(True)
@@ -113,7 +119,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
113
119
  r3 = r / 2
114
120
  xc = new_x + r3
115
121
  yc = new_y + r3
116
- self.set_callabacks(xc, yc)
122
+ self.set_callbacks(xc, yc)
117
123
 
118
124
  for vl_graphics in self.voltage_level_graphics:
119
125
  vl_graphics.center_on_substation()
@@ -155,8 +161,14 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
155
161
  :param lon:
156
162
  :return: x, y
157
163
  """
158
- x, y = self.editor.to_x_y(lat=lat, lon=lon)
159
- self.setRect(x, y, self.rect().width(), self.rect().height())
164
+ x, y = self.editor.to_x_y(lat=lat, lon=lon) # upper left corner
165
+
166
+ self.setRect(
167
+ x - self.rect().width() / 2,
168
+ y - self.rect().height() / 2,
169
+ self.rect().width(),
170
+ self.rect().height()
171
+ )
160
172
 
161
173
  for vl in self.voltage_level_graphics:
162
174
  vl.center_on_substation()
@@ -224,13 +236,20 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
224
236
  x = pos.x() - self.rect().width() / 2
225
237
  y = pos.y() - self.rect().height() / 2
226
238
  self.setRect(x, y, self.rect().width(), self.rect().height())
227
- self.set_callabacks(pos.x(), pos.y())
239
+ self.set_callbacks(pos.x(), pos.y())
228
240
 
229
241
  for vl_graphics in self.voltage_level_graphics:
230
242
  vl_graphics.center_on_substation()
231
243
 
232
244
  self.update_position_at_the_diagram() # always update
233
245
 
246
+ # QGraphicsRectItem.mouseMoveEvent(self, event)
247
+ # pos = self.mapToParent(event.pos())
248
+ # x = pos.x() + self.rect().width() / 2
249
+ # y = pos.y() + self.rect().height() / 2
250
+ # self.set_callbacks(x, y)
251
+ # self.update_position_at_the_diagram() # always update
252
+
234
253
  def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
235
254
  """
236
255
  Event handler for mouse press events.
@@ -369,7 +388,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
369
388
 
370
389
  if ok:
371
390
  x, y = self.move_to(lat=self.api_object.latitude, lon=self.api_object.longitude) # this moves the vl too
372
- self.set_callabacks(x, y)
391
+ self.set_callbacks(x, y)
373
392
 
374
393
  def new_substation_diagram(self):
375
394
  """
@@ -203,6 +203,8 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
203
203
  icon_path="",
204
204
  function_ptr=self.add_bus)
205
205
 
206
+ menu.exec_(event.screenPos())
207
+
206
208
  def set_color(self, inner_color: QColor = None, border_color: QColor = None) -> None:
207
209
  """
208
210
 
@@ -238,7 +240,7 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
238
240
  :param width: New pen width.
239
241
  """
240
242
  pen = self.pen()
241
- pen.setWidth(width)
243
+ pen.setWidth(width) # keep this and do not change to setWidthF
242
244
  self.setPen(pen)
243
245
 
244
246
  def add_bus(self):
@@ -45,9 +45,9 @@ class BlueMarbleTiles(Tiles):
45
45
  """
46
46
 
47
47
  Tiles.__init__(self,
48
- TilesetName=name,
49
- TilesetShortName='BM Tiles',
50
- TilesetVersion='1.0',
48
+ tile_set_name=name,
49
+ tile_set_short_name='BM Tiles',
50
+ tile_set_version='1.0',
51
51
  levels=list(range(10)),
52
52
  tile_width=256,
53
53
  tile_height=256,
@@ -66,7 +66,7 @@ class BlueMarbleTiles(Tiles):
66
66
 
67
67
  Note that we assume the point *is* on the map!
68
68
 
69
- Code taken from [http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
69
+ Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
70
70
  """
71
71
 
72
72
  lat_rad = math.radians(latitude)
@@ -76,18 +76,18 @@ class BlueMarbleTiles(Tiles):
76
76
 
77
77
  return xtile, ytile
78
78
 
79
- def Tile2Geo(self, xtile: float, ytile: float) -> Tuple[float, float]:
79
+ def Tile2Geo(self, x_tile: float, y_tile: float) -> Tuple[float, float]:
80
80
  """Convert tile fractional coordinates to geo for level in use.
81
81
 
82
82
  tile a tupl;e (xtile,ytile) of tile fractional coordinates
83
83
 
84
84
  Note that we assume the point *is* on the map!
85
85
 
86
- Code taken from [http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
86
+ Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
87
87
  """
88
88
  n = 2.0 ** self.level
89
- xgeo = xtile / n * 360.0 - 180.0
90
- yrad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
89
+ xgeo = x_tile / n * 360.0 - 180.0
90
+ yrad = math.atan(math.sinh(math.pi * (1 - 2 * y_tile / n)))
91
91
  ygeo = math.degrees(yrad)
92
92
 
93
93
  return xgeo, ygeo
@@ -23,7 +23,6 @@
23
23
  """
24
24
  A tile source that serves OpenStreetMap tiles from server(s).
25
25
  """
26
-
27
26
  import math
28
27
  from typing import Tuple
29
28
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
@@ -46,16 +45,15 @@ class CartoDbTiles(Tiles):
46
45
  :param tile_servers:
47
46
  """
48
47
 
49
- super().__init__(TilesetName=name,
50
- TilesetShortName='CartoDb Dark Matter',
51
- TilesetVersion='1.0',
48
+ super().__init__(tile_set_name=name,
49
+ tile_set_short_name='CartoDb Dark Matter',
50
+ tile_set_version='1.0',
52
51
  levels=list(range(22)),
53
52
  tile_width=256,
54
53
  tile_height=256,
55
54
  tiles_dir=tiles_dir,
56
55
  servers=[
57
- "http://basemaps.cartocdn.com/dark_all/"
58
- # http://basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png
56
+ "https://basemaps.cartocdn.com/dark_all/"
59
57
  ] if tile_servers is None else tile_servers,
60
58
  url_path='/{Z}/{X}/{Y}.png',
61
59
  max_server_requests=2,
@@ -73,28 +71,46 @@ class CartoDbTiles(Tiles):
73
71
  def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[float, float]:
74
72
  """
75
73
  Convert geo to tile fractional coordinates for level in use.
76
- geo tuple of geo coordinates (xgeo, ygeo)
74
+ geo tuple of geo coordinates (longitude, latitude)
77
75
  Note that we assume the point *is* on the map!
78
- Code taken from [http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
76
+ Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
77
+
78
+ Lon./lat. to tile numbers:
79
+ n = 2 ^ zoom
80
+ x_tile = n * ((lon_deg + 180) / 360)
81
+ y_tile = n * (1 - (log(tan(lat_rad) + sec(lat_rad)) / π)) / 2
82
+
83
+ :return: This code returns the coordinate of the upper left point of the tile. (x_tile, y_tile)
79
84
  """
80
85
  lat_rad = math.radians(latitude)
81
- n = 2.0 ** self.level
82
- xtile = (longitude + 180.0) / 360.0 * n
83
- ytile = ((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n
86
+ n = math.pow(2.0, self.level)
87
+ x_tile = (longitude + 180.0) / 360.0 * n
88
+ y_tile = ((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n
84
89
 
85
- return xtile, ytile
90
+ return x_tile, y_tile
86
91
 
87
- def Tile2Geo(self, xtile: float, ytile: float) -> Tuple[float, float]:
92
+ def Tile2Geo(self, x_tile: float, y_tile: float) -> Tuple[float, float]:
88
93
  """
89
94
  Convert tile fractional coordinates to geo for level in use.
90
- tile a tuple (xtile,ytile) of tile fractional coordinates
95
+ tile a tuple (x_tile, y_tile) of tile fractional coordinates
91
96
  Note that we assume the point *is* on the map!
92
- Code taken from [http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
97
+ Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
98
+
99
+ n = 2 ^ zoom
100
+ lon_deg = x_tile / n * 360.0 - 180.0
101
+ lat_rad = arctan(sinh(π * (1 - 2 * y_tile / n)))
102
+ lat_deg = lat_rad * 180.0 / π
103
+
104
+ This returns the NW-corner of the square.
105
+ Use the function with x_tile+1 and/or y_tile+1 to get the other corners.
106
+ With x_tile+0.5 & y_tile+0.5 it will return the center of the tile.
107
+
108
+ :return: This code returns the coordinate of the upper left point of the tile. (longitude, latitude)
93
109
  """
94
110
 
95
111
  n = 2.0 ** self.level
96
- longitude = xtile / n * 360.0 - 180.0
97
- yrad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
98
- latitude = math.degrees(yrad)
112
+ longitude = x_tile / n * 360.0 - 180.0
113
+ y_rad = math.atan(math.sinh(math.pi * (1 - 2 * y_tile / n)))
114
+ latitude = math.degrees(y_rad)
99
115
 
100
116
  return longitude, latitude
@@ -72,8 +72,8 @@ class BaseTiles(object):
72
72
  self.ppd_y = 0
73
73
 
74
74
  # TODO: implement map wrap-around
75
- # self.wrap_x = False
76
- # self.wrap_y = False
75
+ self.wrap_x = False
76
+ self.wrap_y = False
77
77
 
78
78
  # setup the tile cache
79
79
  self.cache = TilesCache(tiles_dir=tiles_dir, max_lru=max_lru)
@@ -207,13 +207,13 @@ class BaseTiles(object):
207
207
  Tile coordinates are measured from map top-left.
208
208
  """
209
209
 
210
- # # if we are wrapping X or Y, get wrapped tile coords
211
- # if self.wrap_x:
212
- # x = (x + self.num_tiles_x*self.tile_size_x) % self.num_tiles_x
213
- # if self.wrap_y:
214
- # y = (y + self.num_tiles_y*self.tile_size_y) % self.num_tiles_y
210
+ # if we are wrapping X or Y, get wrapped tile coords
211
+ if self.wrap_x:
212
+ x = (x + self.num_tiles_x * self.tile_size_x) % self.num_tiles_x
213
+ if self.wrap_y:
214
+ y = (y + self.num_tiles_y * self.tile_size_y) % self.num_tiles_y
215
215
 
216
- # retrieve the tile
216
+ # retrieve the tile
217
217
  try:
218
218
  # get tile from cache
219
219
  return self.cache[(self.level, x, y)]
@@ -254,7 +254,6 @@ class BaseTiles(object):
254
254
  """
255
255
  Return True if tile at (level, x, y) is on-disk.
256
256
  """
257
-
258
257
  raise Exception('You must override BaseTiles.tile_on_disk(level, x, y))')
259
258
 
260
259
  def setCallback(self, callback: Callable[[int, float, float, QPixmap, bool], None]):
@@ -262,9 +261,7 @@ class BaseTiles(object):
262
261
  Set the "tile available" callback function.
263
262
  Only used with internet tiles. See "tiles_net.py".
264
263
  """
265
-
266
- pass
267
- # raise Exception('You must override BaseTiles.setCallback(callback))')
264
+ raise Exception('You must override BaseTiles.setCallback(callback))')
268
265
 
269
266
  def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[int, int]:
270
267
  """
@@ -277,12 +274,12 @@ class BaseTiles(object):
277
274
 
278
275
  raise Exception('You must override BaseTiles.Geo2Tile(xgeo, ygeo)')
279
276
 
280
- def Tile2Geo(self, xtile: float, ytile: float) -> Tuple[float, float]:
277
+ def Tile2Geo(self, x_tile: float, y_tile: float) -> Tuple[float, float]:
281
278
  """
282
279
  Convert tile fractional coordinates to geo for level in use.
283
280
 
284
- xtile tile fractional X coordinate
285
- ytile tile fractional Y coordinate
281
+ :param x_tile: tile fractional X coordinate
282
+ :param y_tile: tile fractional Y coordinate
286
283
 
287
284
  Note that we assume the point *is* on the map!
288
285
  """
@@ -42,74 +42,6 @@ def log(val: str):
42
42
  print(val)
43
43
 
44
44
 
45
-
46
-
47
- # class OsmHandler(osm.SimpleHandler):
48
- # def __init__(self):
49
- # super().__init__()
50
- # self.nodes = []
51
- # self.ways = []
52
- #
53
- # def node(self, n):
54
- # self.nodes.append((n.location.lat, n.location.lon))
55
- #
56
- # def way(self, w):
57
- # self.ways.append([node.ref for node in w.nodes])
58
- #
59
- #
60
- # def render_pbf_to_pixmap(pbf_file: str, width=800, height=800) -> QPixmap:
61
- # """
62
- #
63
- # :param pbf_file:
64
- # :param width:
65
- # :param height:
66
- # :return:
67
- # """
68
- # # Parse the .pbf file
69
- # handler = OsmHandler()
70
- # handler.apply_file(pbf_file)
71
- #
72
- # # Setup Mercator projection
73
- # mercator_proj = Proj("epsg:3857")
74
- #
75
- # # Create a QPixmap and painter
76
- # pixmap = QPixmap(width, height)
77
- # pixmap.fill(Qt.GlobalColor.white)
78
- # painter = QPainter(pixmap)
79
- # painter.setPen(QPen(Qt.GlobalColor.black, 1))
80
- #
81
- # # Scale coordinates to fit the pixmap
82
- # bounds = {
83
- # 'min_x': float('inf'), 'max_x': float('-inf'),
84
- # 'min_y': float('inf'), 'max_y': float('-inf')
85
- # }
86
- # transformed_nodes = []
87
- #
88
- # for lat, lon in handler.nodes:
89
- # x, y = mercator_proj(lon, lat)
90
- # transformed_nodes.append((x, y))
91
- # bounds['min_x'] = min(bounds['min_x'], x)
92
- # bounds['max_x'] = max(bounds['max_x'], x)
93
- # bounds['min_y'] = min(bounds['min_y'], y)
94
- # bounds['max_y'] = max(bounds['max_y'], y)
95
- #
96
- # x_range = bounds['max_x'] - bounds['min_x']
97
- # y_range = bounds['max_y'] - bounds['min_y']
98
- # scale_x = width / x_range if x_range else 1
99
- # scale_y = height / y_range if y_range else 1
100
- # scale = min(scale_x, scale_y)
101
- #
102
- # # Render nodes as points
103
- # for x, y in transformed_nodes:
104
- # scaled_x = int((x - bounds['min_x']) * scale)
105
- # scaled_y = int((y - bounds['min_y']) * scale)
106
- # painter.drawPoint(scaled_x, height - scaled_y) # Flip y-axis for Qt's coordinate system
107
- #
108
- # # Close the painter
109
- # painter.end()
110
- # return pixmap
111
-
112
-
113
45
  class TileWorker(QThread):
114
46
  """Thread class that gets request from queue, loads tile, calls callback."""
115
47
 
@@ -35,34 +35,20 @@ import urllib
35
35
  from urllib import request
36
36
  from urllib.error import HTTPError
37
37
  import queue
38
- from PySide6.QtGui import QPixmap, QPainter, QPen, QColor
39
-
40
38
  from typing import List, Union
41
39
  from collections.abc import Callable
40
+ from warnings import warn
41
+ from PySide6.QtGui import QPixmap, QColor
42
+
42
43
  from GridCal.Gui.Diagrams.MapWidget.Tiles.base_tiles import BaseTiles
43
44
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tile_worker import TileWorker
44
45
 
45
46
 
46
- def log(val: str):
47
- print(val)
48
-
49
-
50
47
  # # set how old disk-cache tiles can be before we re-request them from the
51
48
  # # server. this is the number of days old a tile is before we re-request.
52
49
  # # if 'None', never re-request tiles after first satisfied request.
53
50
  # RefreshTilesAfterDays = 60
54
51
 
55
- # define the error messages for various failures
56
- StatusError = {401: 'Looks like you need to be authorised for this server.',
57
- 404: 'You might need to check the tile addressing for this server.',
58
- 429: 'You are asking for too many tiles.', }
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
52
 
67
53
  class Tiles(BaseTiles):
68
54
  """
@@ -70,15 +56,15 @@ class Tiles(BaseTiles):
70
56
  """
71
57
 
72
58
  # allowed file types and associated values
73
- AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG', 'pbf': 'PBF'}
59
+ AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG'}
74
60
 
75
61
  # the number of seconds in a day
76
62
  SecondsInADay = 60 * 60 * 24
77
63
 
78
64
  def __init__(self,
79
- TilesetName: str,
80
- TilesetShortName: str,
81
- TilesetVersion: str,
65
+ tile_set_name: str,
66
+ tile_set_short_name: str,
67
+ tile_set_version: str,
82
68
  levels: List[int],
83
69
  tile_width: int,
84
70
  tile_height: int,
@@ -88,10 +74,13 @@ class Tiles(BaseTiles):
88
74
  url_path: str,
89
75
  max_server_requests: int,
90
76
  http_proxy,
91
- refetch_days: int = 60,
77
+ re_fetch_days: int = 60,
92
78
  attribution: str = ""):
93
79
  """
94
80
  Initialise a Tiles instance.
81
+ :param tile_set_name: Name of the tile set.
82
+ :param tile_set_short_name: Short name of the tile set.
83
+ :param tile_set_version: Version of the tile set.
95
84
  :param levels: a list of level numbers that are to be served
96
85
  :param tile_width: width of each tile in pixels
97
86
  :param tile_height: height of each tile in pixels
@@ -101,11 +90,11 @@ class Tiles(BaseTiles):
101
90
  :param url_path: path on server to each tile
102
91
  :param max_server_requests: maximum number of requests per server
103
92
  :param http_proxy: proxy to use if required
104
- :param refetch_days: fetch new server tile if older than this in days (0 means don't ever update tiles)
93
+ :param re_fetch_days: fetch new server tile if older than this in days (0 means don't ever update tiles)
105
94
  """
106
- self.TilesetName = TilesetName
107
- self.TilesetShortName = TilesetShortName
108
- self.TilesetVersion = TilesetVersion
95
+ self.tile_set_name = tile_set_name
96
+ self.tile_set_short_name = tile_set_short_name
97
+ self.tile_set_version = tile_set_version
109
98
 
110
99
  self.attribution_string = attribution
111
100
 
@@ -124,13 +113,13 @@ class Tiles(BaseTiles):
124
113
  self.url_path = url_path
125
114
  self.max_requests = max_server_requests
126
115
  self.http_proxy = http_proxy
127
- self.refresh_tiles_after_days = refetch_days
116
+ self.refresh_tiles_after_days = re_fetch_days
128
117
 
129
- # callback must be set by higher-level copde
118
+ # callback must be set by higher-level code
130
119
  self.callback: Union[None, Callable[[int, float, float, QPixmap, bool], None]] = None
131
120
 
132
121
  # calculate a re-request age, if specified
133
- self.rerequest_age = (time.time() - self.refresh_tiles_after_days * self.SecondsInADay)
122
+ self.re_request_age = (time.time() - self.refresh_tiles_after_days * self.SecondsInADay)
134
123
 
135
124
  # tiles extent for tile data (left, right, top, bottom)
136
125
  self.extent = (-180.0, 180.0, -85.0511, 85.0511)
@@ -148,7 +137,7 @@ class Tiles(BaseTiles):
148
137
  # determine the file bitmap type
149
138
  try:
150
139
  self.filetype = self.AllowedFileTypes[tile_extension_lower]
151
- except KeyError as e:
140
+ except KeyError:
152
141
  raise TypeError("Bad tile_extension value, got '%s', "
153
142
  "expected one of %s"
154
143
  % (str(tile_extension),
@@ -166,35 +155,33 @@ class Tiles(BaseTiles):
166
155
  # prepare the "pending" and "error" images
167
156
  self.pending_tile = QPixmap(256, 256)
168
157
  self.pending_tile.fill(QColor.fromRgb(50, 50, 50, 255))
169
- # self.pending_tile.loadFromData(std.getPendingImage())
170
158
 
171
159
  self.error_tile = QPixmap(256, 256)
172
160
  self.error_tile.fill(QColor.fromRgb(255, 0, 0, 255))
173
- # self.error_tile.loadFromData(std.getErrorImage())
174
161
 
175
- # Usage
176
- # pbf_file = "your_file.pbf"
177
- # pixmap = render_pbf_to_pixmap(pbf_file)
178
- # pixmap.save("output_map.png")
162
+ # define the error messages for various failures
163
+ StatusError = {401: 'Looks like you need to be authorised for this server.',
164
+ 404: 'You might need to check the tile addressing for this server.',
165
+ 429: 'You are asking for too many tiles.', }
179
166
 
180
167
  # test for firewall - use proxy (if supplied)
181
168
  test_url = self.servers[0] + self.url_path.format(Z=0, X=0, Y=0)
182
169
  try:
183
170
  r = request.Request(test_url, headers={'User-Agent': 'GridCal 5'})
184
171
  response = request.urlopen(r).read()
185
- # request.urlopen(test_url)
172
+
186
173
  except HTTPError as e:
187
174
  # if it's fatal, log it and die, otherwise try a proxy
188
175
  status_code = e.code
189
- log('Error: test_url=%s, status_code=%s' % (test_url, str(status_code)))
176
+ warn('Error: test_url=%s, status_code=%s' % (test_url, str(status_code)))
190
177
  error_msg = StatusError.get(status_code, None)
191
178
  if status_code:
192
179
  msg = "\nYou got a " + str(status_code) + " (" + str(error_msg) + ") error from: " + str(test_url)
193
180
  print(msg)
194
181
  # raise RuntimeError(msg) from None
195
182
 
196
- log('%s exception doing simple connection to: %s' % (type(e).__name__, test_url))
197
- log(''.join(traceback.format_exc()))
183
+ warn('%s exception doing simple connection to: %s' % (type(e).__name__, test_url))
184
+ warn(''.join(traceback.format_exc()))
198
185
 
199
186
  if http_proxy:
200
187
  proxy = request.ProxyHandler({'http': http_proxy})
@@ -225,7 +212,7 @@ class Tiles(BaseTiles):
225
212
  callback=self.tile_is_available,
226
213
  error_tile=self.error_tile,
227
214
  content_type=self.content_type,
228
- re_request_age=self.rerequest_age,
215
+ re_request_age=self.re_request_age,
229
216
  error_image=self.error_tile,
230
217
  refresh_tiles_after_days=60)
231
218
  self.workers.append(worker)
@@ -282,9 +269,9 @@ class Tiles(BaseTiles):
282
269
  tile = self.cache[(self.level, x, y)]
283
270
  if self.tile_on_disk(self.level, x, y):
284
271
  tile_date = self.cache.tile_date((self.level, x, y))
285
- if self.rerequest_age and (tile_date < self.rerequest_age):
272
+ if self.re_request_age and (tile_date < self.re_request_age):
286
273
  self.get_server_tile(self.level, x, y)
287
- except KeyError as e:
274
+ except KeyError:
288
275
  # not cached, start process of getting tile from 'net, return 'pending' image
289
276
  self.get_server_tile(self.level, x, y)
290
277
  tile = self.pending_tile
@@ -402,4 +389,4 @@ class Tiles(BaseTiles):
402
389
  self.refresh_tiles_after_days = num_days
403
390
 
404
391
  # recalculate this instance's age threshold in UNIX time
405
- self.rerequest_age = time.time() - self.refresh_tiles_after_days * self.SecondsInADay
392
+ self.re_request_age = time.time() - self.refresh_tiles_after_days * self.SecondsInADay