3 sys.path.append(os.path.join(os.environ['MEDFILE_ROOT_DIR'], 'lib/python2.7/site-packages/med'))
4 hydro_solver_root = os.path.join(os.environ['HYDROSOLVER_ROOT_DIR'], 'lib', 'python2.7', 'site-packages', 'salome', 'salome', 'hydro')
5 sys.path.append(hydro_solver_root)
13 from PyQt5.QtCore import *
14 from PyQt5.QtGui import *
15 from PyQt5.QtWidgets import *
20 salome_gui = libSALOME_Swig.SALOMEGUI_Swig()
22 from generate_interpolz import generate
24 def get_med_groups( file_path ):
25 print "get_med_groups", file_path
27 meshes = MEDLoader.GetMeshNames(file_path)
29 print 'No meshes found'
35 print 'Found mesh:', mesh1
37 groups = list(MEDLoader.GetMeshGroupsNames(file_path, mesh1))
38 print 'Found groups:', groups
40 print 'No groups found'
44 def get_hydro_regions( calc_case_name ):
45 aStudyId = salome.myStudyId
46 doc = HYDROPy.HYDROData_Document.Document( aStudyId )
47 case = doc.FindObjectByName( calc_case_name )
48 if isinstance(case, HYDROPy.HYDROData_CalculationCase):
49 regions = case.GetRegions()
53 regions_names.append( str(rname) )
55 shape_groups = case.GetGeometryGroups()
56 for sg in shape_groups:
58 regions_names.append( sgname )
64 def get_selected_calc_case():
65 ind = SalomePyQt.SalomePyQt.getObjectBrowser().selectionModel().selectedIndexes()
66 aStudyId = salome.myStudyId
67 doc = HYDROPy.HYDROData_Document.Document( aStudyId )
71 case = doc.FindObjectByName( name )
72 if isinstance(case, HYDROPy.HYDROData_CalculationCase):
76 class InterpolzDlg( QDialog ):
77 def __init__(self, parent = None):
78 QDialog.__init__( self, parent )
80 uic.loadUi( p+'/interpolz.ui', self )
81 self.setWindowTitle( 'Generate interpolz script' )
82 SalomePyQt.SalomePyQt.getObjectBrowser().selectionChanged.connect(self.onSelectionChanged)
83 self.btnOutputPath.clicked.connect(self.onOutputFile)
84 self.btnMEDFile.clicked.connect(self.onMEDFile)
85 self.CalcCase.textChanged.connect(self.onCalcCaseChanged)
86 self.MEDFile.textChanged.connect(self.onMEDChanged)
87 self.UndefZ.setRange( -100000, 100000 )
88 self.UndefZ.setValue( -9999 )
89 self.InterpMethod.addItem( "Interpolation at the nearest point" )
90 self.ApplyClose.clicked.connect(self.onApplyClose)
91 self.Apply.clicked.connect(self.onApply)
92 self.Close.clicked.connect(self.onClose)
93 self.Help.clicked.connect(self.onHelp)
95 def onSelectionChanged( self ):
96 calc_case_name = get_selected_calc_case()
97 if calc_case_name is not None:
98 self.CalcCase.setText( calc_case_name )
100 def onOutputFile( self ):
101 caption = "Python file"
103 fname, filt = QFileDialog.getSaveFileName( self, caption, ".", mask )
104 if fname!=None and fname!="":
105 self.OutputPath.setText( fname )
107 def onMEDFile( self ):
110 fname, filt = QFileDialog.getOpenFileName( self, caption, ".", mask )
111 if fname!=None and fname!="":
112 self.MEDFile.setText( fname )
114 def onCalcCaseChanged( self ):
115 self.regions = get_hydro_regions( str(self.CalcCase.text()) )
118 def onMEDChanged( self ):
119 self.med_groups = get_med_groups( str(self.MEDFile.text()) )
120 print self.med_groups
121 n = len( self.med_groups )
122 self.Groups.setRowCount( n )
123 for i in range( 0, n ):
124 if self.Groups.item( i, 0 ) is None:
125 self.Groups.setItem( i, 0, QTableWidgetItem() )
126 self.Groups.setItem( i, 1, QTableWidgetItem() )
127 self.Groups.item( i, 0 ).setText( self.med_groups[i] )
129 cb = QComboBox( self.Groups )
130 for r in self.regions:
132 self.Groups.setCellWidget( i, 1, cb )
134 def onApplyClose( self ):
139 path = str(self.OutputPath.text())
140 calc_case = str(self.CalcCase.text())
141 med_file = str(self.MEDFile.text())
142 med_groups_regions = {}
143 for i in range( 0, self.Groups.rowCount() ):
144 med_group = str( self.Groups.item( i, 0 ).text() )
145 hydro_reg = str( self.Groups.cellWidget( i, 1 ).currentText() )
146 if len(med_group)>0 and len(hydro_reg)>0:
147 med_groups_regions[med_group] = hydro_reg
148 z_undef = self.UndefZ.value()
149 interp = str(self.InterpMethod.currentText())
153 msg = "Please input the output path"
154 elif len(calc_case)==0:
155 msg = "Please choose the calculation case"
156 elif len(med_file)==0:
157 msg = "Please choose the MED file"
158 elif len(med_groups_regions)==0:
159 msg = "Please fill groups table"
161 msg = "Please choose interpolation method"
165 generate( path, calc_case, med_file, med_groups_regions, z_undef, interp )
166 msg = "InterpolZ script is successfully generated"
169 QMessageBox.information( self, "", msg )
175 """Shows help page"""
178 <h2>Interpolz dialog</h2>
180 This dialog is a tool for automation the writing of the script <b>interpolz.py</b>.
182 <h3>Calculation case</h3>
183 The name of the calculation case. It can be filled automatically on the base of selection or can be input by user.
186 The path for the output, i.e. the path of the target script interpolz.
189 The path to MED file where MED groups are extracted.
192 The interpolation method (interpolation at the nearest point and linear interpolation from a triangulation of the cloud of points).
195 The Z value for nodes outside the regions.
198 The table with MED groups and regions names.
200 When the data is input, the user clicks on "Apply" or "Apply and Close" button to perform the script generation.
202 QMessageBox.about(self, self.tr("About boundary conditions dialog"), msg);
205 if __name__=='__main__':