GridCal 5.3.16__tar.gz → 5.3.18__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.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +16 -11
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +24 -14
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +68 -21
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +13 -14
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +1 -6
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +4 -2
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +6 -7
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +1 -2
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +10 -6
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +7 -4
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +276 -35
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +4 -3
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +11 -8
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +27 -38
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/base_diagram_widget.py +1 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +20 -21
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Model/objects.py +100 -3
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Server/server.py +1 -1
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Session/server_driver.py +36 -30
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/__version__.py +1 -1
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/data/cables.csv +15 -0
- gridcal-5.3.18/GridCal/data/wires.csv +145 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/PKG-INFO +1 -1
- gridcal-5.3.16/GridCal/data/wires.csv +0 -100
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ExecuteGridCal.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Analysis/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Analysis/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/MainWindow.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/io.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/object_select_window.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Visualization/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Visualization/visualization.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Widgets/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/associations_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/general_dialogues.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/gui_functions.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/messages.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/object_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/pandas_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/plot_config.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/profiles_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/python_console.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/python_highlighter.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/results_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/themes.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/update_gui_all.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/update_gui_common.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/wrappable_table_model.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/LICENSE.txt +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Session/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Session/export_results_driver.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Session/file_handler.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Session/session.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Session/synchronization_driver.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/data/GridCal.ico +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/data/GridCal.svg +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/data/__init__.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/data/sequence_lines.csv +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/data/transformers.csv +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/plugins.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/templates.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/GridCal/update.py +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/setup.cfg +0 -0
- {gridcal-5.3.16 → gridcal-5.3.18}/setup.py +0 -0
{gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py
RENAMED
@@ -6,6 +6,7 @@ from __future__ import annotations
|
|
6
6
|
|
7
7
|
from typing import TYPE_CHECKING, List, Union
|
8
8
|
|
9
|
+
from PySide6.QtWidgets import QGraphicsItemGroup
|
9
10
|
from PySide6.QtCore import Qt
|
10
11
|
from PySide6.QtGui import QColor
|
11
12
|
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_segment import MapLineSegment
|
@@ -22,7 +23,7 @@ if TYPE_CHECKING:
|
|
22
23
|
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
23
24
|
|
24
25
|
|
25
|
-
class MapLineContainer(GenericDiagramWidget):
|
26
|
+
class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
|
26
27
|
"""
|
27
28
|
Represents a polyline in the map
|
28
29
|
"""
|
@@ -41,6 +42,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
41
42
|
api_object=api_object,
|
42
43
|
editor=editor,
|
43
44
|
draw_labels=draw_labels)
|
45
|
+
QGraphicsItemGroup.__init__(self)
|
44
46
|
|
45
47
|
self.editor: GridMapWidget = editor # reassign to make clear the editor type
|
46
48
|
|
@@ -48,17 +50,18 @@ class MapLineContainer(GenericDiagramWidget):
|
|
48
50
|
self.segments_list: List[MapLineSegment] = list()
|
49
51
|
self.enabled = True
|
50
52
|
|
51
|
-
def set_width_scale(self,
|
53
|
+
def set_width_scale(self, width: float, arrow_width: float):
|
52
54
|
"""
|
53
55
|
Set the width scale of the line
|
54
|
-
:param
|
55
|
-
:param
|
56
|
+
:param width:
|
57
|
+
:param arrow_width:
|
56
58
|
"""
|
57
59
|
for segment in self.segments_list:
|
58
60
|
# pen = segment.pen() # get the current pen
|
59
61
|
# pen.setWidthF(val * segment.width) # Set the fractional thickness of the line
|
60
|
-
segment.set_width(
|
61
|
-
segment.
|
62
|
+
segment.set_width(width) # Assign the pen to the line item
|
63
|
+
segment.set_arrow_sizes(arrow_width)
|
64
|
+
# self.setScale(branch_scale)
|
62
65
|
|
63
66
|
def clean_segments(self) -> None:
|
64
67
|
"""
|
@@ -105,6 +108,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
105
108
|
:param segment: Connector
|
106
109
|
"""
|
107
110
|
self.segments_list.append(segment)
|
111
|
+
self.addToGroup(segment)
|
108
112
|
|
109
113
|
def set_colour(self, color: QColor, style: Qt.PenStyle, tool_tip: str = '') -> None:
|
110
114
|
"""
|
@@ -132,8 +136,8 @@ class MapLineContainer(GenericDiagramWidget):
|
|
132
136
|
:return:
|
133
137
|
"""
|
134
138
|
|
135
|
-
for
|
136
|
-
|
139
|
+
for segment in self.segments_list:
|
140
|
+
segment.end_update()
|
137
141
|
|
138
142
|
def draw_all(self) -> None:
|
139
143
|
"""
|
@@ -220,13 +224,14 @@ class MapLineContainer(GenericDiagramWidget):
|
|
220
224
|
# Assuming Connector takes (scene, node1, node2) as arguments
|
221
225
|
segment_graphic_object = MapLineSegment(first=elm1,
|
222
226
|
second=elm2,
|
223
|
-
container=self
|
227
|
+
container=self,
|
228
|
+
width=self.editor.diagram.min_branch_width)
|
224
229
|
|
225
230
|
elm2.needsUpdate = True
|
226
231
|
segment_graphic_object.needsUpdate = True
|
227
232
|
|
228
|
-
segment_graphic_object.set_width(br_scale * segment_graphic_object.width) # Assign the pen to the line item
|
229
|
-
segment_graphic_object.
|
233
|
+
# segment_graphic_object.set_width(br_scale * segment_graphic_object.width) # Assign the pen to the line item
|
234
|
+
# segment_graphic_object.set_arrow_sizes(arrow_scale)
|
230
235
|
|
231
236
|
# register the segment in the line
|
232
237
|
self.add_segment(segment=segment_graphic_object)
|
{gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
@@ -28,11 +28,16 @@ class MapLineSegment(QGraphicsLineItem):
|
|
28
28
|
Segment joining two NodeGraphicItem
|
29
29
|
"""
|
30
30
|
|
31
|
-
def __init__(self,
|
31
|
+
def __init__(self,
|
32
|
+
first: LineLocationGraphicItem,
|
33
|
+
second: LineLocationGraphicItem,
|
34
|
+
container: MapLineContainer,
|
35
|
+
width: float):
|
32
36
|
"""
|
33
37
|
Segment constructor
|
34
|
-
:param first:
|
35
|
-
:param second:
|
38
|
+
:param first: LineLocationGraphicItem
|
39
|
+
:param second: LineLocationGraphicItem
|
40
|
+
:param container: MapLineContainer
|
36
41
|
"""
|
37
42
|
QGraphicsLineItem.__init__(self)
|
38
43
|
self.first: LineLocationGraphicItem = first
|
@@ -48,7 +53,7 @@ class MapLineSegment(QGraphicsLineItem):
|
|
48
53
|
self.hoover_color = QColor(self.api_object.color)
|
49
54
|
self.hoover_color.setAlpha(180)
|
50
55
|
|
51
|
-
self.width =
|
56
|
+
self.width = width
|
52
57
|
|
53
58
|
self.pos1: QPointF = self.first.get_center_pos()
|
54
59
|
self.pos2: QPointF = self.second.get_center_pos()
|
@@ -70,6 +75,7 @@ class MapLineSegment(QGraphicsLineItem):
|
|
70
75
|
self.second.add_position_change_callback(self.set_to_side_coordinates)
|
71
76
|
|
72
77
|
self._pen = self.set_colour(self.color, self.style)
|
78
|
+
# self._pen.setCosmetic(True)
|
73
79
|
self.update_endings()
|
74
80
|
self.needsUpdate = True
|
75
81
|
self.setZValue(0)
|
@@ -99,20 +105,24 @@ class MapLineSegment(QGraphicsLineItem):
|
|
99
105
|
:param width:
|
100
106
|
:return:
|
101
107
|
"""
|
102
|
-
|
108
|
+
|
109
|
+
# self.setScale(width / self.width) # Faster since it avoids repainting each QPen
|
110
|
+
|
111
|
+
if self.width != width: # Only update if width changes
|
103
112
|
self._pen.setWidthF(width)
|
104
113
|
self.setPen(self._pen)
|
114
|
+
self.width = width
|
105
115
|
|
106
|
-
def
|
116
|
+
def set_arrow_sizes(self, width: float):
|
107
117
|
"""
|
108
118
|
|
109
119
|
:param width:
|
110
120
|
:return:
|
111
121
|
"""
|
112
|
-
self.arrow_p_from.
|
113
|
-
self.arrow_q_from.
|
114
|
-
self.arrow_p_to.
|
115
|
-
self.arrow_q_to.
|
122
|
+
self.arrow_p_from.set_size(width)
|
123
|
+
self.arrow_q_from.set_size(width)
|
124
|
+
self.arrow_p_to.set_size(width)
|
125
|
+
self.arrow_q_to.set_size(width)
|
116
126
|
|
117
127
|
def set_colour(self, color: QColor, style: Qt.PenStyle):
|
118
128
|
"""
|
@@ -125,10 +135,10 @@ class MapLineSegment(QGraphicsLineItem):
|
|
125
135
|
pen = QPen(color, self.width, style, Qt.PenCapStyle.RoundCap, Qt.PenJoinStyle.RoundJoin)
|
126
136
|
|
127
137
|
self.setPen(pen)
|
128
|
-
self.arrow_p_from.set_colour(color
|
129
|
-
self.arrow_q_from.set_colour(color
|
130
|
-
self.arrow_p_to.set_colour(color
|
131
|
-
self.arrow_q_to.set_colour(color
|
138
|
+
self.arrow_p_from.set_colour(color)
|
139
|
+
self.arrow_q_from.set_colour(color)
|
140
|
+
self.arrow_p_to.set_colour(color)
|
141
|
+
self.arrow_q_to.set_colour(color)
|
132
142
|
|
133
143
|
return pen
|
134
144
|
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
4
4
|
# SPDX-License-Identifier: MPL-2.0
|
5
5
|
from __future__ import annotations
|
6
|
+
import webbrowser
|
6
7
|
from typing import List, TYPE_CHECKING, Tuple
|
7
8
|
from PySide6 import QtWidgets
|
8
9
|
from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent, QGraphicsRectItem
|
@@ -23,7 +24,7 @@ if TYPE_CHECKING: # Only imports the below statements during type checking
|
|
23
24
|
from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
|
24
25
|
|
25
26
|
|
26
|
-
class SubstationGraphicItem(
|
27
|
+
class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
27
28
|
"""
|
28
29
|
Represents a block in the diagram
|
29
30
|
Has an x and y and width and height
|
@@ -39,7 +40,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
39
40
|
api_object: Substation,
|
40
41
|
lat: float,
|
41
42
|
lon: float,
|
42
|
-
|
43
|
+
size: float = 0.8,
|
43
44
|
draw_labels: bool = True):
|
44
45
|
"""
|
45
46
|
|
@@ -47,28 +48,33 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
47
48
|
:param api_object:
|
48
49
|
:param lat:
|
49
50
|
:param lon:
|
50
|
-
:param
|
51
|
+
:param size:
|
51
52
|
"""
|
53
|
+
# Correct way to call multiple inheritance
|
54
|
+
super().__init__()
|
55
|
+
|
56
|
+
# Explicitly call QGraphicsRectItem initialization
|
52
57
|
QGraphicsRectItem.__init__(self)
|
53
|
-
|
54
|
-
|
58
|
+
|
59
|
+
# Explicitly call NodeTemplate initialization
|
60
|
+
NodeTemplate.__init__(self, api_object=api_object,
|
55
61
|
editor=editor,
|
56
62
|
draw_labels=draw_labels,
|
57
63
|
lat=lat,
|
58
64
|
lon=lon)
|
59
65
|
|
66
|
+
self.size = size
|
60
67
|
self.line_container = None
|
61
68
|
self.editor: GridMapWidget = editor # reassign for the types to be clear
|
62
69
|
self.api_object: Substation = api_object # reassign for the types to be clear
|
63
70
|
|
64
|
-
|
65
|
-
|
66
|
-
x, y = self.editor.to_x_y(lat=lat, lon=lon) # upper left corner
|
71
|
+
r2 = size / 2
|
72
|
+
x, y = editor.to_x_y(lat=lat, lon=lon) # upper left corner
|
67
73
|
self.setRect(
|
68
74
|
x - r2,
|
69
75
|
y - r2,
|
70
|
-
self.
|
71
|
-
self.
|
76
|
+
self.size,
|
77
|
+
self.size
|
72
78
|
)
|
73
79
|
|
74
80
|
# Enable hover events for the item
|
@@ -80,7 +86,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
80
86
|
self.setCursor(Qt.CursorShape.PointingHandCursor)
|
81
87
|
|
82
88
|
# Create a pen with reduced line width
|
83
|
-
self.change_pen_width(0.
|
89
|
+
self.change_pen_width(0.05 * size)
|
90
|
+
# self.setPen(Qt.PenStyle.NoPen)
|
91
|
+
# self.setFlag(self.GraphicsItemFlag.ItemIgnoresTransformations, True)
|
92
|
+
# self.setFlag(self.GraphicsItemFlag.ItemIsSelectable, True)
|
93
|
+
# self.setFlag(self.GraphicsItemFlag.ItemIsMovable, True)
|
84
94
|
|
85
95
|
# Create a pen with reduced line width
|
86
96
|
self.color = QColor(self.api_object.color)
|
@@ -90,27 +100,28 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
90
100
|
self.border_color = QColor(self.api_object.color) # No Alpha
|
91
101
|
|
92
102
|
self.set_default_color()
|
103
|
+
# self.pen().setCosmetic(True)
|
93
104
|
|
94
105
|
# list of voltage levels graphics
|
95
106
|
self.voltage_level_graphics: List[VoltageLevelGraphicItem] = list()
|
96
107
|
|
97
|
-
def
|
108
|
+
def set_size(self, r: float):
|
98
109
|
"""
|
99
110
|
|
100
111
|
:param r: radius in pixels
|
101
112
|
:return:
|
102
113
|
"""
|
103
|
-
if r != self.
|
114
|
+
if r != self.size:
|
104
115
|
rect = self.rect()
|
105
116
|
rect.setWidth(r)
|
106
117
|
rect.setHeight(r)
|
107
118
|
|
108
119
|
# change the width and height while keeping the same center
|
109
|
-
r2 = (self.
|
120
|
+
r2 = (self.size - r) / 2
|
110
121
|
new_x = rect.x() + r2
|
111
122
|
new_y = rect.y() + r2
|
112
123
|
|
113
|
-
self.
|
124
|
+
self.size = r
|
114
125
|
|
115
126
|
# Set the new rectangle with the updated dimensions
|
116
127
|
self.setRect(new_x, new_y, r, r)
|
@@ -124,6 +135,8 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
124
135
|
for vl_graphics in self.voltage_level_graphics:
|
125
136
|
vl_graphics.center_on_substation()
|
126
137
|
|
138
|
+
self.change_pen_width(0.05 * self.size)
|
139
|
+
|
127
140
|
self.update_position_at_the_diagram()
|
128
141
|
|
129
142
|
self.resize_voltage_levels()
|
@@ -140,7 +153,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
140
153
|
for vl_graphics in self.voltage_level_graphics:
|
141
154
|
# radius here is the width, therefore we need to send W/2
|
142
155
|
scale = vl_graphics.api_object.Vnom / max_vl * 0.5
|
143
|
-
vl_graphics.set_size(r=self.
|
156
|
+
vl_graphics.set_size(r=self.size * scale)
|
144
157
|
vl_graphics.center_on_substation()
|
145
158
|
|
146
159
|
def set_api_object_color(self) -> None:
|
@@ -149,9 +162,12 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
149
162
|
"""
|
150
163
|
self.color = QColor(self.api_object.color)
|
151
164
|
self.color.setAlpha(128)
|
165
|
+
|
152
166
|
self.hoover_color = QColor(self.api_object.color)
|
153
167
|
self.hoover_color.setAlpha(180)
|
168
|
+
|
154
169
|
self.border_color = QColor(self.api_object.color) # No Alpha
|
170
|
+
|
155
171
|
self.set_default_color()
|
156
172
|
|
157
173
|
def move_to(self, lat: float, lon: float) -> Tuple[float, float]:
|
@@ -194,7 +210,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
194
210
|
|
195
211
|
for vl_graphics in self.voltage_level_graphics:
|
196
212
|
scale = vl_graphics.api_object.Vnom / max_vl * 0.8
|
197
|
-
vl_graphics.set_size(r=self.
|
213
|
+
vl_graphics.set_size(r=self.size * scale)
|
198
214
|
vl_graphics.center_on_substation()
|
199
215
|
|
200
216
|
sorted_objects = sorted(self.voltage_level_graphics, key=lambda x: -x.api_object.Vnom)
|
@@ -315,7 +331,12 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
315
331
|
add_menu_entry(menu=menu,
|
316
332
|
text="Remove from schematic",
|
317
333
|
icon_path=":/Icons/icons/delete_schematic.svg",
|
318
|
-
function_ptr=self.
|
334
|
+
function_ptr=self.remove_function_from_schematic)
|
335
|
+
|
336
|
+
add_menu_entry(menu=menu,
|
337
|
+
text="Remove from schematic and database",
|
338
|
+
icon_path=":/Icons/icons/delete_db.svg",
|
339
|
+
function_ptr=self.remove_function_from_schematic_and_db)
|
319
340
|
|
320
341
|
add_menu_entry(menu=menu,
|
321
342
|
text="Show diagram",
|
@@ -327,6 +348,11 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
327
348
|
icon_path=":/Icons/icons/plot.svg",
|
328
349
|
function_ptr=self.plot)
|
329
350
|
|
351
|
+
add_menu_entry(menu=menu,
|
352
|
+
text="Open in street view",
|
353
|
+
icon_path=":/Icons/icons/map.svg",
|
354
|
+
function_ptr=self.open_street_view)
|
355
|
+
|
330
356
|
menu.exec_(event.screenPos())
|
331
357
|
|
332
358
|
def create_new_line(self):
|
@@ -368,7 +394,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
368
394
|
|
369
395
|
pass
|
370
396
|
|
371
|
-
def
|
397
|
+
def remove_function_from_schematic(self) -> None:
|
372
398
|
"""
|
373
399
|
Function to be called when Action 1 is selected.
|
374
400
|
"""
|
@@ -376,7 +402,19 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
376
402
|
"Remove substation graphics")
|
377
403
|
|
378
404
|
if ok:
|
379
|
-
self.editor.remove_substation(substation=self)
|
405
|
+
self.editor.remove_substation(substation=self, delete_from_db=False)
|
406
|
+
|
407
|
+
def remove_function_from_schematic_and_db(self) -> None:
|
408
|
+
"""
|
409
|
+
|
410
|
+
:return:
|
411
|
+
"""
|
412
|
+
|
413
|
+
ok = yes_no_question(f"Remove substation {self.api_object.name} from the map and the database?",
|
414
|
+
"Remove substation graphics and database item")
|
415
|
+
|
416
|
+
if ok:
|
417
|
+
self.editor.remove_substation(substation=self, delete_from_db=True)
|
380
418
|
|
381
419
|
def move_to_api_coordinates(self):
|
382
420
|
"""
|
@@ -454,7 +492,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
454
492
|
:param width: New pen width.
|
455
493
|
"""
|
456
494
|
pen = self.pen()
|
457
|
-
pen.
|
495
|
+
pen.setWidthF(width)
|
458
496
|
self.setPen(pen)
|
459
497
|
|
460
498
|
def set_color(self, inner_color: QColor = None, border_color: QColor = None) -> None:
|
@@ -480,3 +518,12 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
|
|
480
518
|
"""
|
481
519
|
# Example: color assignment
|
482
520
|
self.set_color(self.color, self.border_color)
|
521
|
+
|
522
|
+
def open_street_view(self):
|
523
|
+
"""
|
524
|
+
Call open street maps
|
525
|
+
:return:
|
526
|
+
"""
|
527
|
+
# https://maps.google.com/?q=<lat>,<lng>
|
528
|
+
url = f"https://www.google.com/maps/?q={self.lat},{self.lon}"
|
529
|
+
webbrowser.open(url)
|
{gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py
RENAMED
@@ -44,20 +44,19 @@ class BlueMarbleTiles(Tiles):
|
|
44
44
|
:param http_proxy:
|
45
45
|
"""
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
attribution="© NASA Blue Marble, © OpenStreetMap contributors")
|
47
|
+
super().__init__(tile_set_name=name,
|
48
|
+
tile_set_short_name='BM Tiles',
|
49
|
+
tile_set_version='1.0',
|
50
|
+
levels=list(range(10)),
|
51
|
+
tile_width=256,
|
52
|
+
tile_height=256,
|
53
|
+
tiles_dir=tiles_dir,
|
54
|
+
max_lru=10000,
|
55
|
+
servers=['https://s3.amazonaws.com', ],
|
56
|
+
url_path='/com.modestmaps.bluemarble/{Z}-r{Y}-c{X}.jpg',
|
57
|
+
max_server_requests=2,
|
58
|
+
http_proxy=http_proxy,
|
59
|
+
attribution="© NASA Blue Marble, © OpenStreetMap contributors")
|
61
60
|
|
62
61
|
def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[float, float]:
|
63
62
|
"""Convert geo to tile fractional coordinates for level in use.
|
{gridcal-5.3.16 → gridcal-5.3.18}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py
RENAMED
@@ -52,17 +52,12 @@ class CartoDbTiles(Tiles):
|
|
52
52
|
tile_width=256,
|
53
53
|
tile_height=256,
|
54
54
|
tiles_dir=tiles_dir,
|
55
|
-
servers=[
|
56
|
-
"https://basemaps.cartocdn.com/dark_all/"
|
57
|
-
] if tile_servers is None else tile_servers,
|
55
|
+
servers=["https://basemaps.cartocdn.com/dark_all/"] if tile_servers is None else tile_servers,
|
58
56
|
url_path='/{Z}/{X}/{Y}.png',
|
59
57
|
max_server_requests=2,
|
60
58
|
max_lru=10000,
|
61
59
|
http_proxy=http_proxy,
|
62
60
|
attribution="© CARTO, © OpenStreetMap contributors")
|
63
|
-
# TODO: implement map wrap-around
|
64
|
-
# self.wrap_x = True
|
65
|
-
# self.wrap_y = False
|
66
61
|
|
67
62
|
# get tile information into instance
|
68
63
|
self.level = min(self.levels)
|
@@ -36,7 +36,7 @@ from PySide6.QtGui import QPixmap
|
|
36
36
|
from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles_cache import TilesCache
|
37
37
|
|
38
38
|
|
39
|
-
class BaseTiles
|
39
|
+
class BaseTiles:
|
40
40
|
"""A base tile object to source local tiles for pySlip."""
|
41
41
|
|
42
42
|
def __init__(self,
|
@@ -92,7 +92,9 @@ class BaseTiles(object):
|
|
92
92
|
raise Exception(msg) from None
|
93
93
|
|
94
94
|
msg = "The tiles directory %s doesn't exist." % tiles_dir
|
95
|
-
|
95
|
+
print(msg)
|
96
|
+
# raise Exception(msg) from None
|
97
|
+
os.makedirs(tiles_dir)
|
96
98
|
|
97
99
|
@property
|
98
100
|
def max_level(self):
|
@@ -31,17 +31,17 @@ https://github.com/rzzzwilson/pyCacheBack
|
|
31
31
|
class PyCacheBack(dict):
|
32
32
|
"""An LRU limited in-memory store fronting an unlimited on-disk store."""
|
33
33
|
|
34
|
-
|
35
|
-
|
34
|
+
def __init__(self, *args, **kwargs):
|
35
|
+
super().__init__(*args, **kwargs)
|
36
|
+
# default maximum number of key/value pairs for pyCacheBack
|
37
|
+
self.DefaultMaxLRU = 1000
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
+
# default path to tiles directory
|
40
|
+
self.DefaultTilesDir = 'tiles'
|
39
41
|
|
40
|
-
def __init__(self, *args, **kwargs):
|
41
42
|
self._lru_list = []
|
42
43
|
self._max_lru = kwargs.pop('max_lru', self.DefaultMaxLRU)
|
43
44
|
self._tiles_dir = kwargs.pop('tiles_dir', self.DefaultTilesDir)
|
44
|
-
super().__init__(*args, **kwargs)
|
45
45
|
|
46
46
|
def __getitem__(self, key):
|
47
47
|
if key in self:
|
@@ -134,4 +134,3 @@ class PyCacheBack(dict):
|
|
134
134
|
"""
|
135
135
|
|
136
136
|
raise KeyError
|
137
|
-
|
@@ -55,11 +55,7 @@ class Tiles(BaseTiles):
|
|
55
55
|
A tile object to source server tiles for the widget.
|
56
56
|
"""
|
57
57
|
|
58
|
-
# allowed file types and associated values
|
59
|
-
AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG'}
|
60
58
|
|
61
|
-
# the number of seconds in a day
|
62
|
-
SecondsInADay = 60 * 60 * 24
|
63
59
|
|
64
60
|
def __init__(self,
|
65
61
|
tile_set_name: str,
|
@@ -92,6 +88,15 @@ class Tiles(BaseTiles):
|
|
92
88
|
:param http_proxy: proxy to use if required
|
93
89
|
:param re_fetch_days: fetch new server tile if older than this in days (0 means don't ever update tiles)
|
94
90
|
"""
|
91
|
+
# perform the base class initialization
|
92
|
+
super().__init__(levels, tile_width, tile_height, tiles_dir, max_lru)
|
93
|
+
|
94
|
+
# allowed file types and associated values
|
95
|
+
self.AllowedFileTypes = {'png': 'PNG', 'jpg': 'JPG'}
|
96
|
+
|
97
|
+
# the number of seconds in a day
|
98
|
+
self.SecondsInADay = 60 * 60 * 24
|
99
|
+
|
95
100
|
self.tile_set_name = tile_set_name
|
96
101
|
self.tile_set_short_name = tile_set_short_name
|
97
102
|
self.tile_set_version = tile_set_version
|
@@ -105,8 +110,7 @@ class Tiles(BaseTiles):
|
|
105
110
|
if not os.path.isdir(level_dir):
|
106
111
|
os.makedirs(level_dir)
|
107
112
|
|
108
|
-
|
109
|
-
super().__init__(levels, tile_width, tile_height, tiles_dir, max_lru)
|
113
|
+
|
110
114
|
|
111
115
|
# save params not saved in super()
|
112
116
|
self.servers = servers
|
@@ -41,8 +41,11 @@ class TilesCache(pycacheback.PyCacheBack):
|
|
41
41
|
self._tiles_dir path to the on-disk cache directory
|
42
42
|
"""
|
43
43
|
|
44
|
-
|
45
|
-
|
44
|
+
def __init__(self, *args, **kwargs):
|
45
|
+
super().__init__(*args, **kwargs)
|
46
|
+
|
47
|
+
self.PicExtension = 'png'
|
48
|
+
self.TilePath = '{Z}/{X}/{Y}.%s' % self.PicExtension
|
46
49
|
|
47
50
|
def tile_date(self, key: Tuple[int, float, float]):
|
48
51
|
"""Return the creation date of a tile given its key."""
|
@@ -94,10 +97,10 @@ class TilesCache(pycacheback.PyCacheBack):
|
|
94
97
|
try:
|
95
98
|
os.makedirs(dir_path)
|
96
99
|
except OSError:
|
97
|
-
# we assume it's a
|
100
|
+
# we assume it's a 'directory exists' error, which we ignore
|
98
101
|
pass
|
99
102
|
|
100
|
-
image.save(tile_path,
|
103
|
+
image.save(tile_path, self.PicExtension)
|
101
104
|
|
102
105
|
def add(self, key: Tuple[int, float, float], image: QPixmap):
|
103
106
|
"""
|