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, salomeGui
37 from PyQt5 import QtCore
38 from PyQt5 import QtWidgets
39 from PyQt5 import QtGui
40 from PyQt5.QtWidgets import QFileDialog
41 from PyQt5.QtWidgets import QMessageBox
42 from PyQt5.QtGui import QPalette
43 from PyQt5.QtGui import QColor
44 from fissureGenerale_ui import Ui_Dialog
46 class fissureGeneraleDialog(QtWidgets.QDialog):
50 QtWidgets.QDialog.__init__(self)
51 # Set up the user interface from Designer.
55 self.blackPalette = self.ui.dsb_influence.palette()
56 self.redPalette = QPalette()
57 self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
61 self.initDialog(self.defaut)
62 self.ui.lb_calcul.hide()
64 # Connect up the buttons.
66 self.ui.pb_exemple.clicked.connect(self.genereExemples)
67 self.ui.pb_valPrec.clicked.connect(self.readValPrec)
68 self.ui.pb_reset.clicked.connect(self.resetVal)
69 self.ui.pb_recharger.clicked.connect(self.recharger)
70 self.ui.pb_sauver.clicked.connect(self.sauver)
71 self.ui.pb_maillage.clicked.connect(self.selectMaillage)
72 self.ui.pb_facefiss.clicked.connect(self.selectFacefiss)
73 self.ui.pb_reptrav.clicked.connect(self.selectReptrav)
74 self.ui.bb_OkCancel.accepted.disconnect(self.accept)
75 self.ui.bb_OkCancel.accepted.connect(self.execute)
80 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
81 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
89 areteFaceFissure = 10,
92 nomres = 'casStandard_fissure.med',
96 def initDialog(self, dico):
97 self.ui.le_maillage.setText(dico['maillageSain'])
98 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
99 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
100 self.ui.dsb_influence.setValue(dico['lgInfluence'])
101 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
102 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
103 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
104 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
105 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
106 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
107 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
108 if dico.has_key('aretesVives'):
109 self.ui.dsb_aretesVives.setValue(dico['aretesVives'])
111 self.ui.dsb_aretesVives.setValue(0)
112 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
113 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
114 self.ui.cb_log.setCurrentIndex(dico['verbosite'])
115 incomplet = self.testval(dico)
118 def testval(self, dico):
120 if not os.path.lexists(dico['maillageSain']):
121 self.ui.le_maillage.setPalette(self.redPalette)
124 self.ui.le_maillage.setPalette(self.blackPalette)
125 if not os.path.lexists(dico['brepFaceFissure']):
126 self.ui.le_facefiss.setPalette(self.redPalette)
129 self.ui.le_facefiss.setPalette(self.blackPalette)
132 l = dico['edgeFissIds']
134 if not isinstance(i, int):
135 print"not isinstance(i, int)"
144 self.ui.le_fondfiss.setPalette(self.blackPalette)
146 self.ui.le_fondfiss.setPalette(self.redPalette)
147 if dico['meshBrep'][0] == 0:
148 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
151 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
152 if dico['meshBrep'][1] == 0:
153 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
156 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
157 if dico['rayonPipe'] == 0:
158 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
161 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
162 if dico['lenSegPipe'] == 0:
163 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
166 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
167 if dico['areteFaceFissure'] == 0:
168 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
171 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
173 print "incomplet: ", incomplet
176 def fileDefault(self):
177 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
181 def writeDefault(self, dico):
182 filedef = self.fileDefault()
183 f = open(filedef, 'w')
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 f = open(filedef, 'r')
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 f = open(filedef, 'w')
244 fileDiag = QFileDialog(self)
245 fileDiag.setFileMode(QFileDialog.ExistingFile)
246 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
247 fileDiag.setViewMode(QFileDialog.Detail)
248 if fileDiag.exec_() :
249 fileNames = fileDiag.selectedFiles()
250 filedef = fileNames[0]
252 if os.path.exists(filedef):
253 f = open(filedef, 'r')
257 self.initDialog(dico)
259 def selectMaillage(self):
260 fileDiag = QFileDialog(self)
261 fileDiag.setFileMode(QFileDialog.ExistingFile)
262 fileDiag.setNameFilter("Maillage *.med (*.med)")
263 fileDiag.setViewMode(QFileDialog.Detail)
264 if fileDiag.exec_() :
265 fileNames = fileDiag.selectedFiles()
266 filedef = fileNames[0]
268 self.ui.le_maillage.setText(filedef)
270 def selectFacefiss(self):
271 fileDiag = QFileDialog(self)
272 fileDiag.setFileMode(QFileDialog.ExistingFile)
273 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
274 fileDiag.setViewMode(QFileDialog.Detail)
275 if fileDiag.exec_() :
276 fileNames = fileDiag.selectedFiles()
277 filedef = fileNames[0]
279 self.ui.le_facefiss.setText(filedef)
281 def selectReptrav(self):
282 fileDiag = QFileDialog(self)
283 fileDiag.setFileMode(QFileDialog.Directory)
284 fileDiag.setViewMode(QFileDialog.Detail)
285 fileDiag.setDirectory(self.ui.le_reptrav.text())
286 if fileDiag.exec_() :
287 fileNames = fileDiag.selectedFiles()
288 reptrav = str(fileNames[0])
289 print "reptrav ", reptrav
290 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
293 def selectNomres(self):
294 fileDiag = QFileDialog(self)
295 fileDiag.setFileMode(QFileDialog.AnyFile)
296 fileDiag.setViewMode(QFileDialog.Detail)
297 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
298 fileDiag.setDirectory(self.ui.le_reptrav.text())
299 fileDiag.selectFile(nomres)
300 fileDiag.setNameFilter("Maillage *.med (*.med)")
301 self.ui.le_nomres.setText(nomres)
302 if fileDiag.exec_() :
303 fileNames = fileDiag.selectedFiles()
304 tempnom = os.path.split(str(fileNames[0]))[1]
305 print "nomres ", tempnom
306 self.ui.le_nomres.setText(tempnom)
308 self.ui.le_nomres.setText(nomres)
312 maillageSain = str(self.ui.le_maillage.text()),
313 brepFaceFissure = str(self.ui.le_facefiss.text()),
314 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
315 lgInfluence = self.ui.dsb_influence.value(),
316 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
317 rayonPipe = self.ui.dsb_rayonPipe.value(),
318 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
319 nbSegRad = self.ui.sb_couronnes.value(),
320 nbSegCercle = self.ui.sb_secteurs.value(),
321 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
322 aretesVives = self.ui.dsb_aretesVives.value(),
323 reptrav = str(self.ui.le_reptrav.text()),
324 nomres = str(self.ui.le_nomres.text()),
325 verbosite = self.ui.cb_log.currentIndex()
330 def checkValues(self):
335 dico = self.creeDico()
336 NOK = self.testval(dico)
338 self.writeDefault(dico)
339 self.ui.lb_calcul.setText("--- Calcul en cours ---")
340 self.ui.lb_calcul.show()
341 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
342 self.setLogVerbosity(logfile)
343 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
344 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
345 from blocFissure.gmu.fissError import fissError
347 execInstance = casStandard(dico)
348 except fissError as erreur:
354 for ligne in erreur.pile:
358 # texte += +"<br>" +'-'*60 +"<br>"
359 # for ligne in erreur.pile:
360 # texte += repr(ligne) +"<br>"
361 mbox = QMessageBox(self)
362 mbox.setWindowTitle("erreur blocFissure")
363 mbox.setText(str(texte))
365 # except Exception as erreur:
366 # print "exception non répertoriée"
368 self.ui.lb_calcul.hide()
373 # ----------------------------------------------------------------------------
376 window = fissureGeneraleDialog()
381 result = window.result()
384 print "dialog accepted, check"
385 retry = window.checkValues()
387 print "dialog rejected, exit"