load boundary conditions from file

master
Theophile Terraz 2025-09-12 14:22:46 +02:00
parent 7c4c772f43
commit b582e133a1
6 changed files with 110 additions and 16 deletions

View File

@ -211,3 +211,23 @@ class TableModel(PamhyrTableModel):
) )
self.layoutAboutToBeChanged.emit() self.layoutAboutToBeChanged.emit()
self.update() self.update()
def read_from_file(self, file_name, bctype):
logger.debug(f"Import initial conditions from {file_name}")
data0 = []
data1 = []
if bctype == "ZD":
mult = 1
else:
mult = 60
with open(file_name, encoding="utf-8") as ini_file:
for line in ini_file:
if not (line.startswith("#") or
line.startswith("*") or
line.startswith("$")):
line = line.split()
data0.append(float(line[0]) * mult)
data1.append(line[1])
self.replace_data(data0, data1)

View File

@ -30,10 +30,10 @@ from PyQt5.QtGui import (
QKeySequence, QKeySequence,
) )
from PyQt5 import QtCore from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import ( from PyQt5.QtCore import (
Qt, QVariant, QAbstractTableModel, QCoreApplication, Qt, QVariant, QAbstractTableModel, QCoreApplication,
pyqtSlot, pyqtSignal, pyqtSlot, pyqtSignal, QSettings,
) )
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
@ -198,6 +198,8 @@ class EditBoundaryConditionWindow(PamhyrWindow):
self.find(QAction, "action_add").triggered.connect(self.add) self.find(QAction, "action_add").triggered.connect(self.add)
self.find(QAction, "action_del").triggered.connect(self.delete) self.find(QAction, "action_del").triggered.connect(self.delete)
self.find(QAction, "action_sort").triggered.connect(self.sort) self.find(QAction, "action_sort").triggered.connect(self.sort)
self.find(QAction, "action_import").triggered\
.connect(self.import_from_file)
self.find(QAction, "action_generate_uniform").triggered.connect( self.find(QAction, "action_generate_uniform").triggered.connect(
self.generate_uniform self.generate_uniform
) )
@ -293,6 +295,31 @@ class EditBoundaryConditionWindow(PamhyrWindow):
self._table.sort(False) self._table.sort(False)
self.plot.update() self.plot.update()
def import_from_file(self):
options = QFileDialog.Options()
settings = QSettings(QSettings.IniFormat,
QSettings.UserScope, 'MyOrg', )
options |= QFileDialog.DontUseNativeDialog
if self._data.bctype == "TD":
file_types = [self._trad["file_hyd"]]
if self._data.bctype == "TZ":
file_types = [self._trad["file_lim"]]
if self._data.bctype == "ZD":
file_types = [self._trad["file_ava"]]
file_types.append(self._trad["file_all"])
file_name, _ = QtWidgets.QFileDialog.getOpenFileName(
self,
self._trad["open_file"],
"",
";; ".join(file_types),
options=options
)
if file_name != "":
self._table.read_from_file(file_name, self._data.bctype)
def move_up(self): def move_up(self):
row = self.index_selected_row() row = self.index_selected_row()
self._table.move_up(row) self._table.move_up(row)

View File

