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 PyQt4 import QtCore
39 from PyQt4 import QtGui
40 from PyQt4.QtGui import QFileDialog
41 from PyQt4.QtGui import QMessageBox
42 from PyQt4.QtGui import QPalette
43 from PyQt4.QtGui import QColor
44 from PyQt4.QtCore import QString
45 from fissureGenerale_ui import Ui_Dialog
47 class fissureGeneraleDialog(QtGui.QDialog):
51 QtGui.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.
66 self.connect(self.ui.pb_exemple, QtCore.SIGNAL("clicked()"),
68 self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
70 self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
72 self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
74 self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
76 self.connect(self.ui.pb_maillage, QtCore.SIGNAL("clicked()"),
78 self.connect(self.ui.pb_facefiss, QtCore.SIGNAL("clicked()"),
80 self.connect(self.ui.pb_reptrav, QtCore.SIGNAL("clicked()"),
82 self.connect(self.ui.pb_nomres, QtCore.SIGNAL("clicked()"),
84 self.disconnect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"), self.accept)
85 self.connect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"),
91 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
92 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
100 areteFaceFissure = 10,
102 nomres = 'casStandard_fissure.med',
106 def initDialog(self, dico):
107 self.ui.le_maillage.setText(dico['maillageSain'])
108 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
109 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
110 self.ui.dsb_influence.setValue(dico['lgInfluence'])
111 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
112 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
113 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
114 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
115 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
116 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
117 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
118 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
119 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
120 self.ui.cb_log.setCurrentIndex(dico['verbosite'])
121 incomplet = self.testval(dico)
124 def testval(self, dico):
126 if not os.path.lexists(dico['maillageSain']):
127 self.ui.le_maillage.setPalette(self.redPalette)
130 self.ui.le_maillage.setPalette(self.blackPalette)
131 if not os.path.lexists(dico['brepFaceFissure']):
132 self.ui.le_facefiss.setPalette(self.redPalette)
135 self.ui.le_facefiss.setPalette(self.blackPalette)
138 l = dico['edgeFissIds']
140 if not isinstance(i, int):
141 print"not isinstance(i, int)"
150 self.ui.le_fondfiss.setPalette(self.blackPalette)
152 self.ui.le_fondfiss.setPalette(self.redPalette)
153 if dico['meshBrep'][0] == 0:
154 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
157 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
158 if dico['meshBrep'][1] == 0:
159 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
162 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
163 if dico['rayonPipe'] == 0:
164 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
167 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
168 if dico['lenSegPipe'] == 0:
169 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
172 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
173 if dico['areteFaceFissure'] == 0:
174 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
177 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
179 print "incomplet: ", incomplet
182 def fileDefault(self):
183 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
187 def writeDefault(self, dico):
188 filedef = self.fileDefault()
189 f = open(filedef, 'w')
193 def genereExemples(self):
194 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med')
195 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep")
196 if (os.path.exists(maillageSain) and os.path.exists(brepFaceFissure)):
197 self.initDialog(self.defaut)
199 self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
200 self.ui.lb_calcul.show()
201 from blocFissure.materielCasTests import genereMateriel
202 self.ui.lb_calcul.hide()
203 self.initDialog(self.defaut)
205 def readValPrec(self):
206 filedef = self.fileDefault()
207 if os.path.exists(filedef):
208 f = open(filedef, 'r')
212 self.initDialog(dico)
216 self.initDialog(self.defaut)
218 def setLogVerbosity(self, logfile):
219 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
220 print "setLogVerbosity"
221 index = self.ui.cb_log.currentIndex()
224 initLog.setRelease(logfile)
226 initLog.setVerbose(logfile)
228 initLog.setDebug(logfile)
233 fileDiag = QFileDialog(self)
234 fileDiag.setFileMode(QFileDialog.AnyFile)
235 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
236 fileDiag.setViewMode(QFileDialog.List)
237 if fileDiag.exec_() :
238 fileNames = fileDiag.selectedFiles()
239 filedef = fileNames[0]
240 if filedef[-4:] not in ['.dic']:
242 dico = self.creeDico()
243 f = open(filedef, 'w')
249 fileDiag = QFileDialog(self)
250 fileDiag.setFileMode(QFileDialog.ExistingFile)
251 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
252 fileDiag.setViewMode(QFileDialog.Detail)
253 if fileDiag.exec_() :
254 fileNames = fileDiag.selectedFiles()
255 filedef = fileNames[0]
257 if os.path.exists(filedef):
258 f = open(filedef, 'r')
262 self.initDialog(dico)
264 def selectMaillage(self):
265 fileDiag = QFileDialog(self)
266 fileDiag.setFileMode(QFileDialog.ExistingFile)
267 fileDiag.setNameFilter("Maillage *.med (*.med)")
268 fileDiag.setViewMode(QFileDialog.Detail)
269 if fileDiag.exec_() :
270 fileNames = fileDiag.selectedFiles()
271 filedef = fileNames[0]
273 self.ui.le_maillage.setText(filedef)
275 def selectFacefiss(self):
276 fileDiag = QFileDialog(self)
277 fileDiag.setFileMode(QFileDialog.ExistingFile)
278 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
279 fileDiag.setViewMode(QFileDialog.Detail)
280 if fileDiag.exec_() :
281 fileNames = fileDiag.selectedFiles()
282 filedef = fileNames[0]
284 self.ui.le_facefiss.setText(filedef)
286 def selectReptrav(self):
287 fileDiag = QFileDialog(self)
288 fileDiag.setFileMode(QFileDialog.Directory)
289 fileDiag.setViewMode(QFileDialog.Detail)
290 fileDiag.setDirectory(self.ui.le_reptrav.text())
291 if fileDiag.exec_() :
292 fileNames = fileDiag.selectedFiles()
293 reptrav = str(fileNames[0])
294 print "reptrav ", reptrav
295 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
298 def selectNomres(self):
299 fileDiag = QFileDialog(self)
300 fileDiag.setFileMode(QFileDialog.AnyFile)
301 fileDiag.setViewMode(QFileDialog.Detail)
302 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
303 fileDiag.setDirectory(self.ui.le_reptrav.text())
304 fileDiag.selectFile(nomres)
305 fileDiag.setNameFilter("Maillage *.med (*.med)")
306 self.ui.le_nomres.setText(nomres)
307 if fileDiag.exec_() :
308 fileNames = fileDiag.selectedFiles()
309 tempnom = os.path.split(str(fileNames[0]))[1]
310 print "nomres ", tempnom
311 self.ui.le_nomres.setText(tempnom)
313 self.ui.le_nomres.setText(nomres)
317 maillageSain = str(self.ui.le_maillage.text()),
318 brepFaceFissure = str(self.ui.le_facefiss.text()),
319 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
320 lgInfluence = self.ui.dsb_influence.value(),
321 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
322 rayonPipe = self.ui.dsb_rayonPipe.value(),
323 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
324 nbSegRad = self.ui.sb_couronnes.value(),
325 nbSegCercle = self.ui.sb_secteurs.value(),
326 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
327 reptrav = str(self.ui.le_reptrav.text()),
328 nomres = str(self.ui.le_nomres.text()),
329 verbosite = self.ui.cb_log.currentIndex()
334 def checkValues(self):
339 dico = self.creeDico()
340 NOK = self.testval(dico)
342 self.writeDefault(dico)
343 self.ui.lb_calcul.setText("--- Calcul en cours ---")
344 self.ui.lb_calcul.show()
345 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
346 self.setLogVerbosity(logfile)
347 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
348 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
349 from blocFissure.gmu.fissError import fissError
351 execInstance = casStandard(dico)
352 except fissError as erreur:
358 for ligne in erreur.pile:
362 # texte += +"<br>" +'-'*60 +"<br>"
363 # for ligne in erreur.pile:
364 # texte += repr(ligne) +"<br>"
365 mbox = QMessageBox(self)
366 mbox.setWindowTitle("erreur blocFissure")
367 mbox.setText(QString.fromUtf8(texte))
369 # except Exception as erreur:
370 # print "exception non répertoriée"
372 self.ui.lb_calcul.hide()
377 # ----------------------------------------------------------------------------
380 window = fissureGeneraleDialog()
385 result = window.result()
388 print "dialog accepted, check"
389 retry = window.checkValues()
391 print "dialog rejected, exit"