1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2006-2016 EDF R&D
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License, or (at your option) any later version.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 # if you already have plugins defined in a salome_plugins.py file, add this file at the end.
23 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
27 from blocFissure import gmu
29 def fissureGeneraleDlg(context):
30 # get context study, studyId, salomeGui
32 studyId = context.studyId
38 from PyQt5 import QtCore
39 from PyQt5 import QtWidgets
40 from PyQt5 import QtGui
41 from PyQt5.QtWidgets import QFileDialog
42 from PyQt5.QtWidgets import QMessageBox
43 from PyQt5.QtGui import QPalette
44 from PyQt5.QtGui import QColor
45 from blocFissure.ihm.fissureGenerale_ui import Ui_Dialog
47 class fissureGeneraleDialog(QtWidgets.QDialog):
51 QtWidgets.QDialog.__init__(self)
52 # Set up the user interface from Designer.
56 self.blackPalette = self.ui.dsb_influence.palette()
57 self.redPalette = QPalette()
58 self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
62 self.initDialog(self.defaut)
63 self.ui.lb_calcul.hide()
65 # Connect up the buttons.
67 self.ui.pb_exemple.clicked.connect(self.genereExemples)
68 self.ui.pb_valPrec.clicked.connect(self.readValPrec)
69 self.ui.pb_reset.clicked.connect(self.resetVal)
70 self.ui.pb_recharger.clicked.connect(self.recharger)
71 self.ui.pb_sauver.clicked.connect(self.sauver)
72 self.ui.pb_maillage.clicked.connect(self.selectMaillage)
73 self.ui.pb_facefiss.clicked.connect(self.selectFacefiss)
74 self.ui.pb_reptrav.clicked.connect(self.selectReptrav)
75 self.ui.bb_OkCancel.accepted.disconnect(self.accept)
76 self.ui.bb_OkCancel.accepted.connect(self.execute)
81 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
82 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
90 areteFaceFissure = 10,
93 nomres = 'casStandard_fissure.med',
97 def initDialog(self, dico):
98 self.ui.le_maillage.setText(dico['maillageSain'])
99 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
100 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
101 self.ui.dsb_influence.setValue(dico['lgInfluence'])
102 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
103 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
104 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
105 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
106 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
107 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
108 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
109 if 'aretesVives' in dico:
110 self.ui.dsb_aretesVives.setValue(dico['aretesVives'])
112 self.ui.dsb_aretesVives.setValue(0)
113 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
114 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
115 self.ui.cb_log.setCurrentIndex(dico['verbosite'])
116 incomplet = self.testval(dico)
119 def testval(self, dico):
121 if not os.path.lexists(dico['maillageSain']):
122 self.ui.le_maillage.setPalette(self.redPalette)
125 self.ui.le_maillage.setPalette(self.blackPalette)
126 if not os.path.lexists(dico['brepFaceFissure']):
127 self.ui.le_facefiss.setPalette(self.redPalette)
130 self.ui.le_facefiss.setPalette(self.blackPalette)
133 l = dico['edgeFissIds']
135 if not isinstance(i, int):
136 print("not isinstance(i, int)")
145 self.ui.le_fondfiss.setPalette(self.blackPalette)
147 self.ui.le_fondfiss.setPalette(self.redPalette)
148 if dico['meshBrep'][0] == 0:
149 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
152 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
153 if dico['meshBrep'][1] == 0:
154 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
157 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
158 if dico['rayonPipe'] == 0:
159 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
162 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
163 if dico['lenSegPipe'] == 0:
164 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
167 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
168 if dico['areteFaceFissure'] == 0:
169 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
172 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
174 print("incomplet: ", incomplet)
177 def fileDefault(self):
178 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
182 def writeDefault(self, dico):
183 filedef = self.fileDefault()
184 with open(filedef, 'w') as f:
187 def genereExemples(self):
188 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med')
189 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep")
190 if (os.path.exists(maillageSain) and os.path.exists(brepFaceFissure)):
191 self.initDialog(self.defaut)
193 self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
194 self.ui.lb_calcul.show()
195 from blocFissure.materielCasTests import genereMateriel
196 self.ui.lb_calcul.hide()
197 self.initDialog(self.defaut)
199 def readValPrec(self):
200 filedef = self.fileDefault()
201 if os.path.exists(filedef):
202 with open(filedef, 'r') as f:
206 self.initDialog(dico)
210 self.initDialog(self.defaut)
212 def setLogVerbosity(self, logfile):
213 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
214 print("setLogVerbosity")
215 index = self.ui.cb_log.currentIndex()
218 initLog.setRelease(logfile)
220 initLog.setVerbose(logfile)
222 initLog.setDebug(logfile)
227 fileDiag = QFileDialog(self)
228 fileDiag.setFileMode(QFileDialog.AnyFile)
229 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
230 fileDiag.setViewMode(QFileDialog.List)
231 if fileDiag.exec_() :
232 fileNames = fileDiag.selectedFiles()
234 filedef = fileNames[0]
235 if filedef[-4:] not in ['.dic']:
237 dico = self.creeDico()
238 with open(filedef, 'w') as f:
243 fileDiag = QFileDialog(self)
244 fileDiag.setFileMode(QFileDialog.ExistingFile)
245 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
246 fileDiag.setViewMode(QFileDialog.Detail)
247 if fileDiag.exec_() :
248 fileNames = fileDiag.selectedFiles()
249 filedef = fileNames[0]
251 if os.path.exists(filedef):
252 with open(filedef, 'r') as f:
256 self.initDialog(dico)
258 def selectMaillage(self):
259 fileDiag = QFileDialog(self)
260 fileDiag.setFileMode(QFileDialog.ExistingFile)
261 fileDiag.setNameFilter("Maillage *.med (*.med)")
262 fileDiag.setViewMode(QFileDialog.Detail)
263 if fileDiag.exec_() :
264 fileNames = fileDiag.selectedFiles()
265 filedef = fileNames[0]
267 self.ui.le_maillage.setText(filedef)
269 def selectFacefiss(self):
270 fileDiag = QFileDialog(self)
271 fileDiag.setFileMode(QFileDialog.ExistingFile)
272 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
273 fileDiag.setViewMode(QFileDialog.Detail)
274 if fileDiag.exec_() :
275 fileNames = fileDiag.selectedFiles()
276 filedef = fileNames[0]
278 self.ui.le_facefiss.setText(filedef)
280 def selectReptrav(self):
281 fileDiag = QFileDialog(self)
282 fileDiag.setFileMode(QFileDialog.Directory)
283 fileDiag.setViewMode(QFileDialog.Detail)
284 fileDiag.setDirectory(self.ui.le_reptrav.text())
285 if fileDiag.exec_() :
286 fileNames = fileDiag.selectedFiles()
287 reptrav = str(fileNames[0])
288 print("reptrav ", reptrav)
289 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
292 def selectNomres(self):
293 fileDiag = QFileDialog(self)
294 fileDiag.setFileMode(QFileDialog.AnyFile)
295 fileDiag.setViewMode(QFileDialog.Detail)
296 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
297 fileDiag.setDirectory(self.ui.le_reptrav.text())
298 fileDiag.selectFile(nomres)
299 fileDiag.setNameFilter("Maillage *.med (*.med)")
300 self.ui.le_nomres.setText(nomres)
301 if fileDiag.exec_() :
302 fileNames = fileDiag.selectedFiles()
303 tempnom = os.path.split(str(fileNames[0]))[1]
304 print("nomres ", tempnom)
305 self.ui.le_nomres.setText(tempnom)
307 self.ui.le_nomres.setText(nomres)
311 maillageSain = str(self.ui.le_maillage.text()),
312 brepFaceFissure = str(self.ui.le_facefiss.text()),
313 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
314 lgInfluence = self.ui.dsb_influence.value(),
315 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
316 rayonPipe = self.ui.dsb_rayonPipe.value(),
317 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
318 nbSegRad = self.ui.sb_couronnes.value(),
319 nbSegCercle = self.ui.sb_secteurs.value(),
320 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
321 aretesVives = self.ui.dsb_aretesVives.value(),
322 reptrav = str(self.ui.le_reptrav.text()),
323 nomres = str(self.ui.le_nomres.text()),
324 verbosite = self.ui.cb_log.currentIndex()
329 def checkValues(self):
334 dico = self.creeDico()
335 NOK = self.testval(dico)
337 self.writeDefault(dico)
338 self.ui.lb_calcul.setText("--- Calcul en cours ---")
339 self.ui.lb_calcul.show()
340 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
341 self.setLogVerbosity(logfile)
342 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
343 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
344 from blocFissure.gmu.fissError import fissError
346 execInstance = casStandard(dico)
347 except fissError as erreur:
353 for ligne in erreur.pile:
357 # texte += +"<br>" +'-'*60 +"<br>"
358 # for ligne in erreur.pile:
359 # texte += repr(ligne) +"<br>"
360 mbox = QMessageBox(self)
361 mbox.setWindowTitle("erreur blocFissure")
362 mbox.setText(str(texte))
364 # except Exception as erreur:
365 # print "exception non répertoriée"
367 self.ui.lb_calcul.hide()
372 # ----------------------------------------------------------------------------
375 window = fissureGeneraleDialog()
380 result = window.result()
383 print("dialog accepted, check")
384 retry = window.checkValues()
386 print("dialog rejected, exit")