GridCal 5.1.50__tar.gz → 5.1.52__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.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +45 -38
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +2 -2
- GridCal-5.1.52/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +211 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +48 -17
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +6 -4
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +32 -21
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/MainWindow.py +213 -176
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +996 -399
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Model/objects.py +156 -19
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Results/results.py +6 -1
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +4 -4
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +4 -18
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/base_gui.py +1 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/io.py +18 -5
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/simulations.py +13 -23
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/icons_rc.py +11145 -4012
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SystemScaler/system_scaler.py +6 -4
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/associations_model.py +7 -4
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/gui_functions.py +19 -11
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/object_model.py +37 -19
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/results_model.py +28 -5
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/table_view_header_wrap.py +19 -2
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/LICENSE.txt +1 -1
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Session/file_handler.py +7 -3
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Session/session.py +1 -1
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/__version__.py +1 -1
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/plugins.py +3 -16
- {GridCal-5.1.50 → GridCal-5.1.52}/PKG-INFO +1 -1
- {GridCal-5.1.50 → GridCal-5.1.52}/setup.py +0 -2
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ExecuteGridCal.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Analysis/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Analysis/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/object_select_window.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TowerBuilder/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TowerBuilder/test_.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Visualization/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Visualization/visualization.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Widgets/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/console_widget.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/general_dialogues.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/messages.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/pandas_model.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/plot_config.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/profiles_model.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/themes.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/update_gui_all.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/update_gui_common.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/wrappable_table_model.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Session/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Session/export_results_driver.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Session/server_driver.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Session/synchronization_driver.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/data/__init__.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/data/cables.csv +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/data/sequence_lines.csv +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/data/transformers.csv +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/data/wires.csv +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/templates.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/GridCal/update.py +0 -0
- {GridCal-5.1.50 → GridCal-5.1.52}/setup.cfg +0 -0
{GridCal-5.1.50 → GridCal-5.1.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py
RENAMED
@@ -58,7 +58,7 @@ class LineEditor(QDialog):
|
|
58
58
|
|
59
59
|
self.setObjectName("self")
|
60
60
|
|
61
|
-
self.setContextMenuPolicy(Qt.NoContextMenu)
|
61
|
+
self.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu)
|
62
62
|
|
63
63
|
self.layout = QVBoxLayout(self)
|
64
64
|
|
@@ -84,10 +84,10 @@ class LineEditor(QDialog):
|
|
84
84
|
if length == 0:
|
85
85
|
length = 1.0
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
r_ohm = self.line.R * Zbase / length
|
88
|
+
x_ohm = self.line.X * Zbase / length
|
89
|
+
b_us = self.line.B * Ybase / length * 1e6
|
90
|
+
I_KA = np.round(self.line.rate / (Vf * 1.73205080757), 6) # current in KA
|
91
91
|
|
92
92
|
# ------------------------------------------------------------------------------------------
|
93
93
|
|
@@ -103,22 +103,22 @@ class LineEditor(QDialog):
|
|
103
103
|
self.catalogue_combo.setCurrentIndex(idx)
|
104
104
|
|
105
105
|
if isinstance(self.current_template, SequenceLineType):
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
106
|
+
I_KA = self.current_template.Imax
|
107
|
+
r_ohm = self.current_template.R
|
108
|
+
x_ohm = self.current_template.X
|
109
|
+
b_us = self.current_template.B
|
110
110
|
|
111
111
|
if isinstance(self.current_template, UndergroundLineType):
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
112
|
+
I_KA = self.current_template.Imax
|
113
|
+
r_ohm = self.current_template.R
|
114
|
+
x_ohm = self.current_template.X
|
115
|
+
b_us = self.current_template.B
|
116
116
|
|
117
117
|
elif isinstance(self.current_template, OverheadLineType):
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
118
|
+
I_KA = self.current_template.Imax
|
119
|
+
r_ohm = self.current_template.R1
|
120
|
+
x_ohm = self.current_template.X1
|
121
|
+
b_us = self.current_template.Bsh1
|
122
122
|
|
123
123
|
except:
|
124
124
|
pass
|
@@ -141,7 +141,7 @@ class LineEditor(QDialog):
|
|
141
141
|
self.i_spinner.setMinimum(0)
|
142
142
|
self.i_spinner.setMaximum(9999999)
|
143
143
|
self.i_spinner.setDecimals(2)
|
144
|
-
self.i_spinner.setValue(
|
144
|
+
self.i_spinner.setValue(I_KA)
|
145
145
|
self.i_spinner.setSuffix(' KA')
|
146
146
|
|
147
147
|
# R
|
@@ -149,7 +149,7 @@ class LineEditor(QDialog):
|
|
149
149
|
self.r_spinner.setMinimum(0)
|
150
150
|
self.r_spinner.setMaximum(9999999)
|
151
151
|
self.r_spinner.setDecimals(6)
|
152
|
-
self.r_spinner.setValue(
|
152
|
+
self.r_spinner.setValue(r_ohm)
|
153
153
|
self.r_spinner.setSuffix(' Ω/Km')
|
154
154
|
|
155
155
|
# X
|
@@ -157,7 +157,7 @@ class LineEditor(QDialog):
|
|
157
157
|
self.x_spinner.setMinimum(0)
|
158
158
|
self.x_spinner.setMaximum(9999999)
|
159
159
|
self.x_spinner.setDecimals(6)
|
160
|
-
self.x_spinner.setValue(
|
160
|
+
self.x_spinner.setValue(x_ohm)
|
161
161
|
self.x_spinner.setSuffix(' Ω/Km')
|
162
162
|
|
163
163
|
# B
|
@@ -165,7 +165,7 @@ class LineEditor(QDialog):
|
|
165
165
|
self.b_spinner.setMinimum(0)
|
166
166
|
self.b_spinner.setMaximum(9999999)
|
167
167
|
self.b_spinner.setDecimals(6)
|
168
|
-
self.b_spinner.setValue(
|
168
|
+
self.b_spinner.setValue(b_us)
|
169
169
|
self.b_spinner.setSuffix(" uS/Km")
|
170
170
|
|
171
171
|
# apply to profile
|
@@ -209,29 +209,36 @@ class LineEditor(QDialog):
|
|
209
209
|
|
210
210
|
self.setWindowTitle('Line editor')
|
211
211
|
|
212
|
-
def accept_click(self):
|
212
|
+
def accept_click(self) -> None:
|
213
213
|
"""
|
214
214
|
Set the values
|
215
215
|
:return:
|
216
216
|
"""
|
217
217
|
|
218
|
-
|
219
|
-
|
220
|
-
|
218
|
+
length = self.l_spinner.value()
|
219
|
+
|
220
|
+
if length != 0.0:
|
221
|
+
|
222
|
+
if self.selected_template is not None:
|
223
|
+
self.line.set_length(val=length, update_electrical_values=False)
|
224
|
+
self.line.apply_template(obj=self.selected_template, Sbase=self.Sbase)
|
225
|
+
|
226
|
+
else:
|
227
|
+
wf = 2 * np.pi * self.frequency
|
228
|
+
self.line.fill_design_properties(
|
229
|
+
r_ohm=self.r_spinner.value(), # ohm / km
|
230
|
+
x_ohm=self.x_spinner.value(), # ohm / km
|
231
|
+
c_nf=self.b_spinner.value() * 1e3 / wf, # nF / km
|
232
|
+
length=length, # km
|
233
|
+
Imax=self.i_spinner.value(), # KA
|
234
|
+
freq=self.frequency, # Hz
|
235
|
+
Sbase=self.Sbase, # MVA
|
236
|
+
apply_to_profile=self.apply_to_profile.isChecked()
|
237
|
+
)
|
238
|
+
|
239
|
+
self.accept()
|
221
240
|
else:
|
222
|
-
|
223
|
-
self.line.fill_design_properties(
|
224
|
-
r_ohm=self.r_spinner.value(), # ohm / km
|
225
|
-
x_ohm=self.x_spinner.value(), # ohm / km
|
226
|
-
c_nf=self.b_spinner.value() * 1e3 / wf, # nF / km
|
227
|
-
length=self.l_spinner.value(), # km
|
228
|
-
Imax=self.i_spinner.value(), # KA
|
229
|
-
freq=self.frequency, # Hz
|
230
|
-
Sbase=self.Sbase, # MVA
|
231
|
-
apply_to_profile=self.apply_to_profile.isChecked()
|
232
|
-
)
|
233
|
-
|
234
|
-
self.accept()
|
241
|
+
error_msg(text="The length cannot be 0!", title="Accept line design values")
|
235
242
|
|
236
243
|
def load_template(self, template: Union[SequenceLineType, OverheadLineType, UndergroundLineType]):
|
237
244
|
"""
|
@@ -181,7 +181,7 @@ class TransformerGraphicItem(LineGraphicTemplateItem):
|
|
181
181
|
modify_on_accept=True,
|
182
182
|
templates=templates,
|
183
183
|
current_template=current_template)
|
184
|
-
if dlg.
|
184
|
+
if dlg.exec():
|
185
185
|
pass
|
186
186
|
|
187
187
|
def edit_tap_changer(self):
|
@@ -191,7 +191,7 @@ class TransformerGraphicItem(LineGraphicTemplateItem):
|
|
191
191
|
"""
|
192
192
|
|
193
193
|
dlg = TransformerTapsEditor(api_object=self.api_object.tap_changer)
|
194
|
-
if dlg.
|
194
|
+
if dlg.exec():
|
195
195
|
pass
|
196
196
|
|
197
197
|
def show_transformer_editor(self):
|
@@ -0,0 +1,211 @@
|
|
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
|
+
|
18
|
+
from PySide6.QtCore import Qt
|
19
|
+
from PySide6.QtWidgets import QPushButton, QVBoxLayout, QHBoxLayout, QDialog, QLabel, QFrame
|
20
|
+
from GridCal.Gui.gui_functions import create_spinbox
|
21
|
+
from GridCal.ThirdParty.qdarktheme.qtpy.QtWidgets import QApplication
|
22
|
+
from GridCalEngine.Devices.Branches.transformer3w import Transformer3W
|
23
|
+
from GridCalEngine.Devices.Substation.bus import Bus
|
24
|
+
|
25
|
+
|
26
|
+
class WindingWidget(QFrame):
|
27
|
+
"""
|
28
|
+
Widget to package the winding editor logic
|
29
|
+
"""
|
30
|
+
|
31
|
+
def __init__(self, i: int, V: float, Sn: float, Pcu: float, Vsc: float, bus_to: Bus, Sbase: float):
|
32
|
+
"""
|
33
|
+
|
34
|
+
:param i:
|
35
|
+
:param V:
|
36
|
+
:param Sn:
|
37
|
+
:param Pcu:
|
38
|
+
:param Vsc:
|
39
|
+
:param bus_to:
|
40
|
+
:param Sbase:
|
41
|
+
"""
|
42
|
+
QFrame.__init__(self)
|
43
|
+
|
44
|
+
self.i = i
|
45
|
+
|
46
|
+
self.Sbase = Sbase
|
47
|
+
|
48
|
+
self.layout = QVBoxLayout(self)
|
49
|
+
|
50
|
+
# Vn
|
51
|
+
self.vn_spinner = create_spinbox(value=V, minimum=0, maximum=999999, decimals=6)
|
52
|
+
|
53
|
+
# Sn
|
54
|
+
self.sn_spinner = create_spinbox(value=Sn, minimum=0, maximum=999999, decimals=6)
|
55
|
+
|
56
|
+
# Pcu
|
57
|
+
self.pcu_spinner = create_spinbox(value=Pcu, minimum=0, maximum=999999, decimals=6)
|
58
|
+
|
59
|
+
# Vsc
|
60
|
+
self.vsc_spinner = create_spinbox(value=Vsc, minimum=0, maximum=999999, decimals=6)
|
61
|
+
|
62
|
+
# add all to the GUI
|
63
|
+
self.layout.addWidget(QLabel(f"Winding {self.i}"))
|
64
|
+
|
65
|
+
v_str = f"{bus_to.Vnom} KV" if bus_to is not None else 'Not connected'
|
66
|
+
self.layout.addWidget(QLabel(f"Bus voltage: {v_str}"))
|
67
|
+
|
68
|
+
if i == 1:
|
69
|
+
wstr = "1-2"
|
70
|
+
elif i == 2:
|
71
|
+
wstr = "2-3"
|
72
|
+
elif i == 3:
|
73
|
+
wstr = "3-1"
|
74
|
+
else:
|
75
|
+
wstr = ""
|
76
|
+
|
77
|
+
# spacer
|
78
|
+
self.layout.addWidget(QLabel(""))
|
79
|
+
|
80
|
+
self.layout.addWidget(QLabel(f"V{i}: Nominal voltage [KV]"))
|
81
|
+
self.layout.addWidget(self.vn_spinner)
|
82
|
+
|
83
|
+
self.layout.addWidget(QLabel(f"Sn{i}: Nominal power [MVA]"))
|
84
|
+
self.layout.addWidget(self.sn_spinner)
|
85
|
+
|
86
|
+
self.layout.addWidget(QLabel(f"Pcu {wstr}: Copper losses [kW]"))
|
87
|
+
self.layout.addWidget(self.pcu_spinner)
|
88
|
+
|
89
|
+
self.layout.addWidget(QLabel(f"Vsc {wstr}: Short circuit voltage [%]"))
|
90
|
+
self.layout.addWidget(self.vsc_spinner)
|
91
|
+
|
92
|
+
|
93
|
+
class Transformer3WEditor(QDialog):
|
94
|
+
"""
|
95
|
+
TransformerEditor
|
96
|
+
"""
|
97
|
+
|
98
|
+
def __init__(self, tr3: Transformer3W, Sbase: float = 100.0, modify_on_accept=True):
|
99
|
+
"""
|
100
|
+
Transformer
|
101
|
+
:param tr3:
|
102
|
+
:param Sbase:
|
103
|
+
"""
|
104
|
+
super(Transformer3WEditor, self).__init__()
|
105
|
+
|
106
|
+
# keep pointer to the line object
|
107
|
+
self.transformer_obj = tr3
|
108
|
+
|
109
|
+
self.Sbase = Sbase
|
110
|
+
|
111
|
+
self.modify_on_accept = modify_on_accept
|
112
|
+
|
113
|
+
self.selected_template = None
|
114
|
+
|
115
|
+
self.setObjectName("self")
|
116
|
+
|
117
|
+
self.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu)
|
118
|
+
|
119
|
+
# main vertical layout
|
120
|
+
self.layout = QVBoxLayout(self)
|
121
|
+
|
122
|
+
# windings horizontal layout
|
123
|
+
self.h_layout = QHBoxLayout(self)
|
124
|
+
self.w_frame = QFrame(self)
|
125
|
+
self.w_frame.setLayout(self.h_layout)
|
126
|
+
|
127
|
+
# create the windings frames
|
128
|
+
self.w1 = WindingWidget(1, V=tr3.V1, Sn=tr3.rate1, Pcu=tr3.Pcu12, Vsc=tr3.Vsc12,
|
129
|
+
bus_to=tr3.bus1, Sbase=self.Sbase)
|
130
|
+
|
131
|
+
self.w2 = WindingWidget(2, V=tr3.V2, Sn=tr3.rate2, Pcu=tr3.Pcu23, Vsc=tr3.Vsc23,
|
132
|
+
bus_to=tr3.bus2, Sbase=self.Sbase)
|
133
|
+
|
134
|
+
self.w3 = WindingWidget(3, V=tr3.V3, Sn=tr3.rate3, Pcu=tr3.Pcu31, Vsc=tr3.Vsc31,
|
135
|
+
bus_to=tr3.bus3, Sbase=self.Sbase)
|
136
|
+
|
137
|
+
self.h_layout.addWidget(self.w1)
|
138
|
+
self.h_layout.addWidget(self.w2)
|
139
|
+
self.h_layout.addWidget(self.w3)
|
140
|
+
|
141
|
+
# Pfe
|
142
|
+
self.pfe_spinner = create_spinbox(value=0.0, minimum=0, maximum=999999, decimals=6)
|
143
|
+
|
144
|
+
# I0
|
145
|
+
self.I0_spinner = create_spinbox(value=0.0, minimum=0, maximum=999999, decimals=6)
|
146
|
+
|
147
|
+
# ------------------------------------------------------------------------------------------
|
148
|
+
# Set the object values
|
149
|
+
# ------------------------------------------------------------------------------------------
|
150
|
+
|
151
|
+
# accept button
|
152
|
+
self.accept_btn = QPushButton()
|
153
|
+
self.accept_btn.setText('Accept')
|
154
|
+
self.accept_btn.clicked.connect(self.accept_click)
|
155
|
+
|
156
|
+
self.layout.addWidget(QLabel(f"Name: {tr3.name}"))
|
157
|
+
self.layout.addWidget(QLabel(f""))
|
158
|
+
|
159
|
+
self.layout.addWidget(QLabel("Pfe: Iron losses [kW]"))
|
160
|
+
self.layout.addWidget(self.pfe_spinner)
|
161
|
+
|
162
|
+
self.layout.addWidget(QLabel("I0: No load current [%]"))
|
163
|
+
self.layout.addWidget(self.I0_spinner)
|
164
|
+
|
165
|
+
# compose main layout
|
166
|
+
self.layout.addWidget(self.w_frame)
|
167
|
+
|
168
|
+
self.layout.addWidget(self.accept_btn)
|
169
|
+
|
170
|
+
self.setLayout(self.layout)
|
171
|
+
|
172
|
+
self.setWindowTitle('Transformer editor')
|
173
|
+
|
174
|
+
def accept_click(self):
|
175
|
+
"""
|
176
|
+
Create transformer type and get the impedances
|
177
|
+
:return:
|
178
|
+
"""
|
179
|
+
|
180
|
+
if self.modify_on_accept:
|
181
|
+
self.transformer_obj.fill_from_design_values(V1=self.w1.vn_spinner.value(),
|
182
|
+
V2=self.w2.vn_spinner.value(),
|
183
|
+
V3=self.w3.vn_spinner.value(),
|
184
|
+
Sn1=self.w1.sn_spinner.value(),
|
185
|
+
Sn2=self.w2.sn_spinner.value(),
|
186
|
+
Sn3=self.w3.sn_spinner.value(),
|
187
|
+
Pcu12=self.w1.pcu_spinner.value(),
|
188
|
+
Pcu23=self.w2.pcu_spinner.value(),
|
189
|
+
Pcu31=self.w3.pcu_spinner.value(),
|
190
|
+
Vsc12=self.w1.vsc_spinner.value(),
|
191
|
+
Vsc23=self.w2.vsc_spinner.value(),
|
192
|
+
Vsc31=self.w3.vsc_spinner.value(),
|
193
|
+
Pfe=self.pfe_spinner.value(),
|
194
|
+
I0=self.I0_spinner.value(),
|
195
|
+
Sbase=self.Sbase)
|
196
|
+
|
197
|
+
self.accept()
|
198
|
+
|
199
|
+
|
200
|
+
if __name__ == '__main__':
|
201
|
+
import sys
|
202
|
+
from GridCalEngine.Devices.Substation.bus import Bus
|
203
|
+
|
204
|
+
app = QApplication(sys.argv)
|
205
|
+
|
206
|
+
b1 = Bus()
|
207
|
+
b2 = Bus()
|
208
|
+
b3 = Bus()
|
209
|
+
tr3 = Transformer3W(bus1=b1, bus2=b2, bus3=b3)
|
210
|
+
editor = Transformer3WEditor(tr3, 100.0)
|
211
|
+
editor.exec()
|
@@ -21,13 +21,17 @@ from PySide6.QtCore import Qt, QPoint
|
|
21
21
|
from PySide6.QtGui import QPen, QCursor, QColor, QIcon, QPixmap
|
22
22
|
from PySide6.QtWidgets import QGraphicsItem, QGraphicsEllipseItem, QGraphicsRectItem, QMenu, QGraphicsSceneMouseEvent
|
23
23
|
|
24
|
-
from
|
24
|
+
from GridCal.Gui.Diagrams.SchematicWidget.Branches.transformer3w_editor import Transformer3WEditor
|
25
25
|
from GridCal.Gui.Diagrams.generic_graphics import ACTIVE, DEACTIVATED
|
26
26
|
from GridCal.Gui.Diagrams.SchematicWidget.terminal_item import RoundTerminalItem
|
27
27
|
from GridCal.Gui.Diagrams.SchematicWidget.Branches.winding_graphics import WindingGraphicItem
|
28
28
|
from GridCal.Gui.messages import yes_no_question
|
29
|
+
from GridCalEngine.Devices.Branches.transformer3w import Transformer3W
|
30
|
+
from GridCalEngine.enumerations import DeviceType
|
31
|
+
from GridCal.Gui.gui_functions import add_menu_entry
|
29
32
|
|
30
|
-
if TYPE_CHECKING:
|
33
|
+
if TYPE_CHECKING:
|
34
|
+
# Only imports the below statements during type checking
|
31
35
|
from GridCal.Gui.Diagrams.SchematicWidget.schematic_widget import SchematicWidget
|
32
36
|
|
33
37
|
|
@@ -84,11 +88,11 @@ class Transformer3WGraphicItem(QGraphicsRectItem):
|
|
84
88
|
self.color = ACTIVE['color']
|
85
89
|
self.style = ACTIVE['style']
|
86
90
|
|
87
|
-
self.setPen(QPen(Qt.transparent, self.pen_width, self.style))
|
88
|
-
self.setBrush(Qt.transparent)
|
91
|
+
self.setPen(QPen(Qt.GlobalColor.transparent, self.pen_width, self.style))
|
92
|
+
self.setBrush(Qt.GlobalColor.transparent)
|
89
93
|
self.setFlag(QGraphicsItem.GraphicsItemFlag.ItemIsMovable)
|
90
94
|
self.setFlag(QGraphicsItem.GraphicsItemFlag.ItemIsSelectable)
|
91
|
-
self.setCursor(QCursor(Qt.PointingHandCursor))
|
95
|
+
self.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
|
92
96
|
|
93
97
|
# index
|
94
98
|
self.index = index
|
@@ -159,9 +163,11 @@ class Transformer3WGraphicItem(QGraphicsRectItem):
|
|
159
163
|
for i in range(self.n_windings):
|
160
164
|
self.winding_circles[i].setPen(pen)
|
161
165
|
self.terminals[i].setPen(pen)
|
162
|
-
self.connection_lines[i].recolour_mode()
|
163
166
|
|
164
|
-
|
167
|
+
if self.connection_lines[i] is not None:
|
168
|
+
self.connection_lines[i].recolour_mode()
|
169
|
+
|
170
|
+
def set_winding_tool_tips(self) -> None:
|
165
171
|
"""
|
166
172
|
Set
|
167
173
|
:return:
|
@@ -170,7 +176,6 @@ class Transformer3WGraphicItem(QGraphicsRectItem):
|
|
170
176
|
self.winding_circles[0].setToolTip("Winding 1: {0} KV".format(self.api_object.V1))
|
171
177
|
self.winding_circles[1].setToolTip("Winding 2: {0} KV".format(self.api_object.V2))
|
172
178
|
self.winding_circles[2].setToolTip("Winding 3: {0} KV".format(self.api_object.V3))
|
173
|
-
pass
|
174
179
|
|
175
180
|
def set_label(self, val: str):
|
176
181
|
"""
|
@@ -208,6 +213,18 @@ class Transformer3WGraphicItem(QGraphicsRectItem):
|
|
208
213
|
if self.api_object is not None:
|
209
214
|
self.editor.set_editor_model(api_object=self.api_object)
|
210
215
|
|
216
|
+
def mouseDoubleClickEvent(self, event):
|
217
|
+
"""
|
218
|
+
On double click, edit
|
219
|
+
:param event:
|
220
|
+
:return:
|
221
|
+
"""
|
222
|
+
|
223
|
+
if self.api_object is not None:
|
224
|
+
if self.api_object.device_type in [DeviceType.Transformer3WDevice]:
|
225
|
+
# trigger the editor
|
226
|
+
self.edit()
|
227
|
+
|
211
228
|
def contextMenuEvent(self, event):
|
212
229
|
"""
|
213
230
|
Show context menu
|
@@ -220,17 +237,21 @@ class Transformer3WGraphicItem(QGraphicsRectItem):
|
|
220
237
|
|
221
238
|
# menu.addSeparator()
|
222
239
|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
240
|
+
add_menu_entry(menu=menu,
|
241
|
+
text="Edit",
|
242
|
+
function_ptr=self.edit,
|
243
|
+
icon_path=":/Icons/icons/edit.svg")
|
244
|
+
|
245
|
+
add_menu_entry(menu=menu,
|
246
|
+
text="Delete",
|
247
|
+
function_ptr=self.remove,
|
248
|
+
icon_path=":/Icons/icons/delete3.svg")
|
228
249
|
|
229
250
|
menu.exec_(event.screenPos())
|
230
251
|
else:
|
231
252
|
pass
|
232
253
|
|
233
|
-
def add_big_marker(self, color=Qt.red, tool_tip_text=""):
|
254
|
+
def add_big_marker(self, color=Qt.GlobalColor.red, tool_tip_text=""):
|
234
255
|
"""
|
235
256
|
Add a big marker to the bus
|
236
257
|
:param color: Qt Color ot the marker
|
@@ -350,21 +371,21 @@ class Transformer3WGraphicItem(QGraphicsRectItem):
|
|
350
371
|
self.api_object.bus1 = None
|
351
372
|
self.api_object.V1 = 0
|
352
373
|
self.connection_lines[0] = None
|
353
|
-
self.api_object.winding1 = None
|
374
|
+
self.api_object.winding1.bus_to = None
|
354
375
|
self.terminals[0].setZValue(-1)
|
355
376
|
|
356
377
|
elif i == 1:
|
357
378
|
self.api_object.bus2 = None
|
358
379
|
self.api_object.V2 = 0
|
359
380
|
self.connection_lines[1] = None
|
360
|
-
self.api_object.winding2 = None
|
381
|
+
self.api_object.winding2.bus_to = None
|
361
382
|
self.terminals[1].setZValue(-1)
|
362
383
|
|
363
384
|
elif i == 2:
|
364
385
|
self.api_object.bus3 = None
|
365
386
|
self.api_object.V3 = 0
|
366
387
|
self.connection_lines[2] = None
|
367
|
-
self.api_object.winding3 = None
|
388
|
+
self.api_object.winding3.bus_to = None
|
368
389
|
self.terminals[2].setZValue(-1)
|
369
390
|
else:
|
370
391
|
raise Exception('Unsupported winding index {}'.format(i))
|
@@ -417,3 +438,13 @@ class Transformer3WGraphicItem(QGraphicsRectItem):
|
|
417
438
|
if ok:
|
418
439
|
self.delete_all_connections()
|
419
440
|
self.editor.remove_element(device=self.api_object, graphic_object=self)
|
441
|
+
|
442
|
+
def edit(self):
|
443
|
+
"""
|
444
|
+
Open the appropriate editor dialogue
|
445
|
+
:return:
|
446
|
+
"""
|
447
|
+
Sbase = self.editor.circuit.Sbase
|
448
|
+
dlg = Transformer3WEditor(self.api_object, Sbase, modify_on_accept=True)
|
449
|
+
if dlg.exec():
|
450
|
+
pass
|
@@ -51,7 +51,7 @@ class TransformerEditor(QDialog):
|
|
51
51
|
|
52
52
|
self.setObjectName("self")
|
53
53
|
|
54
|
-
self.setContextMenuPolicy(Qt.NoContextMenu)
|
54
|
+
self.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu)
|
55
55
|
|
56
56
|
self.layout = QVBoxLayout(self)
|
57
57
|
|
@@ -250,7 +250,9 @@ class TransformerEditor(QDialog):
|
|
250
250
|
if self.templates is not None:
|
251
251
|
|
252
252
|
idx = self.catalogue_combo.currentIndex()
|
253
|
-
template = self.templates[idx]
|
254
253
|
|
255
|
-
if
|
256
|
-
self.
|
254
|
+
if -1 < idx < len(self.templates):
|
255
|
+
template = self.templates[idx]
|
256
|
+
|
257
|
+
if isinstance(template, TransformerType):
|
258
|
+
self.load_template(template)
|
@@ -677,37 +677,39 @@ class SchematicWidget(BaseDiagramWidget):
|
|
677
677
|
self.add_to_scene(graphic_object=graphic_object)
|
678
678
|
|
679
679
|
bus_1_graphic = self.graphics_manager.query(elm.bus1)
|
680
|
-
bus_2_graphic = self.graphics_manager.query(elm.bus2)
|
681
|
-
bus_3_graphic = self.graphics_manager.query(elm.bus3)
|
682
680
|
|
683
|
-
|
684
|
-
|
685
|
-
|
681
|
+
if bus_1_graphic is not None:
|
682
|
+
conn1 = WindingGraphicItem(from_port=graphic_object.terminals[0],
|
683
|
+
to_port=bus_1_graphic.get_terminal(),
|
684
|
+
editor=self)
|
686
685
|
|
687
|
-
|
686
|
+
graphic_object.set_connection(i=0, bus=elm.bus1, conn=conn1, set_voltage=False)
|
687
|
+
self.add_to_scene(graphic_object=conn1)
|
688
|
+
self.graphics_manager.add_device(elm=elm.winding1, graphic=conn1)
|
688
689
|
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
690
|
+
bus_2_graphic = self.graphics_manager.query(elm.bus2)
|
691
|
+
if bus_2_graphic is not None:
|
692
|
+
conn2 = WindingGraphicItem(from_port=graphic_object.terminals[1],
|
693
|
+
to_port=bus_2_graphic.get_terminal(),
|
694
|
+
editor=self)
|
695
|
+
graphic_object.set_connection(i=1, bus=elm.bus2, conn=conn2, set_voltage=False)
|
696
|
+
self.add_to_scene(graphic_object=conn2)
|
697
|
+
self.graphics_manager.add_device(elm=elm.winding2, graphic=conn2)
|
693
698
|
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
699
|
+
bus_3_graphic = self.graphics_manager.query(elm.bus3)
|
700
|
+
if bus_3_graphic is not None:
|
701
|
+
conn3 = WindingGraphicItem(from_port=graphic_object.terminals[2],
|
702
|
+
to_port=bus_3_graphic.get_terminal(),
|
703
|
+
editor=self)
|
704
|
+
graphic_object.set_connection(i=2, bus=elm.bus3, conn=conn3, set_voltage=False)
|
705
|
+
self.add_to_scene(graphic_object=conn3)
|
706
|
+
self.graphics_manager.add_device(elm=elm.winding3, graphic=conn3)
|
698
707
|
|
699
708
|
graphic_object.set_position(x=location.x, y=location.y)
|
700
709
|
graphic_object.change_size(h=location.h, w=location.w)
|
701
710
|
|
702
|
-
self.add_to_scene(graphic_object=conn1)
|
703
|
-
self.add_to_scene(graphic_object=conn2)
|
704
|
-
self.add_to_scene(graphic_object=conn3)
|
705
|
-
|
706
711
|
graphic_object.update_conn()
|
707
712
|
self.graphics_manager.add_device(elm=elm, graphic=graphic_object)
|
708
|
-
self.graphics_manager.add_device(elm=elm.winding1, graphic=conn1)
|
709
|
-
self.graphics_manager.add_device(elm=elm.winding2, graphic=conn2)
|
710
|
-
self.graphics_manager.add_device(elm=elm.winding3, graphic=conn3)
|
711
713
|
|
712
714
|
# register the windings for the branches pass
|
713
715
|
# windings_dict[elm.winding1.idtag] = conn1
|
@@ -1476,12 +1478,16 @@ class SchematicWidget(BaseDiagramWidget):
|
|
1476
1478
|
|
1477
1479
|
if tr3_graphic_object.connection_lines[i] is None:
|
1478
1480
|
winding = tr3_graphic_object.api_object.get_winding(i)
|
1481
|
+
|
1479
1482
|
winding_graphics = self.create_winding(
|
1480
1483
|
from_port=self.started_branch.get_terminal_from(),
|
1481
1484
|
to_port=self.started_branch.get_terminal_to(),
|
1482
1485
|
api_object=winding
|
1483
1486
|
)
|
1484
1487
|
|
1488
|
+
if winding not in self.circuit.windings:
|
1489
|
+
self.circuit.add_winding(winding)
|
1490
|
+
|
1485
1491
|
tr3_graphic_object.set_connection(i=i,
|
1486
1492
|
bus=bus,
|
1487
1493
|
conn=winding_graphics,
|
@@ -1504,12 +1510,17 @@ class SchematicWidget(BaseDiagramWidget):
|
|
1504
1510
|
)
|
1505
1511
|
|
1506
1512
|
if tr3_graphic_object.connection_lines[i] is None:
|
1513
|
+
|
1507
1514
|
winding = tr3_graphic_object.api_object.get_winding(i)
|
1515
|
+
|
1508
1516
|
winding_graphics = self.create_winding(
|
1509
1517
|
from_port=self.started_branch.get_terminal_from(),
|
1510
1518
|
to_port=self.started_branch.get_terminal_to(),
|
1511
1519
|
api_object=winding)
|
1512
1520
|
|
1521
|
+
if winding not in self.circuit.windings:
|
1522
|
+
self.circuit.add_winding(winding)
|
1523
|
+
|
1513
1524
|
tr3_graphic_object.set_connection(i=i,
|
1514
1525
|
bus=bus,
|
1515
1526
|
conn=winding_graphics,
|