Salome HOME
1741677c27f66643bcb25cd0684fc789e4e9c44b
[modules/smesh.git] / src / Tools / blocFissure / ihm / fissureCoude_plugin.py
1 # -*- coding: utf-8 -*-
2
3 # Copyright (C) 2006-2013  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 from blocFissure import gmu
27 from blocFissure.gmu import initLog
28 #initLog.setDebug()
29 initLog.setVerbose()
30
31 from blocFissure.gmu import geomsmesh
32 from blocFissure.casStandard import casStandard
33
34 from blocFissure.ihm.fissureCoude_ihm import fissureCoude_ihm
35
36 def fissureCoudeDlg(context):
37   # get context study, studyId, salomeGui
38   study = context.study
39   studyId = context.studyId
40   sg = context.sg
41   
42   import os
43   #import subprocess
44   #import tempfile
45   from PyQt4 import QtCore
46   from PyQt4 import QtGui
47   from PyQt4.QtGui import QFileDialog
48   from PyQt4.QtGui import QMessageBox
49   from PyQt4.QtGui import QPalette
50   from PyQt4.QtGui import QColor
51   from fissureCoude_ui import Ui_Dialog
52   
53   class fissureCoudeDialog(QtGui.QDialog):
54     
55     def __init__(self):
56       QtGui.QDialog.__init__(self)
57       # Set up the user interface from Designer.
58       self.ui = Ui_Dialog()
59       self.ui.setupUi(self)
60       
61       self.blackPalette = self.ui.dsb_angle.palette()
62       self.redPalette = QPalette()
63       self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
64       self.NOK = False
65       
66       self.initDefaut()
67       self.initDialog(self.defaut)
68       self.ui.dsb_angle.setSpecialValueText("saisie_obligatoire")
69       self.ui.dsb_rCintr.setSpecialValueText("saisie_obligatoire")
70       self.ui.dsb_lTubeP1.setSpecialValueText("saisie_obligatoire")
71       self.ui.dsb_lTubeP2.setSpecialValueText("saisie_obligatoire")
72       self.ui.dsb_epais.setSpecialValueText("saisie_obligatoire")
73       self.ui.dsb_dext.setSpecialValueText("saisie_obligatoire")
74       self.ui.dsb_profondeur.setSpecialValueText("saisie_obligatoire")
75       self.ui.dsb_longueur.setSpecialValueText("saisie_obligatoire")
76       self.ui.dsb_azimut.setSpecialValueText("saisie_obligatoire")
77       self.ui.dsb_orientation.setSpecialValueText("saisie_obligatoire")
78       self.ui.dsb_posiAngul.setSpecialValueText("saisie_obligatoire")
79       self.ui.dsb_absCurv.setSpecialValueText("saisie_obligatoire")
80       self.ui.sb_nbTranches.setSpecialValueText("saisie_obligatoire")
81       self.ui.sb_nbCouronne.setSpecialValueText("saisie_obligatoire")
82       self.ui.sb_nbSecteur.setSpecialValueText("saisie_obligatoire")
83       self.ui.dsb_aretesFaceFissure.setSpecialValueText("automatique")
84       self.ui.dsb_influence.setSpecialValueText("automatique")
85       self.ui.lb_calcul.hide()
86       
87       # Connect up the buttons.
88       self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
89                    self.readValPrec)
90       self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
91                    self.resetVal)
92       self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
93                    self.recharger)
94       self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
95                    self.sauver)
96       self.disconnect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"), self.accept)
97       self.connect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"),
98                    self.execute)
99     
100     def initDefaut(self):
101       self.defaut = dict(
102         angle             = -181.0,
103         rCintr            = 0.0,
104         lTubeP1           = 0.0,
105         lTubeP2           = 0.0,
106         epais             = 0.0,
107         dext              = 0.0,
108         profondeur        = 0.0,
109         longueur          = 0.0,
110         azimut            = -181.0,
111         orientation       = -1.0,
112         posiAngul         = -181.0,
113         absCurv           = 0.0,
114         nbTranches        = 7,
115         nbCouronnes       = 1,
116         nbSecteurs        = 3,
117         cbOptDiscrSain    = False,
118         cbOptDiscrFiss    = False,
119         rbPosiAngul       = True,
120         rbFissExt         = True,
121         cbForceEllipse    = False,
122         nbAxeTubeP1       = 15,
123         nbAxeTubeP2       = 15,
124         nbAxeCoude        = 10,
125         nbCirconf         = 20,
126         nbEpaisseur       = 3,
127         rayonTore         = 2.0,
128         aretesFaceFissure = 0.0,
129         influence         = 0.0,
130         )
131       
132     def initDialog(self, dico):
133       self.ui.dsb_angle.setValue(dico['angle'])
134       self.ui.dsb_rCintr.setValue(dico['rCintr'])
135       self.ui.dsb_lTubeP1.setValue(dico['lTubeP1'])
136       self.ui.dsb_lTubeP2.setValue(dico['lTubeP2'])
137       self.ui.dsb_epais.setValue(dico['epais'])
138       self.ui.dsb_dext.setValue(dico['dext'])
139       self.ui.dsb_profondeur.setValue(dico['profondeur'])
140       self.ui.dsb_longueur.setValue(dico['longueur'])
141       self.ui.dsb_azimut.setValue(dico['azimut'])
142       self.ui.dsb_orientation.setValue(dico['orientation'])
143       self.ui.dsb_posiAngul.setValue(dico['posiAngul'])
144       self.ui.dsb_absCurv.setValue(dico['absCurv'])
145       self.ui.sb_nbTranches.setValue(dico['nbTranches'])
146       self.ui.sb_nbCouronne.setValue(dico['nbCouronnes'])
147       self.ui.sb_nbSecteur.setValue(dico['nbSecteurs'])
148       self.ui.dsb_aretesFaceFissure.setValue(dico['aretesFaceFissure'])
149       self.ui.dsb_influence.setValue(dico['influence'])
150       self.ui.sb_nbAxeTubeP1.setValue(dico['nbAxeTubeP1'])
151       self.ui.sb_nbAxeTubeP2.setValue(dico['nbAxeTubeP2'])
152       self.ui.sb_nbAxeCoude.setValue(dico['nbAxeCoude'])
153       self.ui.sb_nbCirconf.setValue(dico['nbCirconf'])
154       self.ui.sb_nbEpaisseur.setValue(dico['nbEpaisseur'])
155       self.ui.dsb_rayonTore.setValue(dico['rayonTore'])
156       #self.ui.cb_optDiscrSain.setChecked(False)
157       #self.ui.gb_discrSain.setShown(False)
158       self.ui.cb_optDiscrSain.setChecked(not(dico['cbOptDiscrSain']))
159       self.ui.cb_optDiscrSain.click()
160       self.ui.cb_optDiscrFiss.setChecked(not(dico['cbOptDiscrFiss']))
161       self.ui.cb_optDiscrFiss.click()
162       if dico['rbPosiAngul']:
163         self.ui.dsb_absCurv.setEnabled(False)
164         self.ui.dsb_posiAngul.setEnabled(True)
165         self.ui.rb_posiAngul.setChecked(True)
166         #self.ui.rb_posiAngul.click()
167       else:
168         self.ui.dsb_absCurv.setEnabled(True)
169         self.ui.dsb_posiAngul.setEnabled(False)
170         self.ui.rb_absCurv.setChecked(True)
171         #self.ui.rb_absCurv.click()
172       self.ui.rb_fissExt.setChecked(dico['rbFissExt'])
173       self.ui.cb_forceEllipse.setChecked(dico['cbForceEllipse'])
174       incomplet = self.testval(dico)
175       pass
176     
177     def testval(self, dico):
178       incomplet = False
179       if dico['angle'] < -180.0:
180         self.ui.dsb_angle.setPalette(self.redPalette)
181         incomplet = True
182       else:
183         self.ui.dsb_angle.setPalette(self.blackPalette)
184         
185       if dico['rCintr'] == 0.0:
186         self.ui.dsb_rCintr.setPalette(self.redPalette)
187         incomplet = True
188       else:
189         self.ui.dsb_rCintr.setPalette(self.blackPalette)
190         
191       if dico['lTubeP1'] == 0.0:  
192         self.ui.dsb_lTubeP1.setPalette(self.redPalette)
193         incomplet = True
194       else:
195         self.ui.dsb_lTubeP1.setPalette(self.blackPalette)
196         
197       if dico['lTubeP2'] == 0.0:  
198         self.ui.dsb_lTubeP2.setPalette(self.redPalette)
199         incomplet = True
200       else:
201         self.ui.dsb_lTubeP2.setPalette(self.blackPalette)
202         
203       if dico['epais'] == 0.0:  
204         self.ui.dsb_epais.setPalette(self.redPalette)
205         incomplet = True
206       else:
207         self.ui.dsb_epais.setPalette(self.blackPalette)
208         
209       if dico['dext'] == 0.0:  
210         self.ui.dsb_dext.setPalette(self.redPalette)
211         incomplet = True
212       else:
213         self.ui.dsb_dext.setPalette(self.blackPalette)
214         
215       if dico['profondeur'] == 0.0:  
216         self.ui.dsb_profondeur.setPalette(self.redPalette)
217         incomplet = True
218       else:
219         self.ui.dsb_profondeur.setPalette(self.blackPalette)
220         
221       if dico['longueur'] == 0.0:  
222         self.ui.dsb_longueur.setPalette(self.redPalette)
223         incomplet = True
224       else:
225         self.ui.dsb_longueur.setPalette(self.blackPalette)
226         
227       if dico['azimut'] < -180.0:  
228         self.ui.dsb_azimut.setPalette(self.redPalette)
229         incomplet = True
230       else:
231         self.ui.dsb_azimut.setPalette(self.blackPalette)
232         
233       if dico['orientation'] < 0.0:  
234         self.ui.dsb_orientation.setPalette(self.redPalette)
235         incomplet = True
236       else:
237         self.ui.dsb_orientation.setPalette(self.blackPalette)
238         
239       if dico['posiAngul'] < -180.0 and dico['rbPosiAngul'] == True:  
240         self.ui.dsb_posiAngul.setPalette(self.redPalette)
241         incomplet = True
242       else:
243         self.ui.dsb_posiAngul.setPalette(self.blackPalette)
244         
245       if dico['absCurv'] == 0.0 and dico['rbPosiAngul'] == False:  
246         self.ui.dsb_absCurv.setPalette(self.redPalette)
247         incomplet = True
248       else:
249         self.ui.dsb_absCurv.setPalette(self.blackPalette)
250         
251       if dico['nbTranches'] == 7:  
252         self.ui.sb_nbTranches.setPalette(self.redPalette)
253         incomplet = True
254       else:
255         self.ui.sb_nbTranches.setPalette(self.blackPalette)
256         
257       if dico['nbCouronnes'] == 1:  
258         self.ui.sb_nbCouronne.setPalette(self.redPalette)
259         incomplet = True
260       else:
261         self.ui.sb_nbCouronne.setPalette(self.blackPalette)
262         
263       if dico['nbSecteurs'] == 3:  
264         self.ui.sb_nbSecteur.setPalette(self.redPalette)
265         incomplet = True
266       else:
267         self.ui.sb_nbSecteur.setPalette(self.blackPalette)
268         
269       print "incomplet: ", incomplet
270       return incomplet
271     
272     def fileDefault(self):
273       filedef = os.path.expanduser("~/.config/salome/dialogFissureCoude.dic")
274       print filedef
275       return filedef
276     
277     def writeDefault(self, dico):
278       filedef = self.fileDefault()
279       f = open(filedef, 'w')
280       f.write(str(dico))
281       f.close()
282     
283     def readValPrec(self):
284       filedef = self.fileDefault()
285       if os.path.exists(filedef):
286         f = open(filedef, 'r')
287         txt = f.read()
288         dico = eval(txt)
289         print dico
290         self.initDialog(dico)
291
292     def resetVal(self):
293       #self.initDefaut()
294       self.initDialog(self.defaut)
295       
296     def sauver(self):
297       print "sauver"
298       fileDiag = QFileDialog(self)
299       fileDiag.setFileMode(QFileDialog.AnyFile)
300       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
301       fileDiag.setViewMode(QFileDialog.List)
302       if fileDiag.exec_() :
303         fileNames = fileDiag.selectedFiles()
304         filedef = fileNames[0]
305         dico = self.creeDico()
306         f = open(filedef, 'w')
307         f.write(str(dico))
308         f.close()
309         
310     def recharger(self):
311       print "recharger"
312       fileDiag = QFileDialog(self)
313       fileDiag.setFileMode(QFileDialog.ExistingFile)
314       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
315       fileDiag.setViewMode(QFileDialog.Detail)
316       if fileDiag.exec_() :
317         fileNames = fileDiag.selectedFiles()
318         filedef = fileNames[0]
319         print filedef
320         if os.path.exists(filedef):
321           f = open(filedef, 'r')
322           txt = f.read()
323           dico = eval(txt)
324           print dico
325           self.initDialog(dico)
326          
327     def creeDico(self):
328       dico = dict(
329         angle             = self.ui.dsb_angle.value(),
330         rCintr            = self.ui.dsb_rCintr.value(),
331         lTubeP1           = self.ui.dsb_lTubeP1.value(),
332         lTubeP2           = self.ui.dsb_lTubeP2.value(),
333         epais             = self.ui.dsb_epais.value(),
334         dext              = self.ui.dsb_dext.value(),
335         profondeur        = self.ui.dsb_profondeur.value(),
336         longueur          = self.ui.dsb_longueur.value(),
337         azimut            = self.ui.dsb_azimut.value(),
338         orientation       = self.ui.dsb_orientation.value(),
339         posiAngul         = self.ui.dsb_posiAngul.value(),
340         absCurv           = self.ui.dsb_absCurv.value(),
341         nbTranches        = self.ui.sb_nbTranches.value(),
342         nbCouronnes       = self.ui.sb_nbCouronne.value(),
343         nbSecteurs        = self.ui.sb_nbSecteur.value(),
344         cbOptDiscrSain    = self.ui.cb_optDiscrSain.isChecked(),
345         cbOptDiscrFiss    = self.ui.cb_optDiscrFiss.isChecked(),
346         rbPosiAngul       = self.ui.rb_posiAngul.isChecked(),
347         rbFissExt         = self.ui.rb_fissExt.isChecked(),
348         cbForceEllipse    = self.ui.cb_forceEllipse.isChecked(),
349         nbAxeTubeP1       = self.ui.sb_nbAxeTubeP1.value(),
350         nbAxeTubeP2       = self.ui.sb_nbAxeTubeP2.value(),
351         nbAxeCoude        = self.ui.sb_nbAxeCoude.value(),
352         nbCirconf         = self.ui.sb_nbCirconf.value(),
353         nbEpaisseur       = self.ui.sb_nbEpaisseur.value(),
354         rayonTore         = self.ui.dsb_rayonTore.value(),
355         aretesFaceFissure = self.ui.dsb_aretesFaceFissure.value(),
356         influence         = self.ui.dsb_influence.value(),
357         )
358       print dico
359       return dico
360       
361     def checkValues(self):
362       return self.NOK
363
364     def execute(self):
365       dico = self.creeDico()
366       NOK = self.testval(dico)
367       if not(NOK):
368         dico['lenSegPipe'] = (dico['longueur'] + 3.14*dico['profondeur'])/dico['nbTranches']
369         self.writeDefault(dico)
370         self.ui.lb_calcul.show()
371         probleme = fissureCoude_ihm(0)
372         probleme.setDicoParams(dico)
373         probleme.executeProbleme()
374       self.NOK = NOK
375       self.accept()
376     
377     pass 
378
379 # ----------------------------------------------------------------------------
380                      
381   window = fissureCoudeDialog()
382 #  window.ui.dsb_tolerance.setValue(0.01)
383   retry = True
384   while(retry):
385     retry = False
386     window.exec_()
387     result = window.result()
388     if result:
389       # dialog accepted
390       print "dialog accepted, check"
391       retry = window.checkValues()
392     else:
393       print "dialog rejected, exit"
394   pass
395