1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2006-2015 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.
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_valPrec, QtCore.SIGNAL("clicked()"),
68 self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
70 self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
72 self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
74 self.connect(self.ui.pb_maillage, QtCore.SIGNAL("clicked()"),
76 self.connect(self.ui.pb_facefiss, QtCore.SIGNAL("clicked()"),
78 self.connect(self.ui.pb_reptrav, QtCore.SIGNAL("clicked()"),
80 self.connect(self.ui.pb_nomres, QtCore.SIGNAL("clicked()"),
82 self.disconnect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"), self.accept)
83 self.connect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"),
89 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
90 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
98 areteFaceFissure = 10,
100 nomres = 'casStandard_fissure.med')
103 def initDialog(self, dico):
104 self.ui.le_maillage.setText(dico['maillageSain'])
105 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
106 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
107 self.ui.dsb_influence.setValue(dico['lgInfluence'])
108 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
109 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
110 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
111 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
112 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
113 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
114 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
115 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
116 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
117 incomplet = self.testval(dico)
120 def testval(self, dico):
122 if not os.path.lexists(dico['maillageSain']):
123 self.ui.le_maillage.setPalette(self.redPalette)
126 self.ui.le_maillage.setPalette(self.blackPalette)
127 if not os.path.lexists(dico['brepFaceFissure']):
128 self.ui.le_facefiss.setPalette(self.redPalette)
131 self.ui.le_facefiss.setPalette(self.blackPalette)
134 l = dico['edgeFissIds']
136 if not isinstance(i, int):
137 print"not isinstance(i, int)"
146 self.ui.le_fondfiss.setPalette(self.blackPalette)
148 self.ui.le_fondfiss.setPalette(self.redPalette)
149 if dico['meshBrep'][0] == 0:
150 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
153 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
154 if dico['meshBrep'][1] == 0:
155 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
158 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
159 if dico['rayonPipe'] == 0:
160 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
163 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
164 if dico['lenSegPipe'] == 0:
165 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
168 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
169 if dico['areteFaceFissure'] == 0:
170 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
173 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
175 print "incomplet: ", incomplet
178 def fileDefault(self):
179 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
183 def writeDefault(self, dico):
184 filedef = self.fileDefault()
185 f = open(filedef, 'w')
189 def readValPrec(self):
190 filedef = self.fileDefault()
191 if os.path.exists(filedef):
192 f = open(filedef, 'r')
196 self.initDialog(dico)
200 self.initDialog(self.defaut)
202 def setLogVerbosity(self, logfile):
203 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
204 print "setLogVerbosity"
205 index = self.ui.cb_log.currentIndex()
208 initLog.setRelease(logfile)
210 initLog.setVerbose(logfile)
212 initLog.setDebug(logfile)
217 fileDiag = QFileDialog(self)
218 fileDiag.setFileMode(QFileDialog.AnyFile)
219 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
220 fileDiag.setViewMode(QFileDialog.List)
221 if fileDiag.exec_() :
222 fileNames = fileDiag.selectedFiles()
223 filedef = fileNames[0]
224 dico = self.creeDico()
225 f = open(filedef, 'w')
231 fileDiag = QFileDialog(self)
232 fileDiag.setFileMode(QFileDialog.ExistingFile)
233 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
234 fileDiag.setViewMode(QFileDialog.Detail)
235 if fileDiag.exec_() :
236 fileNames = fileDiag.selectedFiles()
237 filedef = fileNames[0]
239 if os.path.exists(filedef):
240 f = open(filedef, 'r')
244 self.initDialog(dico)
246 def selectMaillage(self):
247 fileDiag = QFileDialog(self)
248 fileDiag.setFileMode(QFileDialog.ExistingFile)
249 fileDiag.setNameFilter("Maillage *.med (*.med)")
250 fileDiag.setViewMode(QFileDialog.Detail)
251 if fileDiag.exec_() :
252 fileNames = fileDiag.selectedFiles()
253 filedef = fileNames[0]
255 self.ui.le_maillage.setText(filedef)
257 def selectFacefiss(self):
258 fileDiag = QFileDialog(self)
259 fileDiag.setFileMode(QFileDialog.ExistingFile)
260 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
261 fileDiag.setViewMode(QFileDialog.Detail)
262 if fileDiag.exec_() :
263 fileNames = fileDiag.selectedFiles()
264 filedef = fileNames[0]
266 self.ui.le_facefiss.setText(filedef)
268 def selectReptrav(self):
269 fileDiag = QFileDialog(self)
270 fileDiag.setFileMode(QFileDialog.Directory)
271 fileDiag.setViewMode(QFileDialog.Detail)
272 fileDiag.setDirectory(self.ui.le_reptrav.text())
273 if fileDiag.exec_() :
274 fileNames = fileDiag.selectedFiles()
275 reptrav = str(fileNames[0])
276 print "reptrav ", reptrav
277 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
280 def selectNomres(self):
281 fileDiag = QFileDialog(self)
282 fileDiag.setFileMode(QFileDialog.AnyFile)
283 fileDiag.setViewMode(QFileDialog.Detail)
284 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
285 fileDiag.setDirectory(self.ui.le_reptrav.text())
286 fileDiag.selectFile(nomres)
287 fileDiag.setNameFilter("Maillage *.med (*.med)")
288 self.ui.le_nomres.setText(nomres)
289 if fileDiag.exec_() :
290 fileNames = fileDiag.selectedFiles()
291 tempnom = os.path.split(str(fileNames[0]))[1]
292 print "nomres ", tempnom
293 self.ui.le_nomres.setText(tempnom)
295 self.ui.le_nomres.setText(nomres)
299 maillageSain = str(self.ui.le_maillage.text()),
300 brepFaceFissure = str(self.ui.le_facefiss.text()),
301 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
302 lgInfluence = self.ui.dsb_influence.value(),
303 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
304 rayonPipe = self.ui.dsb_rayonPipe.value(),
305 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
306 nbSegRad = self.ui.sb_couronnes.value(),
307 nbSegCercle = self.ui.sb_secteurs.value(),
308 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
309 reptrav = str(self.ui.le_reptrav.text()),
310 nomres = str(self.ui.le_nomres.text()),
311 verbosite = self.ui.cb_log.currentIndex()
316 def checkValues(self):
321 dico = self.creeDico()
322 NOK = self.testval(dico)
324 self.writeDefault(dico)
325 self.ui.lb_calcul.show()
326 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
327 self.setLogVerbosity(logfile)
328 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
329 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
330 from blocFissure.gmu.fissError import fissError
332 execInstance = casStandard(dico)
333 except fissError as erreur:
339 for ligne in erreur.pile:
343 # texte += +"<br>" +'-'*60 +"<br>"
344 # for ligne in erreur.pile:
345 # texte += repr(ligne) +"<br>"
346 mbox = QMessageBox(self)
347 mbox.setWindowTitle("erreur blocFissure")
348 mbox.setText(QString.fromUtf8(texte))
350 # except Exception as erreur:
351 # print "exception non répertoriée"
357 # ----------------------------------------------------------------------------
360 window = fissureGeneraleDialog()
365 result = window.result()
368 print "dialog accepted, check"
369 retry = window.checkValues()
371 print "dialog rejected, exit"