@ -35,6 +35,17 @@ class BCETranslate(BCTranslate):
self._dict["Boundary Condition Options"] = _translate( self._dict["Boundary Condition Options"] = _translate(
"BoundaryCondition", "Boundary Condition Options") "BoundaryCondition", "Boundary Condition Options")
self._dict["open_file"] = _translate(
"BoundaryCondition", "Open a file")
self._dict["file_hyd"] = _translate(
"BoundaryCondition", "Mage hydrograph file (*.HYD)")
self._dict["file_lim"] = _translate(
"BoundaryCondition", "Mage limnigraph file (*.LIM)")
self._dict["file_lim"] = _translate(
"BoundaryCondition", "Mage rating curve file (*.AVA)")
self._dict["file_all"] = _translate(
"BoundaryCondition", "All files (*)")
self._sub_dict["table_headers"] = { self._sub_dict["table_headers"] = {
"x": _translate("BoundaryCondition", "X"), "x": _translate("BoundaryCondition", "X"),
"y": _translate("BoundaryCondition", "Y"), "y": _translate("BoundaryCondition", "Y"),

View File

@ -297,8 +297,6 @@ class InitialConditionTableModel(PamhyrTableModel):
if int(line[0]) == reach_id: if int(line[0]) == reach_id:
data.append([line[4], line[2], line[3]]) data.append([line[4], line[2], line[3]])
print(data)
self._undo.push( self._undo.push(
ReplaceDataCommand( ReplaceDataCommand(
self._lst, self._lst,

View File

@ -70,6 +70,7 @@
<attribute name="toolBarBreak"> <attribute name="toolBarBreak">
<bool>false</bool> <bool>false</bool>
</attribute> </attribute>
<addaction name="action_import"/>
<addaction name="action_add"/> <addaction name="action_add"/>
<addaction name="action_del"/> <addaction name="action_del"/>
<addaction name="action_sort"/> <addaction name="action_sort"/>
@ -149,6 +150,18 @@
<string>Remove points to make the curve increasing</string> <string>Remove points to make the curve increasing</string>
</property> </property>
</action> </action>
<action name="action_import">
<property name="icon">
<iconset>
<normaloff>ressources/import.png</normaloff>ressources/import.png</iconset>
</property>
<property name="text">
<string>Import</string>
</property>
<property name="toolTip">
<string>Import from file</string>
</property>
</action>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>

View File

@ -192,17 +192,17 @@
<translation>Éditer les conditions aux limites</translation> <translation>Éditer les conditions aux limites</translation>
</message> </message>
<message> <message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="39"/> <location filename="../View/BoundaryCondition/Edit/translate.py" line="50"/>
<source>X</source> <source>X</source>
<translation>X</translation> <translation>X</translation>
</message> </message>
<message> <message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="40"/> <location filename="../View/BoundaryCondition/Edit/translate.py" line="51"/>
<source>Y</source> <source>Y</source>
<translation>Y</translation> <translation>Y</translation>
</message> </message>
<message> <message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="45"/> <location filename="../View/BoundaryCondition/Edit/translate.py" line="56"/>
<source>Solid (kg/s)</source> <source>Solid (kg/s)</source>
<translation>Solide (kg/s)</translation> <translation>Solide (kg/s)</translation>
</message> </message>
@ -242,19 +242,19 @@
<translation>Options des conditions limites</translation> <translation>Options des conditions limites</translation>
</message> </message>
<message> <message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="48"/> <location filename="../View/BoundaryCondition/Edit/translate.py" line="59"/>
<source>No geometry</source> <source>No geometry</source>
<translation>Pas de géométrie</translation> <translation>Pas de géométrie</translation>
</message> </message>
<message> <message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="51"/> <location filename="../View/BoundaryCondition/Edit/translate.py" line="62"/>
<source>No geometry found for this reach. <source>No geometry found for this reach.
This feature requires a reach with a geometry.</source> This feature requires a reach with a geometry.</source>
<translation>Aucune géométrie n&apos;a été trouvée sur ce bief. <translation>Aucune géométrie n&apos;a été trouvée sur ce bief.
Cette fonctionnalité nécessite un bief muni d&apos;une géométrie.</translation> Cette fonctionnalité nécessite un bief muni d&apos;une géométrie.</translation>
</message> </message>
<message> <message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="56"/> <location filename="../View/BoundaryCondition/Edit/translate.py" line="67"/>
<source>Warning</source> <source>Warning</source>
<translation>Avertissement</translation> <translation>Avertissement</translation>
</message> </message>
@ -263,6 +263,31 @@ Cette fonctionnalité nécessite un bief muni d&apos;une géométrie.</translati
<source>Pollutant</source> <source>Pollutant</source>
<translation>Polluant</translation> <translation>Polluant</translation>
</message> </message>
<message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="38"/>
<source>Open a file</source>
<translation>Ouvrir un fichier</translation>
</message>
<message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="40"/>
<source>Mage hydrograph file (*.HYD)</source>
<translation>Hydrogramme Mage (*.HYD)</translation>
</message>
<message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="42"/>
<source>Mage limnigraph file (*.LIM)</source>
<translation>Limnigramme Mage (*.LIM)</translation>
</message>
<message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="44"/>
<source>Mage rating curve file (*.AVA)</source>
<translation>Courbe de tarage Mage (*.AVA)</translation>
</message>
<message>
<location filename="../View/BoundaryCondition/Edit/translate.py" line="46"/>
<source>All files (*)</source>
<translation>Tous les fichiers (*)</translation>
</message>
</context> </context>
<context> <context>
<name>BoundaryConditions</name> <name>BoundaryConditions</name>
@ -2622,32 +2647,32 @@ Cette fonctionnalité nécessite un bief muni d&apos;une géométrie.</translati
<translation>Exporter les données au format CSV</translation> <translation>Exporter les données au format CSV</translation>
</message> </message>
<message> <message>
<location filename="../View/ui/EditBoundaryConditions.ui" line="130"/> <location filename="../View/ui/EditBoundaryConditions.ui" line="131"/>
<source>Generate uniform</source> <source>Generate uniform</source>
<translation>Générer un regime uniforme</translation> <translation>Générer un regime uniforme</translation>
</message> </message>
<message> <message>
<location filename="../View/ui/EditBoundaryConditions.ui" line="133"/> <location filename="../View/ui/EditBoundaryConditions.ui" line="134"/>
<source>Generate rating curve from Manning law</source> <source>Generate rating curve from Manning law</source>
<translation>Générer une courbe de tarage (loi de Maning)</translation> <translation>Générer une courbe de tarage (loi de Maning)</translation>
</message> </message>
<message> <message>
<location filename="../View/ui/EditBoundaryConditions.ui" line="138"/> <location filename="../View/ui/EditBoundaryConditions.ui" line="139"/>
<source>Generate critical</source> <source>Generate critical</source>
<translation>Générer régime critique</translation> <translation>Générer régime critique</translation>
</message> </message>
<message> <message>
<location filename="../View/ui/EditBoundaryConditions.ui" line="141"/> <location filename="../View/ui/EditBoundaryConditions.ui" line="142"/>
<source>Generate rating curve as Q(z) = Sqrt(g*S(z)^3/L(z))</source> <source>Generate rating curve as Q(z) = Sqrt(g*S(z)^3/L(z))</source>
<translation>Générer une courbe de tarage (Q(z) = Sqrt(g*S(z)^3/L(z)))</translation> <translation>Générer une courbe de tarage (Q(z) = Sqrt(g*S(z)^3/L(z)))</translation>
</message> </message>
<message> <message>
<location filename="../View/ui/EditBoundaryConditions.ui" line="146"/> <location filename="../View/ui/EditBoundaryConditions.ui" line="147"/>
<source>Make increasing</source> <source>Make increasing</source>
<translation>Augmenter</translation> <translation>Augmenter</translation>
</message> </message>
<message> <message>
<location filename="../View/ui/EditBoundaryConditions.ui" line="149"/> <location filename="../View/ui/EditBoundaryConditions.ui" line="150"/>
<source>Remove points to make the curve increasing</source> <source>Remove points to make the curve increasing</source>
<translation>Supprimer des points pour rendre la courbe croissante</translation> <translation>Supprimer des points pour rendre la courbe croissante</translation>
</message> </message>