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_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',
104 def initDialog(self, dico):
105 self.ui.le_maillage.setText(dico['maillageSain'])
106 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
107 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
108 self.ui.dsb_influence.setValue(dico['lgInfluence'])
109 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
110 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
111 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
112 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
113 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
114 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
115 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
116 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
117 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
118 self.ui.cb_log.setCurrentIndex(dico['verbosite'])
119 incomplet = self.testval(dico)
122 def testval(self, dico):
124 if not os.path.lexists(dico['maillageSain']):
125 self.ui.le_maillage.setPalette(self.redPalette)
128 self.ui.le_maillage.setPalette(self.blackPalette)
129 if not os.path.lexists(dico['brepFaceFissure']):
130 self.ui.le_facefiss.setPalette(self.redPalette)
133 self.ui.le_facefiss.setPalette(self.blackPalette)
136 l = dico['edgeFissIds']
138 if not isinstance(i, int):
139 print"not isinstance(i, int)"
148 self.ui.le_fondfiss.setPalette(self.blackPalette)
150 self.ui.le_fondfiss.setPalette(self.redPalette)
151 if dico['meshBrep'][0] == 0:
152 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
155 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
156 if dico['meshBrep'][1] == 0:
157 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
160 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
161 if dico['rayonPipe'] == 0:
162 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
165 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
166 if dico['lenSegPipe'] == 0:
167 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
170 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
171 if dico['areteFaceFissure'] == 0:
172 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
175 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
177 print "incomplet: ", incomplet
180 def fileDefault(self):
181 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
185 def writeDefault(self, dico):
186 filedef = self.fileDefault()
187 f = open(filedef, 'w')
191 def readValPrec(self):
192 filedef = self.fileDefault()
193 if os.path.exists(filedef):
194 f = open(filedef, 'r')
198 self.initDialog(dico)
202 self.initDialog(self.defaut)
204 def setLogVerbosity(self, logfile):
205 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
206 print "setLogVerbosity"
207 index = self.ui.cb_log.currentIndex()
210 initLog.setRelease(logfile)
212 initLog.setVerbose(logfile)
214 initLog.setDebug(logfile)
219 fileDiag = QFileDialog(self)
220 fileDiag.setFileMode(QFileDialog.AnyFile)
221 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
222 fileDiag.setViewMode(QFileDialog.List)
223 if fileDiag.exec_() :
224 fileNames = fileDiag.selectedFiles()
225 filedef = fileNames[0]
226 dico = self.creeDico()
227 f = open(filedef, 'w')
233 fileDiag = QFileDialog(self)
234 fileDiag.setFileMode(QFileDialog.ExistingFile)
235 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
236 fileDiag.setViewMode(QFileDialog.Detail)
237 if fileDiag.exec_() :
238 fileNames = fileDiag.selectedFiles()
239 filedef = fileNames[0]
241 if os.path.exists(filedef):
242 f = open(filedef, 'r')
246 self.initDialog(dico)
248 def selectMaillage(self):
249 fileDiag = QFileDialog(self)
250 fileDiag.setFileMode(QFileDialog.ExistingFile)
251 fileDiag.setNameFilter("Maillage *.med (*.med)")
252 fileDiag.setViewMode(QFileDialog.Detail)
253 if fileDiag.exec_() :
254 fileNames = fileDiag.selectedFiles()
255 filedef = fileNames[0]
257 self.ui.le_maillage.setText(filedef)
259 def selectFacefiss(self):
260 fileDiag = QFileDialog(self)
261 fileDiag.setFileMode(QFileDialog.ExistingFile)
262 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
263 fileDiag.setViewMode(QFileDialog.Detail)
264 if fileDiag.exec_() :
265 fileNames = fileDiag.selectedFiles()
266 filedef = fileNames[0]
268 self.ui.le_facefiss.setText(filedef)
270 def selectReptrav(self):
271 fileDiag = QFileDialog(self)
272 fileDiag.setFileMode(QFileDialog.Directory)
273 fileDiag.setViewMode(QFileDialog.Detail)
274 fileDiag.setDirectory(self.ui.le_reptrav.text())
275 if fileDiag.exec_() :
276 fileNames = fileDiag.selectedFiles()
277 reptrav = str(fileNames[0])
278 print "reptrav ", reptrav
279 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
282 def selectNomres(self):
283 fileDiag = QFileDialog(self)
284 fileDiag.setFileMode(QFileDialog.AnyFile)
285 fileDiag.setViewMode(QFileDialog.Detail)
286 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
287 fileDiag.setDirectory(self.ui.le_reptrav.text())
288 fileDiag.selectFile(nomres)
289 fileDiag.setNameFilter("Maillage *.med (*.med)")
290 self.ui.le_nomres.setText(nomres)
291 if fileDiag.exec_() :
292 fileNames = fileDiag.selectedFiles()
293 tempnom = os.path.split(str(fileNames[0]))[1]
294 print "nomres ", tempnom
295 self.ui.le_nomres.setText(tempnom)
297 self.ui.le_nomres.setText(nomres)
301 maillageSain = str(self.ui.le_maillage.text()),
302 brepFaceFissure = str(self.ui.le_facefiss.text()),
303 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
304 lgInfluence = self.ui.dsb_influence.value(),
305 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
306 rayonPipe = self.ui.dsb_rayonPipe.value(),
307 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
308 nbSegRad = self.ui.sb_couronnes.value(),
309 nbSegCercle = self.ui.sb_secteurs.value(),
310 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
311 reptrav = str(self.ui.le_reptrav.text()),
312 nomres = str(self.ui.le_nomres.text()),
313 verbosite = self.ui.cb_log.currentIndex()
318 def checkValues(self):
323 dico = self.creeDico()
324 NOK = self.testval(dico)
326 self.writeDefault(dico)
327 self.ui.lb_calcul.show()
328 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
329 self.setLogVerbosity(logfile)
330 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
331 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
332 from blocFissure.gmu.fissError import fissError
334 execInstance = casStandard(dico)
335 except fissError as erreur:
341 for ligne in erreur.pile:
345 # texte += +"<br>" +'-'*60 +"<br>"
346 # for ligne in erreur.pile:
347 # texte += repr(ligne) +"<br>"
348 mbox = QMessageBox(self)
349 mbox.setWindowTitle("erreur blocFissure")
350 mbox.setText(QString.fromUtf8(texte))
352 # except Exception as erreur:
353 # print "exception non répertoriée"
359 # ----------------------------------------------------------------------------
362 window = fissureGeneraleDialog()
367 result = window.result()
370 print "dialog accepted, check"
371 retry = window.checkValues()
373 print "dialog rejected, exit"