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,
103 nomres = 'casStandard_fissure.med',
107 def initDialog(self, dico):
108 self.ui.le_maillage.setText(dico['maillageSain'])
109 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
110 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
111 self.ui.dsb_influence.setValue(dico['lgInfluence'])
112 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
113 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
114 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
115 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
116 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
117 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
118 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
119 if dico.has_key('aretesVives'):
120 self.ui.dsb_aretesVives.setValue(dico['aretesVives'])
122 self.ui.dsb_aretesVives.setValue(0)
123 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
124 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
125 self.ui.cb_log.setCurrentIndex(dico['verbosite'])
126 incomplet = self.testval(dico)
129 def testval(self, dico):
131 if not os.path.lexists(dico['maillageSain']):
132 self.ui.le_maillage.setPalette(self.redPalette)
135 self.ui.le_maillage.setPalette(self.blackPalette)
136 if not os.path.lexists(dico['brepFaceFissure']):
137 self.ui.le_facefiss.setPalette(self.redPalette)
140 self.ui.le_facefiss.setPalette(self.blackPalette)
143 l = dico['edgeFissIds']
145 if not isinstance(i, int):
146 print"not isinstance(i, int)"
155 self.ui.le_fondfiss.setPalette(self.blackPalette)
157 self.ui.le_fondfiss.setPalette(self.redPalette)
158 if dico['meshBrep'][0] == 0:
159 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
162 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
163 if dico['meshBrep'][1] == 0:
164 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
167 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
168 if dico['rayonPipe'] == 0:
169 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
172 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
173 if dico['lenSegPipe'] == 0:
174 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
177 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
178 if dico['areteFaceFissure'] == 0:
179 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
182 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
184 print "incomplet: ", incomplet
187 def fileDefault(self):
188 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
192 def writeDefault(self, dico):
193 filedef = self.fileDefault()
194 f = open(filedef, 'w')
198 def genereExemples(self):
199 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med')
200 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep")
201 if (os.path.exists(maillageSain) and os.path.exists(brepFaceFissure)):
202 self.initDialog(self.defaut)
204 self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
205 self.ui.lb_calcul.show()
206 from blocFissure.materielCasTests import genereMateriel
207 self.ui.lb_calcul.hide()
208 self.initDialog(self.defaut)
210 def readValPrec(self):
211 filedef = self.fileDefault()
212 if os.path.exists(filedef):
213 f = open(filedef, 'r')
217 self.initDialog(dico)
221 self.initDialog(self.defaut)
223 def setLogVerbosity(self, logfile):
224 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
225 print "setLogVerbosity"
226 index = self.ui.cb_log.currentIndex()
229 initLog.setRelease(logfile)
231 initLog.setVerbose(logfile)
233 initLog.setDebug(logfile)
238 fileDiag = QFileDialog(self)
239 fileDiag.setFileMode(QFileDialog.AnyFile)
240 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
241 fileDiag.setViewMode(QFileDialog.List)
242 if fileDiag.exec_() :
243 fileNames = fileDiag.selectedFiles()
244 filedef = fileNames[0]
245 if filedef[-4:] not in ['.dic']:
247 dico = self.creeDico()
248 f = open(filedef, 'w')
254 fileDiag = QFileDialog(self)
255 fileDiag.setFileMode(QFileDialog.ExistingFile)
256 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
257 fileDiag.setViewMode(QFileDialog.Detail)
258 if fileDiag.exec_() :
259 fileNames = fileDiag.selectedFiles()
260 filedef = fileNames[0]
262 if os.path.exists(filedef):
263 f = open(filedef, 'r')
267 self.initDialog(dico)
269 def selectMaillage(self):
270 fileDiag = QFileDialog(self)
271 fileDiag.setFileMode(QFileDialog.ExistingFile)
272 fileDiag.setNameFilter("Maillage *.med (*.med)")
273 fileDiag.setViewMode(QFileDialog.Detail)
274 if fileDiag.exec_() :
275 fileNames = fileDiag.selectedFiles()
276 filedef = fileNames[0]
278 self.ui.le_maillage.setText(filedef)
280 def selectFacefiss(self):
281 fileDiag = QFileDialog(self)
282 fileDiag.setFileMode(QFileDialog.ExistingFile)
283 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
284 fileDiag.setViewMode(QFileDialog.Detail)
285 if fileDiag.exec_() :
286 fileNames = fileDiag.selectedFiles()
287 filedef = fileNames[0]
289 self.ui.le_facefiss.setText(filedef)
291 def selectReptrav(self):
292 fileDiag = QFileDialog(self)
293 fileDiag.setFileMode(QFileDialog.Directory)
294 fileDiag.setViewMode(QFileDialog.Detail)
295 fileDiag.setDirectory(self.ui.le_reptrav.text())
296 if fileDiag.exec_() :
297 fileNames = fileDiag.selectedFiles()
298 reptrav = str(fileNames[0])
299 print "reptrav ", reptrav
300 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
303 def selectNomres(self):
304 fileDiag = QFileDialog(self)
305 fileDiag.setFileMode(QFileDialog.AnyFile)
306 fileDiag.setViewMode(QFileDialog.Detail)
307 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
308 fileDiag.setDirectory(self.ui.le_reptrav.text())
309 fileDiag.selectFile(nomres)
310 fileDiag.setNameFilter("Maillage *.med (*.med)")
311 self.ui.le_nomres.setText(nomres)
312 if fileDiag.exec_() :
313 fileNames = fileDiag.selectedFiles()
314 tempnom = os.path.split(str(fileNames[0]))[1]
315 print "nomres ", tempnom
316 self.ui.le_nomres.setText(tempnom)
318 self.ui.le_nomres.setText(nomres)
322 maillageSain = str(self.ui.le_maillage.text()),
323 brepFaceFissure = str(self.ui.le_facefiss.text()),
324 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
325 lgInfluence = self.ui.dsb_influence.value(),
326 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
327 rayonPipe = self.ui.dsb_rayonPipe.value(),
328 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
329 nbSegRad = self.ui.sb_couronnes.value(),
330 nbSegCercle = self.ui.sb_secteurs.value(),
331 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
332 aretesVives = self.ui.dsb_aretesVives.value(),
333 reptrav = str(self.ui.le_reptrav.text()),
334 nomres = str(self.ui.le_nomres.text()),
335 verbosite = self.ui.cb_log.currentIndex()
340 def checkValues(self):
345 dico = self.creeDico()
346 NOK = self.testval(dico)
348 self.writeDefault(dico)
349 self.ui.lb_calcul.setText("--- Calcul en cours ---")
350 self.ui.lb_calcul.show()
351 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
352 self.setLogVerbosity(logfile)
353 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
354 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
355 from blocFissure.gmu.fissError import fissError
357 execInstance = casStandard(dico)
358 except fissError as erreur:
364 for ligne in erreur.pile:
368 # texte += +"<br>" +'-'*60 +"<br>"
369 # for ligne in erreur.pile:
370 # texte += repr(ligne) +"<br>"
371 mbox = QMessageBox(self)
372 mbox.setWindowTitle("erreur blocFissure")
373 mbox.setText(QString.fromUtf8(texte))
375 # except Exception as erreur:
376 # print "exception non répertoriée"
378 self.ui.lb_calcul.hide()
383 # ----------------------------------------------------------------------------
386 window = fissureGeneraleDialog()
391 result = window.result()
394 print "dialog accepted, check"
395 retry = window.checkValues()
397 print "dialog rejected, exit"