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 fissureGenerale_ui import Ui_Dialog
46 class fissureGeneraleDialog(QtGui.QDialog):
50 QtGui.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.
65 self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
67 self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
69 self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
71 self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
73 self.connect(self.ui.pb_maillage, QtCore.SIGNAL("clicked()"),
75 self.connect(self.ui.pb_facefiss, QtCore.SIGNAL("clicked()"),
77 self.connect(self.ui.pb_reptrav, QtCore.SIGNAL("clicked()"),
79 self.connect(self.ui.pb_nomres, QtCore.SIGNAL("clicked()"),
81 self.disconnect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"), self.accept)
82 self.connect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"),
88 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
89 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
97 areteFaceFissure = 10,
99 nomres = 'casStandard_fissure.med')
102 def initDialog(self, dico):
103 self.ui.le_maillage.setText(dico['maillageSain'])
104 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
105 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
106 self.ui.dsb_influence.setValue(dico['lgInfluence'])
107 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
108 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
109 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
110 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
111 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
112 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
113 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
114 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
115 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
116 incomplet = self.testval(dico)
119 def testval(self, dico):
121 if not os.path.lexists(dico['maillageSain']):
122 self.ui.le_maillage.setPalette(self.redPalette)
125 self.ui.le_maillage.setPalette(self.blackPalette)
126 if not os.path.lexists(dico['brepFaceFissure']):
127 self.ui.le_facefiss.setPalette(self.redPalette)
130 self.ui.le_facefiss.setPalette(self.blackPalette)
133 l = dico['edgeFissIds']
135 if not isinstance(i, int):
136 print"not isinstance(i, int)"
145 self.ui.le_fondfiss.setPalette(self.blackPalette)
147 self.ui.le_fondfiss.setPalette(self.redPalette)
148 if dico['meshBrep'][0] == 0:
149 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
152 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
153 if dico['meshBrep'][1] == 0:
154 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
157 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
158 if dico['rayonPipe'] == 0:
159 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
162 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
163 if dico['lenSegPipe'] == 0:
164 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
167 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
168 if dico['areteFaceFissure'] == 0:
169 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
172 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
174 print "incomplet: ", incomplet
177 def fileDefault(self):
178 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
182 def writeDefault(self, dico):
183 filedef = self.fileDefault()
184 f = open(filedef, 'w')
188 def readValPrec(self):
189 filedef = self.fileDefault()
190 if os.path.exists(filedef):
191 f = open(filedef, 'r')
195 self.initDialog(dico)
199 self.initDialog(self.defaut)
201 def setLogVerbosity(self, logfile):
202 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
203 print "setLogVerbosity"
204 index = self.ui.cb_log.currentIndex()
207 initLog.setRelease(logfile)
209 initLog.setVerbose(logfile)
211 initLog.setDebug(logfile)
216 fileDiag = QFileDialog(self)
217 fileDiag.setFileMode(QFileDialog.AnyFile)
218 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
219 fileDiag.setViewMode(QFileDialog.List)
220 if fileDiag.exec_() :
221 fileNames = fileDiag.selectedFiles()
222 filedef = fileNames[0]
223 dico = self.creeDico()
224 f = open(filedef, 'w')
230 fileDiag = QFileDialog(self)
231 fileDiag.setFileMode(QFileDialog.ExistingFile)
232 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
233 fileDiag.setViewMode(QFileDialog.Detail)
234 if fileDiag.exec_() :
235 fileNames = fileDiag.selectedFiles()
236 filedef = fileNames[0]
238 if os.path.exists(filedef):
239 f = open(filedef, 'r')
243 self.initDialog(dico)
245 def selectMaillage(self):
246 fileDiag = QFileDialog(self)
247 fileDiag.setFileMode(QFileDialog.ExistingFile)
248 fileDiag.setNameFilter("Maillage *.med (*.med)")
249 fileDiag.setViewMode(QFileDialog.Detail)
250 if fileDiag.exec_() :
251 fileNames = fileDiag.selectedFiles()
252 filedef = fileNames[0]
254 self.ui.le_maillage.setText(filedef)
256 def selectFacefiss(self):
257 fileDiag = QFileDialog(self)
258 fileDiag.setFileMode(QFileDialog.ExistingFile)
259 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
260 fileDiag.setViewMode(QFileDialog.Detail)
261 if fileDiag.exec_() :
262 fileNames = fileDiag.selectedFiles()
263 filedef = fileNames[0]
265 self.ui.le_facefiss.setText(filedef)
267 def selectReptrav(self):
268 fileDiag = QFileDialog(self)
269 fileDiag.setFileMode(QFileDialog.Directory)
270 fileDiag.setViewMode(QFileDialog.Detail)
271 fileDiag.setDirectory(self.ui.le_reptrav.text())
272 if fileDiag.exec_() :
273 fileNames = fileDiag.selectedFiles()
274 reptrav = str(fileNames[0])
275 print "reptrav ", reptrav
276 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
279 def selectNomres(self):
280 fileDiag = QFileDialog(self)
281 fileDiag.setFileMode(QFileDialog.AnyFile)
282 fileDiag.setViewMode(QFileDialog.Detail)
283 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
284 fileDiag.setDirectory(self.ui.le_reptrav.text())
285 fileDiag.selectFile(nomres)
286 fileDiag.setNameFilter("Maillage *.med (*.med)")
287 self.ui.le_nomres.setText(nomres)
288 if fileDiag.exec_() :
289 fileNames = fileDiag.selectedFiles()
290 tempnom = os.path.split(str(fileNames[0]))[1]
291 print "nomres ", tempnom
292 self.ui.le_nomres.setText(tempnom)
294 self.ui.le_nomres.setText(nomres)
298 maillageSain = str(self.ui.le_maillage.text()),
299 brepFaceFissure = str(self.ui.le_facefiss.text()),
300 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
301 lgInfluence = self.ui.dsb_influence.value(),
302 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
303 rayonPipe = self.ui.dsb_rayonPipe.value(),
304 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
305 nbSegRad = self.ui.sb_couronnes.value(),
306 nbSegCercle = self.ui.sb_secteurs.value(),
307 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
308 reptrav = str(self.ui.le_reptrav.text()),
309 nomres = str(self.ui.le_nomres.text()),
314 def checkValues(self):
319 dico = self.creeDico()
320 NOK = self.testval(dico)
322 self.writeDefault(dico)
323 self.ui.lb_calcul.show()
324 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
325 self.setLogVerbosity(logfile)
326 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
327 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
328 execInstance = casStandard(dico)
334 # ----------------------------------------------------------------------------
337 window = fissureGeneraleDialog()
342 result = window.result()
345 print "dialog accepted, check"
346 retry = window.checkValues()
348 print "dialog rejected, exit"