#logger.setLevel(logging.ERROR)
import HYDROSOLVER_ORB
+
from salome.hydro.interpolz_gui import InterpolzDlg
+from salome.hydro.interpolks_gui import InterpolksDlg
+
from salome.hydro.gui_utils import HSGUIException, wait_cursor, get_and_check_selected_file_path
import salome.hydro.study as hydro_study
from salome.hydro.mascaret.eficas.appli import EficasForMascaretAppli
from salome.hydro.telemac2d.eficas.appli import EficasForTelemac2DAppli
-from salome.hydro.pytel.gui import create_case_pytel, run_selected_case_pytel, edit_selected_case_pytel, generate_job_for_selected_case_pytel
+from salome.hydro.pytel.gui import create_case_pytel, run_selected_case_pytel, edit_selected_case_pytel, generate_job_for_selected_case_pytel
#from salome.hydro.boundary_conditions.eficas.appli import EficasForBoundaryConditionsAppli
from eficasSalome import runEficas
-import BndConditionsDialog
+from BndConditionsDialog import BoundaryConditionsDialog
+from LiquidBoundariesDialog import LiquidBoundariesDialog
+from BreachesDialog import BreachesDialog
+from InitialConditionsDialog import InitialConditionsDialog
################################################
# GUI context class
################################################
class GUIcontext:
- # menus/toolbars/actions IDs
+
+ # --- menus/toolbars/actions IDs
+
HYDRO_MENU_ID = 90
- CREATE_MASCARET_CASE_ID = 941
+ #CREATE_MASCARET_CASE_ID = 941
RUN_MASCARET_ID = 942
- EDIT_MASCARET_CASE_ID = 943
+ #EDIT_MASCARET_CASE_ID = 943
SHOW_LOG_ID = 944
CREATE_TELEMAC2D_CASE_ID = 945
OPEN_SCHEMA_IN_YACS_ID = 950
GENERATE_INTERPOLZ_PY_ID = 957
GEN_TELEMAC2D_PYTHON_ID = 958
GEN_TELEMAC2D_YACS_ID = 959
- DEFINE_CAS_FILE_FR = 960
+ #DEFINE_CAS_FILE_FR = 960
+ GENERATE_INTERPOLKS_PY_ID = 961
+ EDIT_LIQUID_BOUNDARIES_FILE_ID = 962
+ EDIT_BREACHES_FILE_ID = 962
+ EDIT_INITIAL_CONDITIONS_FILE_ID = 963
def __init__( self ):
- # create top-level menu
+ # --- create top-level menu
+
mid = sgPyQt.createMenu( "Hydro", -1, GUIcontext.HYDRO_MENU_ID, sgPyQt.defaultMenuGroup() )
- # create toolbar
+
+ # --- create toolbar
+
tid = sgPyQt.createTool( "Hydro" )
- # create actions and fill menu and toolbar with actions
+
+ # --- create actions and fill menu and toolbar with actions
+
+ a = sgPyQt.createAction( GUIcontext.GENERATE_INTERPOLZ_PY_ID,
+ "Generate interpolZ.py", "Generate interpolZ.py",
+ "Generate interpolation script for altitudes",
+ "generate_interpolz_py.png" )
+ sgPyQt.createMenu( a, mid )
+ sgPyQt.createTool( a, tid )
+
+ a = sgPyQt.createAction( GUIcontext.GENERATE_INTERPOLKS_PY_ID,
+ "Generate interpolKS.py", "Generate interpolKS.py",
+ "Generate interpolation script for bottom friction coefficients",
+ "generate_interpolz_py.png" )
+ sgPyQt.createMenu( a, mid )
+ sgPyQt.createTool( a, tid )
+
+ a = sgPyQt.createSeparator()
+
a = sgPyQt.createAction( GUIcontext.EDIT_BOUNDARY_CONDITIONS_FILE_ID,
"Edit boundary conditions file", "Edit boundary conditions file",
"Create/edit the boundary conditions file for Telemac",
sgPyQt.createMenu( a, mid )
sgPyQt.createTool( a, tid )
+ a = sgPyQt.createAction( GUIcontext.EDIT_LIQUID_BOUNDARIES_FILE_ID,
+ "Edit liquid boundaries file", "Edit liquid boundaries file",
+ "Create/edit the liquid boundaries file for Telemac",
+ "edit_boundary_conditions_file.png" )
+ sgPyQt.createMenu( a, mid )
+ sgPyQt.createTool( a, tid )
- a = sgPyQt.createAction( GUIcontext.CREATE_MASCARET_CASE_ID,
- "Create Mascaret case", "Create Mascaret case",
- "Create a new Mascaret case", "create_case1d.png" )
+ a = sgPyQt.createAction( GUIcontext.EDIT_BREACHES_FILE_ID,
+ "Edit breaches file", "Edit breaches file",
+ "Create/edit the breaches file for Telemac",
+ "edit_boundary_conditions_file.png" )
+ sgPyQt.createMenu( a, mid )
+ sgPyQt.createTool( a, tid )
+
+ a = sgPyQt.createAction( GUIcontext.EDIT_INITIAL_CONDITIONS_FILE_ID,
+ "Edit initial conditions file", "Edit initial conditions file",
+ "Create/edit the initial conditions file for Telemac",
+ "edit_boundary_conditions_file.png" )
sgPyQt.createMenu( a, mid )
sgPyQt.createTool( a, tid )
- a = sgPyQt.createAction( GUIcontext.CREATE_TELEMAC2D_CASE_ID,
- "Create Telemac2D case", "Create Telemac2D case",
- "Create a new Telemac2D case", "create_case2d.png" )
+ a = sgPyQt.createAction( GUIcontext.DEFINE_CAS_FILE_EN,
+ "Edit cas file (English)", "Edit cas file (English)",
+ "Create/edit a .cas file for Telemac (English)",
+ "english.png" )
sgPyQt.createMenu( a, mid )
sgPyQt.createTool( a, tid )
a = sgPyQt.createAction( GUIcontext.CREATE_PYTEL_CASE_ID,
"Create case for Pytel execution", "Create case for Pytel execution",
- "Create a new case for Pytel execution", "create_case_pytel.png" )
-
+ "Create a new case for Pytel execution",
+ "create_case_pytel.png" )
sgPyQt.createMenu( a, mid )
sgPyQt.createTool( a, tid )
- a = sgPyQt.createAction( GUIcontext.EDIT_PYTEL_CASE_ID,
- "Edit case for Pytel execution", "Edit case for Pytel execution",
- "Edit a new case for Pytel execution", "case_pytel.png" )
+ #a = sgPyQt.createAction( GUIcontext.EDIT_PYTEL_CASE_ID,
+ #"Edit case for Pytel execution", "Edit case for Pytel execution",
+ #"Edit a new case for Pytel execution",
+ #"case_pytel.png" )
+ #sgPyQt.createMenu( a, mid )
+ #sgPyQt.createTool( a, tid )
- sgPyQt.createMenu( a, mid )
- sgPyQt.createTool( a, tid )
-
- a = sgPyQt.createSeparator()
-
- a = sgPyQt.createAction( GUIcontext.GENERATE_INTERPOLZ_PY_ID,
- "Generate interpolz.py", "Generate interpolz.py",
- "Generate interpolation script from the template", "generate_interpolz_py.png" )
+ #a = sgPyQt.createAction( GUIcontext.CREATE_MASCARET_CASE_ID,
+ #"Create Mascaret case", "Create Mascaret case",
+ #"Create a new Mascaret case",
+ #"create_case1d.png" )
+ #sgPyQt.createMenu( a, mid )
+ #sgPyQt.createTool( a, tid )
+ a = sgPyQt.createAction( GUIcontext.CREATE_TELEMAC2D_CASE_ID,
+ "Create Telemac2D case", "Create Telemac2D case",
+ "Create a new Telemac2D case",
+ "create_case2d.png" )
sgPyQt.createMenu( a, mid )
sgPyQt.createTool( a, tid )
a = sgPyQt.createSeparator()
- a = sgPyQt.createAction( GUIcontext.DEFINE_CAS_FILE_EN,
- "Edit cas file (English)", "Edit cas file (English)",
- "Create/edit a .cas file for Telemac (English)",
- "english.png" )
- sgPyQt.createMenu( a, mid )
- sgPyQt.createTool( a, tid )
- a = sgPyQt.createSeparator()
- a = sgPyQt.createAction( GUIcontext.DEFINE_CAS_FILE_FR,
- "Edit cas file (French)", "Edit cas file (French)",
- "Create/edit a .cas file for Telemac (French)",
- "francais.png" )
- sgPyQt.createMenu( a, mid )
- sgPyQt.createTool( a, tid )
+ #a = sgPyQt.createAction( GUIcontext.DEFINE_CAS_FILE_FR,
+ #"Edit cas file (French)", "Edit cas file (French)",
+ #"Create/edit a .cas file for Telemac (French)",
+ #"francais.png" )
+ #sgPyQt.createMenu( a, mid )
+ #sgPyQt.createTool( a, tid )
- # the following action are used in context popup
+ # --- the following action are used in context popup
+
sgPyQt.createAction( GUIcontext.RUN_MASCARET_ID, "Compute case", "Compute case",
"Run Mascaret solver to compute the case" )
- sgPyQt.createAction( GUIcontext.EDIT_MASCARET_CASE_ID, "Edit case", "Edit case",
- "Edit the selected Mascaret case" )
+ #sgPyQt.createAction( GUIcontext.EDIT_MASCARET_CASE_ID, "Edit case", "Edit case",
+ #"Edit the selected Mascaret case" )
sgPyQt.createAction( GUIcontext.SHOW_LOG_ID, "Show log", "Show log",
"Show the log for the selected variable" )
sgPyQt.createAction( GUIcontext.DEFINE_CAS_FILE_EN, "Edit .cas file", "Edit .cas file",
"Edit .cas file")
- sgPyQt.createAction( GUIcontext.DEFINE_CAS_FILE_FR, "Edit .cas file (French)", "Edit .cas file (French)",
- "Edit .cas file (French)")
+ #sgPyQt.createAction( GUIcontext.DEFINE_CAS_FILE_FR, "Edit .cas file (French)", "Edit .cas file (French)",
+ #"Edit .cas file (French)")
################################################
sobj = ed.study.FindObjectID(salome.sg.getSelected(0))
selectedType = ed.getTypeId(sobj)
if selectedType == hydro_study.MASCARET_CASE_TYPE_ID:
- popup.addAction(sgPyQt.action(GUIcontext.EDIT_MASCARET_CASE_ID))
+ #popup.addAction(sgPyQt.action(GUIcontext.EDIT_MASCARET_CASE_ID))
popup.addAction(sgPyQt.action(GUIcontext.RUN_MASCARET_ID))
elif selectedType == hydro_study.TELEMAC2D_CASE_TYPE_ID:
popup.addAction(sgPyQt.action(GUIcontext.GEN_TELEMAC2D_PYTHON_ID))
###
def edit_boundary_conditions_file():
desktop = sgPyQt.getDesktop()
- dlg = BndConditionsDialog.BoundaryConditionsDialog(desktop)
+ dlg = BoundaryConditionsDialog(desktop)
+ dlg.exec_()
+
+###
+# Open dialog for liquid boundaries edition
+###
+def edit_liquid_boundaries_file():
+ desktop = sgPyQt.getDesktop()
+ dlg = LiquidBoundariesDialog(desktop)
+ dlg.exec_()
+
+###
+# Open dialog for breaches edition
+###
+def edit_breaches_file():
+ desktop = sgPyQt.getDesktop()
+ dlg = BreachesDialog(desktop)
+ dlg.exec_()
+
+###
+# Open dialog for initial conditions edition
+###
+def edit_initial_conditions_file():
+ desktop = sgPyQt.getDesktop()
+ dlg = InitialConditionsDialog(desktop)
dlg.exec_()
###
dlg = InterpolzDlg(desktop)
dlg.show()
+###
+# Open dialog for interpolks.py script generation
+###
+def generate_interpolks_py():
+ desktop = sgPyQt.getDesktop()
+ dlg = InterpolksDlg(desktop)
+ dlg.show()
+
###
# Open dialog for boundary conditions edition
###
# Commands dictionary
###
dict_command = {
- GUIcontext.CREATE_MASCARET_CASE_ID: create_mascaret_case,
+ #GUIcontext.CREATE_MASCARET_CASE_ID: create_mascaret_case,
GUIcontext.RUN_MASCARET_ID: run_mascaret,
- GUIcontext.EDIT_MASCARET_CASE_ID: edit_mascaret_case,
+ #GUIcontext.EDIT_MASCARET_CASE_ID: edit_mascaret_case,
GUIcontext.SHOW_LOG_ID: show_log,
GUIcontext.CREATE_TELEMAC2D_CASE_ID: create_telemac2d_case,
GUIcontext.GEN_TELEMAC2D_PYTHON_ID: generate_telemac2d_python,
GUIcontext.GENERATE_JOB: generate_job_for_selected_case_pytel,
#GUIcontext.DEFINE_BOUNDARY_CONDITIONS_ID: define_boundary_conditions,
GUIcontext.EDIT_BOUNDARY_CONDITIONS_FILE_ID: edit_boundary_conditions_file,
+ GUIcontext.EDIT_LIQUID_BOUNDARIES_FILE_ID: edit_liquid_boundaries_file,
+ GUIcontext.EDIT_BREACHES_FILE_ID: edit_breaches_file,
+ GUIcontext.EDIT_INITIAL_CONDITIONS_FILE_ID: edit_initial_conditions_file,
+ GUIcontext.GENERATE_INTERPOLKS_PY_ID: generate_interpolks_py,
GUIcontext.GENERATE_INTERPOLZ_PY_ID: generate_interpolz_py,
GUIcontext.DEFINE_CAS_FILE_EN: eficas_for_cas_Telemac2D_en,
- GUIcontext.DEFINE_CAS_FILE_FR: eficas_for_cas_Telemac2D_fr,
+ #GUIcontext.DEFINE_CAS_FILE_FR: eficas_for_cas_Telemac2D_fr,
}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Dialog</class>
+ <widget class="QDialog" name="Dialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>695</width>
+ <height>174</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Dialog</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="0">
+ <widget class="QGroupBox" name="grpPaths">
+ <property name="title">
+ <string>Paths</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="lblOutputPath">
+ <property name="text">
+ <string>Output path:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLineEdit" name="OutputPath"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="lblMEDFile">
+ <property name="text">
+ <string>MED file:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QLineEdit" name="MEDFile"/>
+ </item>
+ <item row="0" column="3">
+ <widget class="QToolButton" name="btnOutputPath">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="QToolButton" name="btnMEDFile">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="1">
+ <widget class="QLabel" name="lblCalcCase">
+ <property name="text">
+ <string>Calculation case:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLineEdit" name="CalcCase"/>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <widget class="QFrame" name="frame">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="ApplyClose">
+ <property name="text">
+ <string>Apply and Close</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Apply">
+ <property name="text">
+ <string>Apply</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Close">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Help">
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+# -*- coding: utf-8 -*-
+
+import sys, os
+import string
+
+hydro_solver_root = os.path.join(os.environ['HYDROSOLVER_ROOT_DIR'], 'lib', 'python2.7', 'site-packages', 'salome', 'salome', 'hydro')
+
+import salome
+salome.salome_init()
+
+import HYDROPy
+from salome.hydrotools.interpolS import assignStrickler
+
+from PyQt5.QtWidgets import QDialog, QFileDialog, QTableWidgetItem, QComboBox, QMessageBox
+from PyQt5 import uic
+
+import SalomePyQt
+import libSALOME_Swig
+salome_gui = libSALOME_Swig.SALOMEGUI_Swig()
+
+
+def get_selected_calc_case():
+ ind = SalomePyQt.SalomePyQt.getObjectBrowser().selectionModel().selectedIndexes()
+ aStudyId = salome.myStudyId
+ doc = HYDROPy.HYDROData_Document.Document( aStudyId )
+ for i in ind:
+ if i.column()==0:
+ name = str(i.data())
+ case = doc.FindObjectByName( name )
+ if isinstance(case, HYDROPy.HYDROData_CalculationCase):
+ return name
+ return None
+
+class InterpolksDlg( QDialog ):
+ def __init__(self, parent = None):
+ QDialog.__init__( self, parent )
+ p = hydro_solver_root
+ uic.loadUi( p+'/interpolks.ui', self )
+ self.setWindowTitle( 'Generate interpolks script' )
+ SalomePyQt.SalomePyQt.getObjectBrowser().selectionChanged.connect(self.onSelectionChanged)
+ self.btnOutputPath.clicked.connect(self.onOutputFile)
+ self.btnMEDFile.clicked.connect(self.onMEDFile)
+ self.CalcCase.textChanged.connect(self.onCalcCaseChanged)
+ self.MEDFile.textChanged.connect(self.onMEDChanged)
+ self.ApplyClose.clicked.connect(self.onApplyClose)
+ self.Apply.clicked.connect(self.onApply)
+ self.Close.clicked.connect(self.onClose)
+ self.Help.clicked.connect(self.onHelp)
+ self.onSelectionChanged()
+
+ def onSelectionChanged( self ):
+ calc_case_name = get_selected_calc_case()
+ if calc_case_name is not None:
+ self.CalcCase.setText( calc_case_name )
+
+ def onOutputFile( self ):
+ caption = "Python file"
+ mask = "*.py"
+ fname, filt = QFileDialog.getSaveFileName( self, caption, ".", mask )
+ if fname!=None and fname!="":
+ if string.split(fname, '.')[-1] != 'py':
+ fname += '.py'
+ self.OutputPath.setText( fname )
+
+ def onMEDFile( self ):
+ caption = "MED file"
+ mask = "*.med"
+ fname, filt = QFileDialog.getOpenFileName( self, caption, ".", mask )
+ if fname!=None and fname!="":
+ self.MEDFile.setText( fname )
+
+ def onCalcCaseChanged( self ):
+ self.onMEDChanged()
+
+ def onMEDChanged( self ):
+ pass
+
+ def onApplyClose( self ):
+ if self.onApply():
+ self.onClose()
+
+ def onApply( self ):
+ path = str(self.OutputPath.text())
+ calc_case = str(self.CalcCase.text())
+ med_file = str(self.MEDFile.text())
+
+ msg = ""
+ if len(path)==0:
+ msg = "Please input the output path"
+ elif len(calc_case)==0:
+ msg = "Please choose the calculation case"
+ elif len(med_file)==0:
+ msg = "Please choose the MED file"
+
+ result = False
+ if len(msg)==0:
+ assignStrickler(calc_case, med_file) #, output_file_name=fichierMaillage_out, verbose=True)
+ msg = "InterpolKs script is successfully generated"
+ result = True
+
+ QMessageBox.information( self, "", msg )
+ return result
+
+ def onClose( self ):
+ self.close()
+
+ """Shows help page"""
+ def onHelp( self ):
+ msg = """
+ <h2>Interpolks dialog</h2>
+
+ This dialog is a tool for automation the writing of the script <b>interpolks.py</b>.
+
+ <h3>Calculation case</h3>
+ The name of the calculation case. It can be filled automatically on the base of selection or can be input by user.
+
+ <h3>Output path</h3>
+ The path for the output, i.e. the path of the target script interpolks.
+
+ <h3>MED file</h3>
+ The path to MED file where MED groups are extracted.
+
+ <h3>Method</h3>
+ The interpolation method (interpolation at the nearest point and linear interpolation from a triangulation of the cloud of points).
+
+ <h3>Undefined Z</h3>
+ The Z value for nodes outside the regions.
+
+ <h3>Table</h3>
+ The table with MED groups and regions names.
+
+ When the data is input, the user clicks on "Apply" or "Apply and Close" button to perform the script generation.
+ """
+ QMessageBox.about(self, self.tr("About boundary conditions dialog"), msg);
+
+
+if __name__=='__main__':
+ dlg = InterpolksDlg()
+ dlg.show()