Salome HOME
set log verbosity, general crack dialog
[modules/smesh.git] / src / Tools / blocFissure / ihm / fissureGenerale_plugin.py
1 # -*- coding: utf-8 -*-
2
3 # Copyright (C) 2006-2015  EDF R&D
4 #
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.
9 #
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.
14 #
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
18 #
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #
21
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
24
25 import sys, traceback
26 import math
27 from blocFissure import gmu
28
29 def fissureGeneraleDlg(context):
30   # get context study, studyId, salomeGui
31   study = context.study
32   studyId = context.studyId
33   sg = context.sg
34   
35   import os
36   #import subprocess
37   #import tempfile
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
45   
46   class fissureGeneraleDialog(QtGui.QDialog):
47     
48     def __init__(self):
49       print "__init__"
50       QtGui.QDialog.__init__(self)
51       # Set up the user interface from Designer.
52       self.ui = Ui_Dialog()
53       self.ui.setupUi(self)
54       
55       self.blackPalette = self.ui.dsb_influence.palette()
56       self.redPalette = QPalette()
57       self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
58       self.NOK = False
59       
60       self.initDefaut()
61       self.initDialog(self.defaut)
62       self.ui.lb_calcul.hide()
63       
64       # Connect up the buttons.
65       self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
66                    self.readValPrec)
67       self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
68                    self.resetVal)
69       self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
70                    self.recharger)
71       self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
72                    self.sauver)
73       self.connect(self.ui.pb_maillage, QtCore.SIGNAL("clicked()"),
74                    self.selectMaillage)
75       self.connect(self.ui.pb_facefiss, QtCore.SIGNAL("clicked()"),
76                    self.selectFacefiss)
77       self.disconnect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"), self.accept)
78       self.connect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"),
79                    self.execute)
80     
81     def initDefaut(self):
82       self.defaut = dict(
83         nomCas            = 'angleCube',
84         maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
85         brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
86         edgeFissIds       = [4],
87         lgInfluence       = 20,
88         meshBrep          = (5,10),
89         rayonPipe         = 5,
90         lenSegPipe        = 2.5,
91         nbSegRad          = 5,
92         nbSegCercle       = 32,
93         areteFaceFissure  = 10)
94
95       
96     def initDialog(self, dico):
97       self.ui.le_maillage.setText(dico['maillageSain'])
98       self.ui.le_facefiss.setText(dico['brepFaceFissure'])
99       self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
100       self.ui.dsb_influence.setValue(dico['lgInfluence'])
101       self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
102       self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
103       self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
104       self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
105       self.ui.sb_couronnes.setValue(dico['nbSegRad'])
106       self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
107       self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
108       incomplet = self.testval(dico)
109       pass
110   
111     def testval(self, dico):
112       incomplet = False
113       if not os.path.lexists(dico['maillageSain']):
114         self.ui.le_maillage.setPalette(self.redPalette)
115         incomplet = True
116       else:
117         self.ui.le_maillage.setPalette(self.blackPalette)
118       if not os.path.lexists(dico['brepFaceFissure']):
119         self.ui.le_facefiss.setPalette(self.redPalette)
120         incomplet = True
121       else:
122         self.ui.le_facefiss.setPalette(self.blackPalette)
123       edgeFissIdsOK=True
124       try:
125         l = dico['edgeFissIds']
126         for i in l:
127           if not isinstance(i, int):
128             print"not isinstance(i, int)"
129             incomplet = True
130             edgeFissIdsOK=False
131             break
132       except:
133         print "except eval"
134         incomplet = True
135         edgeFissIdsOK=False
136       if edgeFissIdsOK:
137         self.ui.le_fondfiss.setPalette(self.blackPalette)
138       else:
139         self.ui.le_fondfiss.setPalette(self.redPalette)
140       if dico['meshBrep'][0] == 0:
141         self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
142         incomplet = True
143       else:
144         self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
145       if dico['meshBrep'][1] == 0:
146         self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
147         incomplet = True
148       else:
149         self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
150       if dico['rayonPipe'] == 0:
151         self.ui.dsb_rayonPipe.setPalette(self.redPalette)
152         incomplet = True
153       else:
154         self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
155       if dico['lenSegPipe'] == 0:
156         self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
157         incomplet = True
158       else:
159         self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
160       if dico['areteFaceFissure'] == 0:
161         self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
162         incomplet = True
163       else:
164         self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
165     
166       print "incomplet: ", incomplet
167       return incomplet
168     
169     def fileDefault(self):
170       filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
171       print filedef
172       return filedef
173     
174     def writeDefault(self, dico):
175       filedef = self.fileDefault()
176       f = open(filedef, 'w')
177       f.write(str(dico))
178       f.close()
179     
180     def readValPrec(self):
181       filedef = self.fileDefault()
182       if os.path.exists(filedef):
183         f = open(filedef, 'r')
184         txt = f.read()
185         dico = eval(txt)
186         print dico
187         self.initDialog(dico)
188
189     def resetVal(self):
190       #self.initDefaut()
191       self.initDialog(self.defaut)
192       
193     def setLogVerbosity(self):
194       from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
195       print "setLogVerbosity"
196       index = self.ui.cb_log.currentIndex()
197       print index
198       if index == 0:
199         initLog.setRelease()
200       elif index == 1:
201         initLog.setVerbose()
202       elif index == 2:
203         initLog.setDebug()
204       
205       
206     def sauver(self):
207       print "sauver"
208       fileDiag = QFileDialog(self)
209       fileDiag.setFileMode(QFileDialog.AnyFile)
210       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
211       fileDiag.setViewMode(QFileDialog.List)
212       if fileDiag.exec_() :
213         fileNames = fileDiag.selectedFiles()
214         filedef = fileNames[0]
215         dico = self.creeDico()
216         f = open(filedef, 'w')
217         f.write(str(dico))
218         f.close()
219         
220     def recharger(self):
221       print "recharger"
222       fileDiag = QFileDialog(self)
223       fileDiag.setFileMode(QFileDialog.ExistingFile)
224       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
225       fileDiag.setViewMode(QFileDialog.Detail)
226       if fileDiag.exec_() :
227         fileNames = fileDiag.selectedFiles()
228         filedef = fileNames[0]
229         print filedef
230         if os.path.exists(filedef):
231           f = open(filedef, 'r')
232           txt = f.read()
233           dico = eval(txt)
234           print dico
235           self.initDialog(dico)
236           
237     def selectMaillage(self):
238       fileDiag = QFileDialog(self)
239       fileDiag.setFileMode(QFileDialog.ExistingFile)
240       fileDiag.setNameFilter("Maillage *.med (*.med)")
241       fileDiag.setViewMode(QFileDialog.Detail)
242       if fileDiag.exec_() :
243         fileNames = fileDiag.selectedFiles()
244         filedef = fileNames[0]
245         print filedef
246         self.ui.le_maillage.setText(filedef)
247          
248     def selectFacefiss(self):
249       fileDiag = QFileDialog(self)
250       fileDiag.setFileMode(QFileDialog.ExistingFile)
251       fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
252       fileDiag.setViewMode(QFileDialog.Detail)
253       if fileDiag.exec_() :
254         fileNames = fileDiag.selectedFiles()
255         filedef = fileNames[0]
256         print filedef
257         self.ui.le_facefiss.setText(filedef)
258          
259     def creeDico(self):
260       dico = dict(
261                   maillageSain     = str(self.ui.le_maillage.text()),
262                   brepFaceFissure  = str(self.ui.le_facefiss.text()),
263                   edgeFissIds      = eval(str(self.ui.le_fondfiss.text())),
264                   lgInfluence      = self.ui.dsb_influence.value(),
265                   meshBrep         = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
266                   rayonPipe        = self.ui.dsb_rayonPipe.value(),
267                   lenSegPipe       = self.ui.dsb_lenSegPipe.value(),
268                   nbSegRad         = self.ui.sb_couronnes.value(),
269                   nbSegCercle      = self.ui.sb_secteurs.value(),
270                   areteFaceFissure = self.ui.dsb_areteFaceFissure.value()
271                   )
272       print dico
273       return dico
274       
275     def checkValues(self):
276       return self.NOK
277
278     def execute(self):
279       print "execute"
280       dico = self.creeDico()
281       NOK = self.testval(dico)
282       if not(NOK):
283         self.writeDefault(dico)
284         self.ui.lb_calcul.show()
285         self.setLogVerbosity()
286         from blocFissure.gmu import geomsmesh               # après intialisation log dans setLogVerbosity
287         from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
288         execInstance = casStandard(dico)
289       self.NOK = NOK
290       self.accept()
291     
292     pass 
293
294 # ----------------------------------------------------------------------------
295   
296   print "main"                   
297   window = fissureGeneraleDialog()
298   retry = True
299   while(retry):
300     retry = False
301     window.exec_()
302     result = window.result()
303     if result:
304       # dialog accepted
305       print "dialog accepted, check"
306       retry = window.checkValues()
307     else:
308       print "dialog rejected, exit"
309   pass
310