GridCal 5.1.12__tar.gz → 5.1.13__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.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/object_plot_analysis.py +73 -5
- GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +38 -0
- GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +38 -0
- GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +39 -0
- GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +38 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +17 -6
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +22 -4
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +3 -3
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +5 -4
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +26 -8
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +12 -2
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +3 -3
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +82 -5
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +376 -155
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +105 -20
- GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget2/map_widget.py +1871 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +14 -9
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +19 -104
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/base_diagram_widget.py +82 -14
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/generic_graphics.py +3 -3
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/io.py +9 -7
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +4 -4
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/__version__.py +1 -1
- GridCal-5.1.13/GridCal/data/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/sequence_lines.csv +1 -4
- {GridCal-5.1.12 → GridCal-5.1.13}/PKG-INFO +1 -1
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ExecuteGridCal.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ConsoleWidget.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/image_layer.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/layer_types.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/place.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/point_layer.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/polygon_layer.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/polyline_layer.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/text_layer.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/logger.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Branches → GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget2}/__init__.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Fluid → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Branches}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Injections → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Fluid}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Substation → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Injections}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Diagrams → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Substation}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/GridGenerator → GridCal-5.1.13/GridCal/Gui/Diagrams}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GeneralDialogues.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/LoadDesigner → GridCal-5.1.13/GridCal/Gui/GridGenerator}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GuiFunctions.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Model → GridCal-5.1.13/GridCal/Gui/LoadDesigner}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/MainWindow.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Results → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Model}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Scripting → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Results}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Server → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Scripting}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Settings → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Server}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Main/SubClasses → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Settings}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Main → GridCal-5.1.13/GridCal/Gui/Main/SubClasses}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/ProfilesInput → GridCal-5.1.13/GridCal/Gui/Main}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/object_select_window.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/RosetaExplorer → GridCal-5.1.13/GridCal/Gui/ProfilesInput}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/SigmaAnalysis → GridCal-5.1.13/GridCal/Gui/RosetaExplorer}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/SolarPowerWizard → GridCal-5.1.13/GridCal/Gui/SigmaAnalysis}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/SyncDialogue → GridCal-5.1.13/GridCal/Gui/SolarPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/SystemScaler → GridCal-5.1.13/GridCal/Gui/SyncDialogue}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/TowerBuilder → GridCal-5.1.13/GridCal/Gui/SystemScaler}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/TreeModelViewer → GridCal-5.1.13/GridCal/Gui/TowerBuilder}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/test_.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Visualization → GridCal-5.1.13/GridCal/Gui/TreeModelViewer}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/Widgets → GridCal-5.1.13/GridCal/Gui/Visualization}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Visualization/palettes.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Visualization/visualization.py +0 -0
- {GridCal-5.1.12/GridCal/Gui/WindPowerWizard → GridCal-5.1.13/GridCal/Gui/Widgets}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {GridCal-5.1.12/GridCal/Gui → GridCal-5.1.13/GridCal/Gui/WindPowerWizard}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {GridCal-5.1.12/GridCal/Session → GridCal-5.1.13/GridCal/Gui}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/messages.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/plot_config.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/themes.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/update_gui_all.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/update_gui_common.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/LICENSE.txt +0 -0
- {GridCal-5.1.12/GridCal/ThirdParty → GridCal-5.1.13/GridCal/Session}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/export_results_driver.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/file_handler.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/results_model.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/server_driver.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/session.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/synchronization_driver.py +0 -0
- {GridCal-5.1.12/GridCal/ThirdParty/qdarktheme/_icon → GridCal-5.1.13/GridCal/ThirdParty}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {GridCal-5.1.12/GridCal/ThirdParty/qdarktheme/_template → GridCal-5.1.13/GridCal/ThirdParty/qdarktheme/_icon}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {GridCal-5.1.12/GridCal/data → GridCal-5.1.13/GridCal/ThirdParty/qdarktheme/_template}/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/__init__.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/cables.csv +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/transformers.csv +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/wires.csv +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/templates.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/update.py +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/setup.cfg +0 -0
- {GridCal-5.1.12 → GridCal-5.1.13}/setup.py +0 -0
@@ -363,6 +363,22 @@ def analyze_lines(elements: List[Line],
|
|
363
363
|
|
364
364
|
s = '[' + str(V1) + '-' + str(V2) + ']'
|
365
365
|
|
366
|
+
if elm.bus_from is None:
|
367
|
+
logger.add(object_type=elm.device_type.value,
|
368
|
+
element_name=elm,
|
369
|
+
element_index=i,
|
370
|
+
severity=LogSeverity.Error,
|
371
|
+
propty="bus_from",
|
372
|
+
message="The bus from is None")
|
373
|
+
|
374
|
+
if elm.bus_to is None:
|
375
|
+
logger.add(object_type=elm.device_type.value,
|
376
|
+
element_name=elm,
|
377
|
+
element_index=i,
|
378
|
+
severity=LogSeverity.Error,
|
379
|
+
propty="bus_to",
|
380
|
+
message="The bus to is None")
|
381
|
+
|
366
382
|
if V1 > 0 and V2 > 0:
|
367
383
|
per = V1 / V2
|
368
384
|
if per < (1.0 - branch_connection_voltage_tolerance):
|
@@ -498,6 +514,22 @@ def analyze_transformers(elements: List[Transformer2W],
|
|
498
514
|
"""
|
499
515
|
for i, elm in enumerate(elements):
|
500
516
|
|
517
|
+
if elm.bus_from is None:
|
518
|
+
logger.add(object_type=elm.device_type.value,
|
519
|
+
element_name=elm,
|
520
|
+
element_index=i,
|
521
|
+
severity=LogSeverity.Error,
|
522
|
+
propty="bus_from",
|
523
|
+
message="The bus from is None")
|
524
|
+
|
525
|
+
if elm.bus_to is None:
|
526
|
+
logger.add(object_type=elm.device_type.value,
|
527
|
+
element_name=elm,
|
528
|
+
element_index=i,
|
529
|
+
severity=LogSeverity.Error,
|
530
|
+
propty="bus_to",
|
531
|
+
message="The bus to is None")
|
532
|
+
|
501
533
|
if elm.name == '':
|
502
534
|
logger.add(object_type=object_type.value,
|
503
535
|
element_name=elm.name,
|
@@ -759,6 +791,14 @@ def analyze_generators(elements: List[Generator],
|
|
759
791
|
if time_profile is not None:
|
760
792
|
Pg_prof += obj.P_prof.toarray() * obj.active_prof.toarray()
|
761
793
|
|
794
|
+
if obj.bus is None:
|
795
|
+
logger.add(object_type=object_type.value,
|
796
|
+
element_name=obj,
|
797
|
+
element_index=k,
|
798
|
+
severity=LogSeverity.Error,
|
799
|
+
propty="bus",
|
800
|
+
message="The bus is None")
|
801
|
+
|
762
802
|
if obj.Vset < v_low:
|
763
803
|
logger.add(object_type=object_type.value,
|
764
804
|
element_name=obj,
|
@@ -886,6 +926,14 @@ def analyze_batteries(elements: List[Battery],
|
|
886
926
|
for k, obj in enumerate(elements):
|
887
927
|
Pg += obj.P * obj.active
|
888
928
|
|
929
|
+
if obj.bus is None:
|
930
|
+
logger.add(object_type=object_type.value,
|
931
|
+
element_name=obj,
|
932
|
+
element_index=k,
|
933
|
+
severity=LogSeverity.Error,
|
934
|
+
propty="bus",
|
935
|
+
message="The bus is None")
|
936
|
+
|
889
937
|
if time_profile is not None:
|
890
938
|
Pg_prof += obj.P_prof.toarray() * obj.active_prof.toarray()
|
891
939
|
|
@@ -978,7 +1026,8 @@ def analyze_batteries(elements: List[Battery],
|
|
978
1026
|
|
979
1027
|
|
980
1028
|
def analyze_static_gen(elements: List[StaticGenerator],
|
981
|
-
time_profile
|
1029
|
+
time_profile,
|
1030
|
+
logger: GridErrorLog,):
|
982
1031
|
"""
|
983
1032
|
|
984
1033
|
:param elements:
|
@@ -994,6 +1043,14 @@ def analyze_static_gen(elements: List[StaticGenerator],
|
|
994
1043
|
Pg += obj.P * obj.active
|
995
1044
|
Qg += obj.Q * obj.active
|
996
1045
|
|
1046
|
+
if obj.bus is None:
|
1047
|
+
logger.add(object_type=obj.device_type.value,
|
1048
|
+
element_name=obj,
|
1049
|
+
element_index=k,
|
1050
|
+
severity=LogSeverity.Error,
|
1051
|
+
propty="bus",
|
1052
|
+
message="The bus is None")
|
1053
|
+
|
997
1054
|
if time_profile is not None:
|
998
1055
|
Pg_prof += obj.P_prof.toarray() * obj.active_prof.toarray()
|
999
1056
|
Qg_prof += obj.Q_prof.toarray() * obj.active_prof.toarray()
|
@@ -1002,7 +1059,8 @@ def analyze_static_gen(elements: List[StaticGenerator],
|
|
1002
1059
|
|
1003
1060
|
|
1004
1061
|
def analyze_load(elements: List[Load],
|
1005
|
-
time_profile
|
1062
|
+
time_profile,
|
1063
|
+
logger: GridErrorLog,):
|
1006
1064
|
"""
|
1007
1065
|
|
1008
1066
|
:param elements:
|
@@ -1014,10 +1072,18 @@ def analyze_load(elements: List[Load],
|
|
1014
1072
|
Pl_prof = 0.0
|
1015
1073
|
Ql_prof = 0.0
|
1016
1074
|
|
1017
|
-
for elm in elements:
|
1075
|
+
for k, elm in enumerate(elements):
|
1018
1076
|
Pl += elm.P * elm.active
|
1019
1077
|
Ql += elm.Q * elm.active
|
1020
1078
|
|
1079
|
+
if elm.bus is None:
|
1080
|
+
logger.add(object_type=elm.device_type.value,
|
1081
|
+
element_name=elm,
|
1082
|
+
element_index=k,
|
1083
|
+
severity=LogSeverity.Error,
|
1084
|
+
propty="bus",
|
1085
|
+
message="The bus is None")
|
1086
|
+
|
1021
1087
|
if time_profile is not None:
|
1022
1088
|
Pl_prof += elm.P_prof.toarray() * elm.active_prof.toarray()
|
1023
1089
|
Ql_prof += elm.Q_prof.toarray() * elm.active_prof.toarray()
|
@@ -1124,7 +1190,8 @@ def grid_analysis(circuit: MultiCircuit,
|
|
1124
1190
|
Pg_prof += Pgb_prof
|
1125
1191
|
|
1126
1192
|
Pgs, Qgs, Pgs_prof, Qgs_prof = analyze_static_gen(elements=circuit.get_static_generators(),
|
1127
|
-
time_profile=circuit.get_time_array()
|
1193
|
+
time_profile=circuit.get_time_array(),
|
1194
|
+
logger=logger)
|
1128
1195
|
|
1129
1196
|
Pg += Pgs
|
1130
1197
|
Pg_prof += Pgs_prof
|
@@ -1132,7 +1199,8 @@ def grid_analysis(circuit: MultiCircuit,
|
|
1132
1199
|
Qg_prof += Qgs_prof
|
1133
1200
|
|
1134
1201
|
Pll, Qll, Pll_prof, Qll_prof = analyze_load(elements=circuit.get_loads(),
|
1135
|
-
time_profile=circuit.get_time_array()
|
1202
|
+
time_profile=circuit.get_time_array(),
|
1203
|
+
logger=logger)
|
1136
1204
|
|
1137
1205
|
Pl += Pll
|
1138
1206
|
Pl_prof += Pll_prof
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# GridCal
|
2
|
+
# Copyright (C) 2015 - 2024 Santiago Peñate Vera
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public License
|
15
|
+
# along with this program; if not, write to the Free Software Foundation,
|
16
|
+
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
17
|
+
from __future__ import annotations
|
18
|
+
from typing import TYPE_CHECKING
|
19
|
+
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
|
20
|
+
from GridCalEngine.Devices.Branches.line import Line
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
24
|
+
|
25
|
+
|
26
|
+
class MapAcLine(MapLineContainer):
|
27
|
+
|
28
|
+
def __init__(self,
|
29
|
+
editor: GridMapWidget,
|
30
|
+
api_object: Line,
|
31
|
+
draw_labels: bool = True):
|
32
|
+
"""
|
33
|
+
|
34
|
+
:param editor:
|
35
|
+
:param api_object:
|
36
|
+
:param draw_labels:
|
37
|
+
"""
|
38
|
+
MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# GridCal
|
2
|
+
# Copyright (C) 2015 - 2024 Santiago Peñate Vera
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public License
|
15
|
+
# along with this program; if not, write to the Free Software Foundation,
|
16
|
+
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
17
|
+
from __future__ import annotations
|
18
|
+
from typing import TYPE_CHECKING
|
19
|
+
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
|
20
|
+
from GridCalEngine.Devices.Branches.dc_line import DcLine
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
24
|
+
|
25
|
+
|
26
|
+
class MapDcLine(MapLineContainer):
|
27
|
+
|
28
|
+
def __init__(self,
|
29
|
+
editor: GridMapWidget,
|
30
|
+
api_object: DcLine,
|
31
|
+
draw_labels: bool = True):
|
32
|
+
"""
|
33
|
+
|
34
|
+
:param editor:
|
35
|
+
:param api_object:
|
36
|
+
:param draw_labels:
|
37
|
+
"""
|
38
|
+
MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# GridCal
|
2
|
+
# Copyright (C) 2015 - 2024 Santiago Peñate Vera
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public License
|
15
|
+
# along with this program; if not, write to the Free Software Foundation,
|
16
|
+
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
17
|
+
from __future__ import annotations
|
18
|
+
from typing import TYPE_CHECKING
|
19
|
+
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
|
20
|
+
from GridCalEngine.Devices.Fluid.fluid_path import FluidPath
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
24
|
+
|
25
|
+
|
26
|
+
class MapFluidPathLine(MapLineContainer):
|
27
|
+
|
28
|
+
def __init__(self,
|
29
|
+
editor: GridMapWidget,
|
30
|
+
api_object: FluidPath,
|
31
|
+
draw_labels: bool = True):
|
32
|
+
"""
|
33
|
+
|
34
|
+
:param editor:
|
35
|
+
:param api_object:
|
36
|
+
:param draw_labels:
|
37
|
+
"""
|
38
|
+
MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
|
39
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# GridCal
|
2
|
+
# Copyright (C) 2015 - 2024 Santiago Peñate Vera
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public License
|
15
|
+
# along with this program; if not, write to the Free Software Foundation,
|
16
|
+
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
17
|
+
from __future__ import annotations
|
18
|
+
from typing import TYPE_CHECKING
|
19
|
+
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
|
20
|
+
from GridCalEngine.Devices.Branches.hvdc_line import HvdcLine
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
24
|
+
|
25
|
+
|
26
|
+
class MapHvdcLine(MapLineContainer):
|
27
|
+
|
28
|
+
def __init__(self,
|
29
|
+
editor: GridMapWidget,
|
30
|
+
api_object: HvdcLine,
|
31
|
+
draw_labels: bool = True):
|
32
|
+
"""
|
33
|
+
|
34
|
+
:param editor:
|
35
|
+
:param api_object:
|
36
|
+
:param draw_labels:
|
37
|
+
"""
|
38
|
+
MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
|
{GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py
RENAMED
@@ -24,12 +24,11 @@ from PySide6.QtGui import QColor, QPen
|
|
24
24
|
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_segment import MapLineSegment
|
25
25
|
from GridCalEngine.Devices import LineLocation
|
26
26
|
from GridCalEngine.Devices.Diagrams.base_diagram import PointsGroup
|
27
|
-
from GridCalEngine.Devices.types import BRANCH_TYPES
|
27
|
+
from GridCalEngine.Devices.types import BRANCH_TYPES, FluidPath
|
28
28
|
from GridCalEngine.Devices.Branches.line import Line
|
29
29
|
from GridCalEngine.enumerations import DeviceType
|
30
30
|
from GridCal.Gui.Diagrams.generic_graphics import GenericDiagramWidget
|
31
31
|
|
32
|
-
|
33
32
|
if TYPE_CHECKING:
|
34
33
|
from GridCal.Gui.Diagrams.MapWidget.Substation.node_graphic_item import NodeGraphicItem
|
35
34
|
from GridCal.Gui.Diagrams.MapWidget.Substation.substation_graphic_item import SubstationGraphicItem
|
@@ -44,7 +43,7 @@ class MapLineContainer(GenericDiagramWidget):
|
|
44
43
|
|
45
44
|
def __init__(self,
|
46
45
|
editor: GridMapWidget,
|
47
|
-
api_object: BRANCH_TYPES,
|
46
|
+
api_object: Union[BRANCH_TYPES, FluidPath],
|
48
47
|
draw_labels: bool = True):
|
49
48
|
"""
|
50
49
|
|
@@ -64,6 +63,16 @@ class MapLineContainer(GenericDiagramWidget):
|
|
64
63
|
self.enabled = True
|
65
64
|
self.original = True
|
66
65
|
|
66
|
+
def setWidthScale(self, val: float):
|
67
|
+
"""
|
68
|
+
Set the width scale of the line
|
69
|
+
:param val:
|
70
|
+
"""
|
71
|
+
for segment in self.segments_list:
|
72
|
+
pen = segment.pen() # get the current pen
|
73
|
+
pen.setWidthF(val) # Set the fractional thickness of the line
|
74
|
+
segment.setPen(pen) # Assign the pen to the line item
|
75
|
+
|
67
76
|
def clean_segments(self) -> None:
|
68
77
|
"""
|
69
78
|
Remove all segments from the scene
|
@@ -187,10 +196,14 @@ class MapLineContainer(GenericDiagramWidget):
|
|
187
196
|
self.redraw_segments()
|
188
197
|
|
189
198
|
def removeNode(self, node: NodeGraphicItem):
|
199
|
+
"""
|
190
200
|
|
201
|
+
:param node:
|
202
|
+
:return:
|
203
|
+
"""
|
191
204
|
for seg in self.segments_list:
|
192
205
|
if seg.first.api_object == node.api_object or seg.second.api_object == node.api_object:
|
193
|
-
self.editor.diagram_scene.removeItem(seg)
|
206
|
+
self.editor.map.diagram_scene.removeItem(seg)
|
194
207
|
|
195
208
|
self.nodes_list.remove(node)
|
196
209
|
|
@@ -402,5 +415,3 @@ class MapLineContainer(GenericDiagramWidget):
|
|
402
415
|
|
403
416
|
for line in self.segments_list:
|
404
417
|
line.set_enable(val=False)
|
405
|
-
|
406
|
-
|
{GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
@@ -19,13 +19,17 @@ from typing import TYPE_CHECKING
|
|
19
19
|
from PySide6.QtCore import Qt
|
20
20
|
from PySide6.QtGui import QPen, QColor, QCursor
|
21
21
|
from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent
|
22
|
-
from PySide6.QtWidgets import QGraphicsLineItem
|
23
|
-
|
22
|
+
from PySide6.QtWidgets import QGraphicsLineItem, QGraphicsSceneMouseEvent
|
23
|
+
|
24
24
|
from GridCal.Gui.GuiFunctions import add_menu_entry
|
25
25
|
from GridCal.Gui.messages import yes_no_question
|
26
26
|
from GridCal.Gui.Diagrams.generic_graphics import ACTIVE, DEACTIVATED, OTHER
|
27
27
|
from GridCal.Gui.Diagrams.SchematicWidget.Branches.line_editor import LineEditor
|
28
28
|
|
29
|
+
from GridCalEngine.Devices.types import BRANCH_TYPES
|
30
|
+
from GridCalEngine.enumerations import DeviceType
|
31
|
+
|
32
|
+
|
29
33
|
if TYPE_CHECKING:
|
30
34
|
from GridCal.Gui.Diagrams.MapWidget.Substation.node_graphic_item import NodeGraphicItem
|
31
35
|
from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
|
@@ -51,8 +55,8 @@ class MapLineSegment(QGraphicsLineItem):
|
|
51
55
|
|
52
56
|
self.style = Qt.SolidLine
|
53
57
|
self.color = Qt.blue
|
54
|
-
self.width =
|
55
|
-
self.lineWidth =
|
58
|
+
self.width = 0
|
59
|
+
self.lineWidth = 1
|
56
60
|
self.scaleSegment = self.lineWidth
|
57
61
|
self.setScale(self.scaleSegment)
|
58
62
|
|
@@ -119,6 +123,20 @@ class MapLineSegment(QGraphicsLineItem):
|
|
119
123
|
self.first.needsUpdate = False
|
120
124
|
self.second.needsUpdate = False
|
121
125
|
|
126
|
+
def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
|
127
|
+
"""
|
128
|
+
mouse press: display the editor
|
129
|
+
:param event:
|
130
|
+
:return:
|
131
|
+
"""
|
132
|
+
if self.api_object is not None:
|
133
|
+
self.editor.set_editor_model(api_object=self.api_object,
|
134
|
+
dictionary_of_lists={
|
135
|
+
DeviceType.BusDevice: self.editor.circuit.get_buses(),
|
136
|
+
DeviceType.ConnectivityNodeDevice: self.editor.circuit.get_connectivity_nodes(),
|
137
|
+
DeviceType.BranchGroupDevice: self.editor.circuit.get_branch_groups()
|
138
|
+
})
|
139
|
+
|
122
140
|
def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent):
|
123
141
|
"""
|
124
142
|
|
{GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py
RENAMED
@@ -161,7 +161,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
161
161
|
super().mousePressEvent(event)
|
162
162
|
|
163
163
|
if self.enabled:
|
164
|
-
self.editor.disableMove = True
|
164
|
+
self.editor.map.view.disableMove = True
|
165
165
|
if event.button() == Qt.RightButton:
|
166
166
|
pass
|
167
167
|
elif event.button() == Qt.LeftButton:
|
@@ -174,7 +174,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
174
174
|
super().mouseReleaseEvent(event)
|
175
175
|
self.editor.disableMove = True
|
176
176
|
self.updateDiagram()
|
177
|
-
self.editor.
|
177
|
+
self.editor.map.view._scene.update()
|
178
178
|
|
179
179
|
def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
|
180
180
|
"""
|
@@ -230,7 +230,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
230
230
|
:return:
|
231
231
|
"""
|
232
232
|
if not self.itemSelected:
|
233
|
-
self.editor.selectedItems.append(self)
|
233
|
+
self.editor.map.view.selectedItems.append(self)
|
234
234
|
self.setNodeColor(QColor(Qt.yellow), QColor(Qt.yellow))
|
235
235
|
self.itemSelected = True
|
236
236
|
|
{GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py
RENAMED
@@ -17,12 +17,13 @@
|
|
17
17
|
from __future__ import annotations
|
18
18
|
from typing import Union, TYPE_CHECKING
|
19
19
|
from PySide6.QtCore import QPointF
|
20
|
-
|
20
|
+
|
21
21
|
from GridCal.Gui.Diagrams.generic_graphics import GenericDiagramWidget
|
22
22
|
|
23
|
+
from GridCalEngine.Devices.types import ALL_DEV_TYPES
|
24
|
+
|
23
25
|
if TYPE_CHECKING: # Only imports the below statements during type checking
|
24
|
-
from GridCal.Gui.Diagrams.
|
25
|
-
from GridCal.Gui.Diagrams.MapWidget.map_widget import MapWidget
|
26
|
+
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
26
27
|
|
27
28
|
|
28
29
|
class NodeTemplate(GenericDiagramWidget):
|
@@ -32,7 +33,7 @@ class NodeTemplate(GenericDiagramWidget):
|
|
32
33
|
|
33
34
|
def __init__(self,
|
34
35
|
api_object: ALL_DEV_TYPES = None,
|
35
|
-
editor: Union[
|
36
|
+
editor: Union[GridMapWidget, None] = None,
|
36
37
|
draw_labels: bool = True,
|
37
38
|
needsUpdate: bool = True,
|
38
39
|
lat: float = 0.0,
|
@@ -20,9 +20,11 @@ from PySide6 import QtWidgets
|
|
20
20
|
from PySide6.QtWidgets import QApplication, QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent
|
21
21
|
from PySide6.QtCore import Qt, QPointF
|
22
22
|
from PySide6.QtGui import QBrush, QColor
|
23
|
+
from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
|
23
24
|
from GridCal.Gui.GuiFunctions import add_menu_entry
|
25
|
+
|
24
26
|
from GridCalEngine.Devices.Substation.substation import Substation
|
25
|
-
from
|
27
|
+
from GridCalEngine.enumerations import DeviceType
|
26
28
|
|
27
29
|
if TYPE_CHECKING: # Only imports the below statements during type checking
|
28
30
|
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
@@ -68,7 +70,13 @@ class SubstationGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
68
70
|
self.setRect(0.0, 0.0, r, r)
|
69
71
|
self.lat = lat
|
70
72
|
self.lon = lon
|
71
|
-
|
73
|
+
|
74
|
+
if lat is not None and lon is not None:
|
75
|
+
self.x, self.y = self.editor.to_x_y(lat=lat, lon=lon)
|
76
|
+
else:
|
77
|
+
self.x = 0
|
78
|
+
self.y = 0
|
79
|
+
|
72
80
|
self.radius = r
|
73
81
|
|
74
82
|
self.resize(r)
|
@@ -111,7 +119,7 @@ class SubstationGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
111
119
|
|
112
120
|
def updatePosition(self) -> None:
|
113
121
|
"""
|
114
|
-
|
122
|
+
|
115
123
|
:return:
|
116
124
|
"""
|
117
125
|
real_position = self.pos()
|
@@ -138,23 +146,33 @@ class SubstationGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
|
|
138
146
|
"""
|
139
147
|
Event handler for mouse move events.
|
140
148
|
"""
|
141
|
-
|
149
|
+
|
142
150
|
if self.hovered:
|
151
|
+
super().mouseMoveEvent(event)
|
143
152
|
self.updatePosition()
|
144
153
|
self.editor.update_connectors()
|
145
154
|
|
146
|
-
def mousePressEvent(self, event):
|
155
|
+
def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
|
147
156
|
"""
|
148
157
|
Event handler for mouse press events.
|
149
158
|
"""
|
150
|
-
|
151
|
-
|
159
|
+
self.editor.map.view.disableMove = True
|
160
|
+
|
161
|
+
if self.api_object is not None:
|
162
|
+
self.editor.set_editor_model(api_object=self.api_object,
|
163
|
+
dictionary_of_lists={
|
164
|
+
DeviceType.CountryDevice: self.editor.circuit.get_countries(),
|
165
|
+
DeviceType.CommunityDevice: self.editor.circuit.get_communities(),
|
166
|
+
DeviceType.RegionDevice: self.editor.circuit.get_regions(),
|
167
|
+
DeviceType.MunicipalityDevice: self.editor.circuit.get_municipalities(),
|
168
|
+
DeviceType.AreaDevice: self.editor.circuit.get_areas(),
|
169
|
+
DeviceType.ZoneDevice: self.editor.circuit.get_zones(),
|
170
|
+
})
|
152
171
|
|
153
172
|
def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent):
|
154
173
|
"""
|
155
174
|
Event handler for mouse release events.
|
156
175
|
"""
|
157
|
-
super().mouseReleaseEvent(event)
|
158
176
|
self.editor.disableMove = True
|
159
177
|
self.updateDiagram() # always update
|
160
178
|
|
@@ -19,9 +19,13 @@ from typing import TYPE_CHECKING, Tuple
|
|
19
19
|
from PySide6 import QtWidgets
|
20
20
|
from PySide6.QtCore import Qt, QPointF
|
21
21
|
from PySide6.QtGui import QBrush, QColor
|
22
|
-
from
|
22
|
+
from PySide6.QtWidgets import QGraphicsSceneMouseEvent
|
23
23
|
from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
|
24
24
|
|
25
|
+
from GridCalEngine.Devices.Substation.voltage_level import VoltageLevel
|
26
|
+
from GridCalEngine.enumerations import DeviceType
|
27
|
+
|
28
|
+
|
25
29
|
if TYPE_CHECKING: # Only imports the below statements during type checking
|
26
30
|
from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
|
27
31
|
from GridCal.Gui.Diagrams.MapWidget.Substation.substation_graphic_item import SubstationGraphicItem
|
@@ -131,7 +135,7 @@ class VoltageLevelGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
|
|
131
135
|
self.updatePosition()
|
132
136
|
self.editor.update_connectors()
|
133
137
|
|
134
|
-
def mousePressEvent(self, event):
|
138
|
+
def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
|
135
139
|
"""
|
136
140
|
Event handler for mouse press events.
|
137
141
|
"""
|
@@ -139,6 +143,12 @@ class VoltageLevelGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
|
|
139
143
|
self.editor.disableMove = True
|
140
144
|
self.updateDiagram() # always update
|
141
145
|
|
146
|
+
if self.api_object is not None:
|
147
|
+
self.editor.set_editor_model(api_object=self.api_object,
|
148
|
+
dictionary_of_lists={
|
149
|
+
DeviceType.SubstationDevice: self.editor.circuit.get_substations(),
|
150
|
+
})
|
151
|
+
|
142
152
|
def mouseReleaseEvent(self, event):
|
143
153
|
"""
|
144
154
|
Event handler for mouse release events.
|
{GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py
RENAMED
@@ -43,7 +43,7 @@ class OsmTiles(Tiles):
|
|
43
43
|
self.level = min(self.levels)
|
44
44
|
self.num_tiles_x, self.num_tiles_y, self.ppd_x, self.ppd_y = self.GetInfo(self.level)
|
45
45
|
|
46
|
-
def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[
|
46
|
+
def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[int, int]:
|
47
47
|
"""
|
48
48
|
Convert geo to tile fractional coordinates for level in use.
|
49
49
|
geo tuple of geo coordinates (xgeo, ygeo)
|
@@ -52,8 +52,8 @@ class OsmTiles(Tiles):
|
|
52
52
|
"""
|
53
53
|
lat_rad = math.radians(latitude)
|
54
54
|
n = 2.0 ** self.level
|
55
|
-
xtile = (longitude + 180.0) / 360.0 * n
|
56
|
-
ytile = ((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n
|
55
|
+
xtile = int((longitude + 180.0) / 360.0 * n)
|
56
|
+
ytile = int(((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n)
|
57
57
|
|
58
58
|
return xtile, ytile
|
59
59
|
|