1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2006-2013 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
26 from blocFissure import gmu
27 from blocFissure.gmu import initLog
31 from blocFissure.gmu import geomsmesh
32 from blocFissure.casStandard import casStandard
34 from blocFissure.ihm.fissureCoude_ihm import fissureCoude_ihm
36 def fissureCoudeDlg(context):
37 # get context study, studyId, salomeGui
39 studyId = context.studyId
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
53 class fissureCoudeDialog(QtGui.QDialog):
56 QtGui.QDialog.__init__(self)
57 # Set up the user interface from Designer.
61 self.blackPalette = self.ui.dsb_angle.palette()
62 self.redPalette = QPalette()
63 self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
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")
86 # Connect up the buttons.
87 self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
89 self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
91 self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
93 self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
95 self.disconnect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"), self.accept)
96 self.connect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"),
116 cbOptDiscrSain = False,
117 cbOptDiscrFiss = False,
120 cbForceEllipse = False,
127 aretesFaceFissure = 0.0,
131 def initDialog(self, dico):
132 self.ui.dsb_angle.setValue(dico['angle'])
133 self.ui.dsb_rCintr.setValue(dico['rCintr'])
134 self.ui.dsb_lTubeP1.setValue(dico['lTubeP1'])
135 self.ui.dsb_lTubeP2.setValue(dico['lTubeP2'])
136 self.ui.dsb_epais.setValue(dico['epais'])
137 self.ui.dsb_dext.setValue(dico['dext'])
138 self.ui.dsb_profondeur.setValue(dico['profondeur'])
139 self.ui.dsb_longueur.setValue(dico['longueur'])
140 self.ui.dsb_azimut.setValue(dico['azimut'])
141 self.ui.dsb_orientation.setValue(dico['orientation'])
142 self.ui.dsb_posiAngul.setValue(dico['posiAngul'])
143 self.ui.dsb_absCurv.setValue(dico['absCurv'])
144 self.ui.sb_nbTranches.setValue(dico['nbTranches'])
145 self.ui.sb_nbCouronne.setValue(dico['nbCouronnes'])
146 self.ui.sb_nbSecteur.setValue(dico['nbSecteurs'])
147 self.ui.dsb_aretesFaceFissure.setValue(dico['aretesFaceFissure'])
148 self.ui.dsb_influence.setValue(dico['influence'])
149 self.ui.sb_nbAxeTubeP1.setValue(dico['nbAxeTubeP1'])
150 self.ui.sb_nbAxeTubeP2.setValue(dico['nbAxeTubeP2'])
151 self.ui.sb_nbAxeCoude.setValue(dico['nbAxeCoude'])
152 self.ui.sb_nbCirconf.setValue(dico['nbCirconf'])
153 self.ui.sb_nbEpaisseur.setValue(dico['nbEpaisseur'])
154 self.ui.dsb_rayonTore.setValue(dico['rayonTore'])
155 #self.ui.cb_optDiscrSain.setChecked(False)
156 #self.ui.gb_discrSain.setShown(False)
157 self.ui.cb_optDiscrSain.setChecked(not(dico['cbOptDiscrSain']))
158 self.ui.cb_optDiscrSain.click()
159 self.ui.cb_optDiscrFiss.setChecked(not(dico['cbOptDiscrFiss']))
160 self.ui.cb_optDiscrFiss.click()
161 if dico['rbPosiAngul']:
162 self.ui.dsb_absCurv.setEnabled(False)
163 self.ui.dsb_posiAngul.setEnabled(True)
164 self.ui.rb_posiAngul.setChecked(True)
165 #self.ui.rb_posiAngul.click()
167 self.ui.dsb_absCurv.setEnabled(True)
168 self.ui.dsb_posiAngul.setEnabled(False)
169 self.ui.rb_absCurv.setChecked(True)
170 #self.ui.rb_absCurv.click()
171 self.ui.rb_fissExt.setChecked(dico['rbFissExt'])
172 self.ui.cb_forceEllipse.setChecked(dico['cbForceEllipse'])
173 incomplet = self.testval(dico)
176 def testval(self, dico):
178 if dico['angle'] < -180.0:
179 self.ui.dsb_angle.setPalette(self.redPalette)
182 self.ui.dsb_angle.setPalette(self.blackPalette)
184 if dico['rCintr'] == 0.0:
185 self.ui.dsb_rCintr.setPalette(self.redPalette)
188 self.ui.dsb_rCintr.setPalette(self.blackPalette)
190 if dico['lTubeP1'] == 0.0:
191 self.ui.dsb_lTubeP1.setPalette(self.redPalette)
194 self.ui.dsb_lTubeP1.setPalette(self.blackPalette)
196 if dico['lTubeP2'] == 0.0:
197 self.ui.dsb_lTubeP2.setPalette(self.redPalette)
200 self.ui.dsb_lTubeP2.setPalette(self.blackPalette)
202 if dico['epais'] == 0.0:
203 self.ui.dsb_epais.setPalette(self.redPalette)
206 self.ui.dsb_epais.setPalette(self.blackPalette)
208 if dico['dext'] == 0.0:
209 self.ui.dsb_dext.setPalette(self.redPalette)
212 self.ui.dsb_dext.setPalette(self.blackPalette)
214 if dico['profondeur'] == 0.0:
215 self.ui.dsb_profondeur.setPalette(self.redPalette)
218 self.ui.dsb_profondeur.setPalette(self.blackPalette)
220 if dico['longueur'] == 0.0:
221 self.ui.dsb_longueur.setPalette(self.redPalette)
224 self.ui.dsb_longueur.setPalette(self.blackPalette)
226 if dico['azimut'] < -180.0:
227 self.ui.dsb_azimut.setPalette(self.redPalette)
230 self.ui.dsb_azimut.setPalette(self.blackPalette)
232 if dico['orientation'] < 0.0:
233 self.ui.dsb_orientation.setPalette(self.redPalette)
236 self.ui.dsb_orientation.setPalette(self.blackPalette)
238 if dico['posiAngul'] < -180.0 and dico['rbPosiAngul'] == True:
239 self.ui.dsb_posiAngul.setPalette(self.redPalette)
242 self.ui.dsb_posiAngul.setPalette(self.blackPalette)
244 if dico['absCurv'] == 0.0 and dico['rbPosiAngul'] == False:
245 self.ui.dsb_absCurv.setPalette(self.redPalette)
248 self.ui.dsb_absCurv.setPalette(self.blackPalette)
250 if dico['nbTranches'] == 7:
251 self.ui.sb_nbTranches.setPalette(self.redPalette)
254 self.ui.sb_nbTranches.setPalette(self.blackPalette)
256 if dico['nbCouronnes'] == 1:
257 self.ui.sb_nbCouronne.setPalette(self.redPalette)
260 self.ui.sb_nbCouronne.setPalette(self.blackPalette)
262 if dico['nbSecteurs'] == 3:
263 self.ui.sb_nbSecteur.setPalette(self.redPalette)
266 self.ui.sb_nbSecteur.setPalette(self.blackPalette)
268 print "incomplet: ", incomplet
271 def fileDefault(self):
272 filedef = os.path.expanduser("~/.config/salome/dialogFissureCoude.dic")
276 def writeDefault(self, dico):
277 filedef = self.fileDefault()
278 f = open(filedef, 'w')
282 def readValPrec(self):
283 filedef = self.fileDefault()
284 if os.path.exists(filedef):
285 f = open(filedef, 'r')
289 self.initDialog(dico)
293 self.initDialog(self.defaut)
297 fileDiag = QFileDialog(self)
298 fileDiag.setFileMode(QFileDialog.AnyFile)
299 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
300 fileDiag.setViewMode(QFileDialog.List)
301 if fileDiag.exec_() :
302 fileNames = fileDiag.selectedFiles()
303 filedef = fileNames[0]
304 dico = self.creeDico()
305 f = open(filedef, 'w')
311 fileDiag = QFileDialog(self)
312 fileDiag.setFileMode(QFileDialog.ExistingFile)
313 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
314 fileDiag.setViewMode(QFileDialog.Detail)
315 if fileDiag.exec_() :
316 fileNames = fileDiag.selectedFiles()
317 filedef = fileNames[0]
319 if os.path.exists(filedef):
320 f = open(filedef, 'r')
324 self.initDialog(dico)
328 angle = self.ui.dsb_angle.value(),
329 rCintr = self.ui.dsb_rCintr.value(),
330 lTubeP1 = self.ui.dsb_lTubeP1.value(),
331 lTubeP2 = self.ui.dsb_lTubeP2.value(),
332 epais = self.ui.dsb_epais.value(),
333 dext = self.ui.dsb_dext.value(),
334 profondeur = self.ui.dsb_profondeur.value(),
335 longueur = self.ui.dsb_longueur.value(),
336 azimut = self.ui.dsb_azimut.value(),
337 orientation = self.ui.dsb_orientation.value(),
338 posiAngul = self.ui.dsb_posiAngul.value(),
339 absCurv = self.ui.dsb_absCurv.value(),
340 nbTranches = self.ui.sb_nbTranches.value(),
341 nbCouronnes = self.ui.sb_nbCouronne.value(),
342 nbSecteurs = self.ui.sb_nbSecteur.value(),
343 cbOptDiscrSain = self.ui.cb_optDiscrSain.isChecked(),
344 cbOptDiscrFiss = self.ui.cb_optDiscrFiss.isChecked(),
345 rbPosiAngul = self.ui.rb_posiAngul.isChecked(),
346 rbFissExt = self.ui.rb_fissExt.isChecked(),
347 cbForceEllipse = self.ui.cb_forceEllipse.isChecked(),
348 nbAxeTubeP1 = self.ui.sb_nbAxeTubeP1.value(),
349 nbAxeTubeP2 = self.ui.sb_nbAxeTubeP2.value(),
350 nbAxeCoude = self.ui.sb_nbAxeCoude.value(),
351 nbCirconf = self.ui.sb_nbCirconf.value(),
352 nbEpaisseur = self.ui.sb_nbEpaisseur.value(),
353 rayonTore = self.ui.dsb_rayonTore.value(),
354 aretesFaceFissure = self.ui.dsb_aretesFaceFissure.value(),
355 influence = self.ui.dsb_influence.value(),
360 def checkValues(self):
364 dico = self.creeDico()
365 NOK = self.testval(dico)
367 dico['lenSegPipe'] = (dico['longueur'] + 3.14*dico['profondeur'])/dico['nbTranches']
368 self.writeDefault(dico)
369 probleme = fissureCoude_ihm(0)
370 probleme.setDicoParams(dico)
371 probleme.executeProbleme()
377 # ----------------------------------------------------------------------------
379 window = fissureCoudeDialog()
380 # window.ui.dsb_tolerance.setValue(0.01)
385 result = window.result()
388 print "dialog accepted, check"
389 retry = window.checkValues()
391 print "dialog rejected, exit"