GridCal 5.3.2__tar.gz → 5.3.4__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.
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +8 -1
- gridcal-5.3.4/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_infra_map.py +102 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +76 -9
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +19 -8
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +26 -4
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +3 -3
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +15 -5
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/base_gui.py +3 -1
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/io.py +5 -6
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/gui_functions.py +10 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/__version__.py +1 -1
- {gridcal-5.3.2 → gridcal-5.3.4}/PKG-INFO +1 -1
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ExecuteGridCal.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/MainWindow.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/object_select_window.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Visualization/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Visualization/visualization.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Widgets/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/associations_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/console_widget.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/general_dialogues.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/messages.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/object_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/pandas_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/plot_config.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/profiles_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/results_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/themes.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/update_gui_all.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/update_gui_common.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/wrappable_table_model.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/LICENSE.txt +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/export_results_driver.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/file_handler.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/server_driver.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/session.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Session/synchronization_driver.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/GridCal.ico +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/GridCal.svg +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/__init__.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/cables.csv +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/sequence_lines.csv +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/transformers.csv +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/data/wires.csv +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/plugins.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/templates.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/GridCal/update.py +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/setup.cfg +0 -0
- {gridcal-5.3.2 → gridcal-5.3.4}/setup.py +0 -0
{gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py
RENAMED
@@ -211,6 +211,9 @@ class MapLineContainer(GenericDiagramWidget):
|
|
211
211
|
connection_elements.append(substation_to_graphics)
|
212
212
|
substation_to_graphics.line_container = self
|
213
213
|
|
214
|
+
br_scale = self.editor.get_branch_width()
|
215
|
+
arrow_scale = self.editor.get_arrow_scale()
|
216
|
+
|
214
217
|
# second pass: create the segments
|
215
218
|
for i in range(1, len(connection_elements)):
|
216
219
|
elm1 = connection_elements[i - 1]
|
@@ -223,15 +226,19 @@ class MapLineContainer(GenericDiagramWidget):
|
|
223
226
|
elm2.needsUpdate = True
|
224
227
|
segment_graphic_object.needsUpdate = True
|
225
228
|
|
229
|
+
segment_graphic_object.set_width(br_scale * segment_graphic_object.width) # Assign the pen to the line item
|
230
|
+
segment_graphic_object.set_arrow_scale(arrow_scale)
|
231
|
+
|
226
232
|
# register the segment in the line
|
227
233
|
self.add_segment(segment=segment_graphic_object)
|
228
234
|
|
229
235
|
# draw the segment in the scene
|
230
236
|
self.editor.add_to_scene(graphic_object=segment_graphic_object)
|
231
237
|
|
238
|
+
|
232
239
|
self.update_connectors()
|
233
240
|
|
234
|
-
self.editor.update_device_sizes()
|
241
|
+
# self.editor.update_device_sizes()
|
235
242
|
|
236
243
|
def substation_to(self):
|
237
244
|
"""
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# MIT License
|
2
|
+
#
|
3
|
+
# Copyright (c) 2018 Ross Wilson
|
4
|
+
# Copyright (c) 2024, Santiago Peñate Vera
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in all
|
14
|
+
# copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
"""
|
24
|
+
A tile source that serves OpenStreetMap tiles from server(s).
|
25
|
+
"""
|
26
|
+
|
27
|
+
import math
|
28
|
+
from typing import Tuple
|
29
|
+
from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
|
30
|
+
|
31
|
+
|
32
|
+
class OimTiles(Tiles):
|
33
|
+
"""An object to source server tiles for pySlipQt."""
|
34
|
+
|
35
|
+
def __init__(self, name: str = 'OpenInfraMap Tiles', tiles_dir='open_infra_map_tiles',
|
36
|
+
http_proxy=None, tile_servers=None):
|
37
|
+
"""
|
38
|
+
|
39
|
+
:param name:
|
40
|
+
:param tiles_dir:
|
41
|
+
:param http_proxy:
|
42
|
+
:param tile_servers:
|
43
|
+
"""
|
44
|
+
"""Override the base class for these tiles.
|
45
|
+
|
46
|
+
Basically, just fill in the BaseTiles class with values from above
|
47
|
+
and provide the Geo2Tile() and Tile2Geo() methods.
|
48
|
+
"""
|
49
|
+
# https://openinframap.org/tiles/{z}/{x}/{y}.pbf
|
50
|
+
super().__init__(
|
51
|
+
TilesetName=name,
|
52
|
+
TilesetShortName='OSM Tiles',
|
53
|
+
TilesetVersion='1.0',
|
54
|
+
levels=list(range(20)),
|
55
|
+
tile_width=256,
|
56
|
+
tile_height=256,
|
57
|
+
tiles_dir=tiles_dir,
|
58
|
+
servers=[
|
59
|
+
'https://openinframap.org/tiles',
|
60
|
+
] if tile_servers is None else tile_servers,
|
61
|
+
url_path='/{Z}/{X}/{Y}.pbf',
|
62
|
+
max_server_requests=2,
|
63
|
+
max_lru=10000,
|
64
|
+
http_proxy=http_proxy,
|
65
|
+
attribution="© OpenStreetMap contributors, OpenInfraMap"
|
66
|
+
)
|
67
|
+
# TODO: implement map wrap-around
|
68
|
+
# self.wrap_x = True
|
69
|
+
# self.wrap_y = False
|
70
|
+
|
71
|
+
# get tile information into instance
|
72
|
+
self.level = min(self.levels)
|
73
|
+
self.num_tiles_x, self.num_tiles_y, self.ppd_x, self.ppd_y = self.GetInfo(self.level)
|
74
|
+
|
75
|
+
def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[int, int]:
|
76
|
+
"""
|
77
|
+
Convert geo to tile fractional coordinates for level in use.
|
78
|
+
geo tuple of geo coordinates (xgeo, ygeo)
|
79
|
+
Note that we assume the point *is* on the map!
|
80
|
+
Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
|
81
|
+
"""
|
82
|
+
lat_rad = math.radians(latitude)
|
83
|
+
n = 2.0 ** self.level
|
84
|
+
xtile = int((longitude + 180.0) / 360.0 * n)
|
85
|
+
ytile = int(((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n)
|
86
|
+
|
87
|
+
return xtile, ytile
|
88
|
+
|
89
|
+
def Tile2Geo(self, xtile: float, ytile: float) -> Tuple[float, float]:
|
90
|
+
"""
|
91
|
+
Convert tile fractional coordinates to geo for level in use.
|
92
|
+
tile a tuple (xtile,ytile) of tile fractional coordinates
|
93
|
+
Note that we assume the point *is* on the map!
|
94
|
+
Code taken from [https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames]
|
95
|
+
"""
|
96
|
+
|
97
|
+
n = 2.0 ** self.level
|
98
|
+
xgeo = xtile / n * 360.0 - 180.0
|
99
|
+
yrad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))
|
100
|
+
ygeo = math.degrees(yrad)
|
101
|
+
|
102
|
+
return xgeo, ygeo
|
@@ -28,11 +28,10 @@ For example, see osm_tiles.py.
|
|
28
28
|
"""
|
29
29
|
import queue
|
30
30
|
import ssl
|
31
|
-
# from urllib import request
|
32
31
|
from urllib.request import Request, urlopen
|
33
32
|
from collections.abc import Callable
|
34
|
-
from PySide6.QtGui import QPixmap
|
35
33
|
from PySide6.QtCore import QThread
|
34
|
+
from PySide6.QtGui import QPixmap
|
36
35
|
|
37
36
|
# SSL magic to solve the certificates hell
|
38
37
|
# https://stackoverflow.com/questions/68275857/urllib-error-urlerror-urlopen-error-ssl-certificate-verify-failed-certifica
|
@@ -43,18 +42,86 @@ def log(val: str):
|
|
43
42
|
print(val)
|
44
43
|
|
45
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
|
+
|
46
113
|
class TileWorker(QThread):
|
47
114
|
"""Thread class that gets request from queue, loads tile, calls callback."""
|
48
115
|
|
49
116
|
def __init__(self,
|
50
117
|
id_num: int,
|
51
118
|
server: str,
|
52
|
-
|
119
|
+
tile_path: str,
|
53
120
|
requests_cue: queue.Queue,
|
54
121
|
callback: Callable[[int, float, float, QPixmap, bool], None], # level, x, y, pixmap, error
|
55
122
|
error_tile: QPixmap,
|
56
123
|
content_type: str,
|
57
|
-
|
124
|
+
re_request_age: float,
|
58
125
|
error_image: QPixmap,
|
59
126
|
refresh_tiles_after_days=60):
|
60
127
|
"""
|
@@ -62,12 +129,12 @@ class TileWorker(QThread):
|
|
62
129
|
Results are returned in the callback() params.
|
63
130
|
:param id_num: a unique numer identifying the worker instance
|
64
131
|
:param server: server URL
|
65
|
-
:param
|
132
|
+
:param tile_path: path to tile on server
|
66
133
|
:param requests_cue: the request queue
|
67
134
|
:param callback: function to call after tile available
|
68
135
|
:param error_tile: image of error tile
|
69
136
|
:param content_type: expected Content-Type string
|
70
|
-
:param
|
137
|
+
:param re_request_age: number of days in tile age before re-requesting (0 means don't update tiles)
|
71
138
|
:param error_image: the image to return on some error
|
72
139
|
:param refresh_tiles_after_days:
|
73
140
|
"""
|
@@ -76,12 +143,12 @@ class TileWorker(QThread):
|
|
76
143
|
|
77
144
|
self.id_num = id_num
|
78
145
|
self.server = server
|
79
|
-
self.
|
146
|
+
self.tile_path = tile_path
|
80
147
|
self.requests_cue = requests_cue
|
81
148
|
self.callback: Callable[[int, float, float, QPixmap, bool], None] = callback
|
82
149
|
self.error_tile_image = error_tile
|
83
150
|
self.content_type = content_type
|
84
|
-
self.
|
151
|
+
self.re_request_age = re_request_age
|
85
152
|
self.error_image = error_image
|
86
153
|
self.daemon = True
|
87
154
|
self.refresh_tiles_after_days = refresh_tiles_after_days
|
@@ -98,7 +165,7 @@ class TileWorker(QThread):
|
|
98
165
|
# try to retrieve the image
|
99
166
|
error = False
|
100
167
|
pixmap = self.error_image
|
101
|
-
tile_url = self.server + self.
|
168
|
+
tile_url = self.server + self.tile_path.format(Z=level, X=x, Y=y)
|
102
169
|
try:
|
103
170
|
|
104
171
|
# Create a Request object with the desired headers
|
@@ -35,7 +35,8 @@ 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, QColor
|
38
|
+
from PySide6.QtGui import QPixmap, QPainter, QPen, QColor
|
39
|
+
|
39
40
|
from typing import List, Union
|
40
41
|
from collections.abc import Callable
|
41
42
|
from GridCal.Gui.Diagrams.MapWidget.Tiles.base_tiles import BaseTiles
|
@@ -57,13 +58,19 @@ StatusError = {401: 'Looks like you need to be authorised for this server.',
|
|
57
58
|
429: 'You are asking for too many tiles.', }
|
58
59
|
|
59
60
|
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
60
67
|
class Tiles(BaseTiles):
|
61
68
|
"""
|
62
69
|
A tile object to source server tiles for the widget.
|
63
70
|
"""
|
64
71
|
|
65
72
|
# allowed file types and associated values
|
66
|
-
AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG'}
|
73
|
+
AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG', 'pbf': 'PBF'}
|
67
74
|
|
68
75
|
# the number of seconds in a day
|
69
76
|
SecondsInADay = 60 * 60 * 24
|
@@ -149,10 +156,9 @@ class Tiles(BaseTiles):
|
|
149
156
|
|
150
157
|
# compose the expected 'Content-Type' string on request result
|
151
158
|
# if we get here we know the extension is in self.AllowedFileTypes
|
152
|
-
if tile_extension_lower
|
153
|
-
|
154
|
-
|
155
|
-
self.content_type = 'image/png'
|
159
|
+
# if tile_extension_lower in ['png', 'jpg']:
|
160
|
+
|
161
|
+
self.content_type = 'image/png'
|
156
162
|
|
157
163
|
# set the list of queued unsatisfied requests to 'empty'
|
158
164
|
self.queued_requests = {}
|
@@ -166,6 +172,11 @@ class Tiles(BaseTiles):
|
|
166
172
|
self.error_tile.fill(QColor.fromRgb(255, 0, 0, 255))
|
167
173
|
# self.error_tile.loadFromData(std.getErrorImage())
|
168
174
|
|
175
|
+
# Usage
|
176
|
+
# pbf_file = "your_file.pbf"
|
177
|
+
# pixmap = render_pbf_to_pixmap(pbf_file)
|
178
|
+
# pixmap.save("output_map.png")
|
179
|
+
|
169
180
|
# test for firewall - use proxy (if supplied)
|
170
181
|
test_url = self.servers[0] + self.url_path.format(Z=0, X=0, Y=0)
|
171
182
|
try:
|
@@ -209,12 +220,12 @@ class Tiles(BaseTiles):
|
|
209
220
|
for num_thread in range(self.max_requests):
|
210
221
|
worker = TileWorker(id_num=num_thread,
|
211
222
|
server=server,
|
212
|
-
|
223
|
+
tile_path=self.url_path,
|
213
224
|
requests_cue=self.request_queue,
|
214
225
|
callback=self.tile_is_available,
|
215
226
|
error_tile=self.error_tile,
|
216
227
|
content_type=self.content_type,
|
217
|
-
|
228
|
+
re_request_age=self.rerequest_age,
|
218
229
|
error_image=self.error_tile,
|
219
230
|
refresh_tiles_after_days=60)
|
220
231
|
self.workers.append(worker)
|
@@ -4,17 +4,19 @@
|
|
4
4
|
# SPDX-License-Identifier: MPL-2.0
|
5
5
|
from __future__ import annotations
|
6
6
|
import os
|
7
|
-
from typing import Union, List, Tuple, Dict, TYPE_CHECKING
|
7
|
+
from typing import Union, List, Tuple, Dict, TYPE_CHECKING, Any
|
8
8
|
import json
|
9
9
|
import numpy as np
|
10
10
|
import math
|
11
11
|
import pandas as pd
|
12
|
+
import asyncio
|
12
13
|
from matplotlib import pyplot as plt
|
13
14
|
|
14
15
|
from PySide6.QtWidgets import QGraphicsItem
|
15
16
|
from collections.abc import Callable
|
16
17
|
from PySide6.QtSvg import QSvgGenerator
|
17
|
-
from PySide6.QtCore import (Qt, QSize, QRect, QMimeData, QIODevice, QByteArray, QDataStream, QModelIndex
|
18
|
+
from PySide6.QtCore import (Qt, QSize, QRect, QMimeData, QIODevice, QByteArray, QDataStream, QModelIndex,
|
19
|
+
QRunnable, QThreadPool, Slot)
|
18
20
|
from PySide6.QtGui import (QIcon, QPixmap, QImage, QPainter, QStandardItemModel, QStandardItem, QColor,
|
19
21
|
QDropEvent, QWheelEvent)
|
20
22
|
|
@@ -258,6 +260,10 @@ class GridMapWidget(BaseDiagramWidget):
|
|
258
260
|
self.startWi = self.map.view.width()
|
259
261
|
self.constantLineWidth = True
|
260
262
|
|
263
|
+
# pool of runnable tasks that work best done asynch with a runnable
|
264
|
+
self.thread_pool = QThreadPool()
|
265
|
+
self.wheel_move_task: QRunnable | None = None
|
266
|
+
|
261
267
|
# draw
|
262
268
|
self.draw()
|
263
269
|
|
@@ -897,6 +903,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
897
903
|
# SANTIAGO: DO NOT TOUCH, THIS IS THE DESIRED BEHAVIOUR
|
898
904
|
self.update_device_sizes()
|
899
905
|
|
906
|
+
|
900
907
|
def get_branch_width(self) -> float:
|
901
908
|
"""
|
902
909
|
Get the desired branch width
|
@@ -930,12 +937,27 @@ class GridMapWidget(BaseDiagramWidget):
|
|
930
937
|
scale = self.diagram.min_bus_width + (zoom - min_zoom) / (max_zoom - min_zoom)
|
931
938
|
return scale
|
932
939
|
|
933
|
-
def update_device_sizes(self) -> None:
|
940
|
+
def update_device_sizes(self, asynchronously: bool = True) -> None:
|
934
941
|
"""
|
935
|
-
|
942
|
+
Caller to the asynchronous device update sizes
|
936
943
|
:return:
|
937
944
|
"""
|
945
|
+
if asynchronously:
|
946
|
+
try:
|
947
|
+
loop = asyncio.get_event_loop()
|
948
|
+
self.wheel_move_task = loop.create_task(self.__update_device_sizes())
|
949
|
+
except RuntimeError:
|
950
|
+
pass
|
951
|
+
else:
|
952
|
+
# do it now
|
953
|
+
asyncio.run(self.__update_device_sizes())
|
938
954
|
|
955
|
+
async def __update_device_sizes(self) -> None:
|
956
|
+
"""
|
957
|
+
Update the devices' sizes
|
958
|
+
:return:
|
959
|
+
"""
|
960
|
+
print('Updating device sizes!')
|
939
961
|
br_scale = self.get_branch_width()
|
940
962
|
arrow_scale = self.get_arrow_scale()
|
941
963
|
se_scale = self.get_substation_scale()
|
@@ -49,7 +49,7 @@ ygeo: latitude
|
|
49
49
|
from __future__ import annotations
|
50
50
|
from typing import List, Union, Tuple, Callable, TYPE_CHECKING
|
51
51
|
from enum import Enum
|
52
|
-
from PySide6.QtCore import Qt,
|
52
|
+
from PySide6.QtCore import Qt, QEvent, QPointF
|
53
53
|
from PySide6.QtGui import (QPainter, QColor, QPixmap, QCursor,
|
54
54
|
QMouseEvent, QKeyEvent, QWheelEvent,
|
55
55
|
QResizeEvent, QEnterEvent, QPaintEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent)
|
@@ -510,13 +510,13 @@ class MapWidget(QWidget):
|
|
510
510
|
self.setCursor(self.standard_cursor)
|
511
511
|
|
512
512
|
# do a "resize" after this function
|
513
|
-
QTimer.singleShot(10, self.resizeEvent)
|
513
|
+
# QTimer.singleShot(10, self.resizeEvent)
|
514
514
|
|
515
515
|
self.GotoLevelAndPosition(level=6,
|
516
516
|
longitude=0,
|
517
517
|
latitude=40)
|
518
518
|
|
519
|
-
# add the widgets in a
|
519
|
+
# add the widgets in a layered manner
|
520
520
|
# self.layout.addWidget(self.notice_widget)
|
521
521
|
self.layout.addWidget(self.view) # Add the QGraphicsView to the layout
|
522
522
|
|
@@ -41,6 +41,7 @@ from GridCal.Gui.Main.object_select_window import ObjectSelectWindow
|
|
41
41
|
from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.blue_marble import BlueMarbleTiles
|
42
42
|
from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.cartodb import CartoDbTiles
|
43
43
|
from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.open_street_map import OsmTiles
|
44
|
+
from GridCal.Gui.Diagrams.MapWidget.Tiles.TileProviders.open_infra_map import OimTiles
|
44
45
|
|
45
46
|
ALL_EDITORS = Union[SchematicWidget, GridMapWidget]
|
46
47
|
ALL_EDITORS_NONE = Union[None, SchematicWidget, GridMapWidget]
|
@@ -160,23 +161,28 @@ class DiagramsMain(CompiledArraysMain):
|
|
160
161
|
CartoDbTiles(
|
161
162
|
name='Carto voyager',
|
162
163
|
tiles_dir=os.path.join(tiles_path(), 'carto_db_voyager'),
|
163
|
-
tile_servers=["
|
164
|
+
tile_servers=["https://basemaps.cartocdn.com/rastertiles/voyager/"]
|
164
165
|
),
|
165
166
|
CartoDbTiles(
|
166
167
|
name='Carto positron',
|
167
168
|
tiles_dir=os.path.join(tiles_path(), 'carto_db_positron'),
|
168
|
-
tile_servers=['
|
169
|
+
tile_servers=['https://basemaps.cartocdn.com/light_all/']
|
169
170
|
),
|
170
171
|
CartoDbTiles(
|
171
172
|
name='Carto dark matter',
|
172
173
|
tiles_dir=os.path.join(tiles_path(), 'carto_db_dark_matter'),
|
173
|
-
tile_servers=["
|
174
|
+
tile_servers=["https://basemaps.cartocdn.com/dark_all/"]
|
174
175
|
),
|
175
176
|
OsmTiles(
|
176
177
|
name='Open Street Map',
|
177
178
|
tiles_dir=os.path.join(tiles_path(), 'osm'),
|
178
179
|
tile_servers=["https://tile.openstreetmap.org"]
|
179
|
-
)
|
180
|
+
),
|
181
|
+
# OimTiles(
|
182
|
+
# name='Open infra Map',
|
183
|
+
# tiles_dir=os.path.join(tiles_path(), 'osm'),
|
184
|
+
# tile_servers=["https://openinframap.org/tiles"]
|
185
|
+
# )
|
180
186
|
]
|
181
187
|
tile_names = [tile.TilesetName for tile in self.tile_sources]
|
182
188
|
self.tile_index_dict = {tile.TilesetName: i for i, tile in enumerate(self.tile_sources)}
|
@@ -1526,7 +1532,7 @@ class DiagramsMain(CompiledArraysMain):
|
|
1526
1532
|
diagram_widget.set_data(circuit=self.circuit, diagram=diagram)
|
1527
1533
|
|
1528
1534
|
elif isinstance(diagram_widget, GridMapWidget):
|
1529
|
-
diagram_widget.update_device_sizes()
|
1535
|
+
diagram_widget.update_device_sizes(asynchronously=False)
|
1530
1536
|
|
1531
1537
|
def set_selected_diagram_on_click(self):
|
1532
1538
|
"""
|
@@ -1795,6 +1801,10 @@ class DiagramsMain(CompiledArraysMain):
|
|
1795
1801
|
|
1796
1802
|
self.set_diagrams_list_view()
|
1797
1803
|
|
1804
|
+
if len(self.diagram_widgets_list) > 0:
|
1805
|
+
diagram = self.diagram_widgets_list[0]
|
1806
|
+
self.set_diagram_widget(diagram)
|
1807
|
+
|
1798
1808
|
def add_map_diagram(self, ask: bool = True) -> None:
|
1799
1809
|
"""
|
1800
1810
|
Adds a Map diagram
|
@@ -149,6 +149,8 @@ class BaseMainGui(QMainWindow):
|
|
149
149
|
self.find_node_groups_driver: Union[sim.NodeGroupsDriver, None] = None
|
150
150
|
self.file_sync_thread = syncdrv.FileSyncThread(self.circuit, None, None)
|
151
151
|
|
152
|
+
self.task_pool = QtCore.QThreadPool()
|
153
|
+
|
152
154
|
# simulation start end
|
153
155
|
self.simulation_start_index: int = -1
|
154
156
|
self.simulation_end_index: int = -1
|
@@ -229,7 +231,7 @@ class BaseMainGui(QMainWindow):
|
|
229
231
|
|
230
232
|
self.ui.grid_name_line_edit.textChanged.connect(self.change_circuit_name)
|
231
233
|
|
232
|
-
#
|
234
|
+
# combo-boxes
|
233
235
|
self.ui.fromComboBox.currentTextChanged.connect(self.update_from_to_list_views)
|
234
236
|
self.ui.toComboBox.currentTextChanged.connect(self.update_from_to_list_views)
|
235
237
|
|
@@ -4,6 +4,7 @@
|
|
4
4
|
# SPDX-License-Identifier: MPL-2.0
|
5
5
|
|
6
6
|
import os
|
7
|
+
import asyncio
|
7
8
|
from typing import Union, List, Callable
|
8
9
|
import pandas as pd
|
9
10
|
from PySide6 import QtWidgets
|
@@ -51,7 +52,7 @@ class IoMain(ConfigurationMain):
|
|
51
52
|
self.rosetta_gui: Union[RosetaExplorerGUI, None] = None
|
52
53
|
|
53
54
|
self.accepted_extensions = ['.gridcal', '.dgridcal', '.xlsx', '.xls', '.sqlite', '.gch5',
|
54
|
-
'.dgs', '.m', '.raw', '.RAW', '.json',
|
55
|
+
'.dgs', '.m', '.raw', '.RAW', '.json', '.uct',
|
55
56
|
'.ejson2', '.ejson3', '.p', '.nc', '.hdf5',
|
56
57
|
'.xml', '.rawx', '.zip', '.dpx', '.epc', '.EPC',
|
57
58
|
'.gcplugin']
|
@@ -261,7 +262,7 @@ class IoMain(ConfigurationMain):
|
|
261
262
|
files_types += "*.dgridcal "
|
262
263
|
|
263
264
|
files_types += "*.gch5 *.xlsx *.xls *.sqlite *.dgs "
|
264
|
-
files_types += "*.m *.raw *.RAW *.rawx *.json *.ejson2 *.ejson3 *.xml "
|
265
|
+
files_types += "*.m *.raw *.RAW *.rawx *.uct *.json *.ejson2 *.ejson3 *.xml "
|
265
266
|
files_types += "*.zip *.dpx *.epc *.EPC *.nc *.hdf5 *.p"
|
266
267
|
|
267
268
|
dialogue = QtWidgets.QFileDialog(None,
|
@@ -343,12 +344,10 @@ class IoMain(ConfigurationMain):
|
|
343
344
|
|
344
345
|
if self.circuit.has_diagrams():
|
345
346
|
# create the diagrams that came with the file
|
347
|
+
# task = gf.AsyncTask(self.create_circuit_stored_diagrams)
|
348
|
+
# self.task_pool.start(task)
|
346
349
|
self.create_circuit_stored_diagrams()
|
347
350
|
|
348
|
-
if len(self.diagram_widgets_list) > 0:
|
349
|
-
diagram = self.diagram_widgets_list[0]
|
350
|
-
self.set_diagram_widget(diagram)
|
351
|
-
|
352
351
|
else:
|
353
352
|
if self.circuit.get_bus_number() > 300:
|
354
353
|
quit_msg = ("The grid is quite large, hence the schematic might be slow.\n"
|
@@ -1001,3 +1001,13 @@ def create_int_spinbox(value: int, minimum: int, maximum: int) -> QtWidgets.QSpi
|
|
1001
1001
|
sn_spinner.setMaximum(maximum)
|
1002
1002
|
sn_spinner.setValue(value)
|
1003
1003
|
return sn_spinner
|
1004
|
+
|
1005
|
+
|
1006
|
+
class AsyncTask(QtCore.QRunnable):
|
1007
|
+
def __init__(self, task):
|
1008
|
+
super().__init__()
|
1009
|
+
self.task = task
|
1010
|
+
|
1011
|
+
@QtCore.Slot()
|
1012
|
+
def run(self):
|
1013
|
+
self.task()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gridcal-5.3.2 → gridcal-5.3.4}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|