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")
85 self.ui.lb_calcul.hide()
87 # Connect up the buttons.
88 self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
90 self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
92 self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
94 self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
96 self.disconnect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"), self.accept)
97 self.connect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"),
100 def initDefaut(self):
117 cbOptDiscrSain = False,
118 cbOptDiscrFiss = False,
121 cbForceEllipse = False,
128 aretesFaceFissure = 0.0,
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()
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)
177 def testval(self, dico):
179 if dico['angle'] < -180.0:
180 self.ui.dsb_angle.setPalette(self.redPalette)
183 self.ui.dsb_angle.setPalette(self.blackPalette)
185 if dico['rCintr'] == 0.0:
186 self.ui.dsb_rCintr.setPalette(self.redPalette)
189 self.ui.dsb_rCintr.setPalette(self.blackPalette)
191 if dico['lTubeP1'] == 0.0:
192 self.ui.dsb_lTubeP1.setPalette(self.redPalette)
195 self.ui.dsb_lTubeP1.setPalette(self.blackPalette)
197 if dico['lTubeP2'] == 0.0:
198 self.ui.dsb_lTubeP2.setPalette(self.redPalette)
201 self.ui.dsb_lTubeP2.setPalette(self.blackPalette)
203 if dico['epais'] == 0.0:
204 self.ui.dsb_epais.setPalette(self.redPalette)
207 self.ui.dsb_epais.setPalette(self.blackPalette)
209 if dico['dext'] == 0.0:
210 self.ui.dsb_dext.setPalette(self.redPalette)
213 self.ui.dsb_dext.setPalette(self.blackPalette)
215 if dico['profondeur'] == 0.0:
216 self.ui.dsb_profondeur.setPalette(self.redPalette)
219 self.ui.dsb_profondeur.setPalette(self.blackPalette)
221 if dico['longueur'] == 0.0:
222 self.ui.dsb_longueur.setPalette(self.redPalette)
225 self.ui.dsb_longueur.setPalette(self.blackPalette)
227 if dico['azimut'] < -180.0:
228 self.ui.dsb_azimut.setPalette(self.redPalette)
231 self.ui.dsb_azimut.setPalette(self.blackPalette)
233 if dico['orientation'] < 0.0:
234 self.ui.dsb_orientation.setPalette(self.redPalette)
237 self.ui.dsb_orientation.setPalette(self.blackPalette)
239 if dico['posiAngul'] < -180.0 and dico['rbPosiAngul'] == True:
240 self.ui.dsb_posiAngul.setPalette(self.redPalette)
243 self.ui.dsb_posiAngul.setPalette(self.blackPalette)
245 if dico['absCurv'] == 0.0 and dico['rbPosiAngul'] == False:
246 self.ui.dsb_absCurv.setPalette(self.redPalette)
249 self.ui.dsb_absCurv.setPalette(self.blackPalette)
251 if dico['nbTranches'] == 7:
252 self.ui.sb_nbTranches.setPalette(self.redPalette)
255 self.ui.sb_nbTranches.setPalette(self.blackPalette)
257 if dico['nbCouronnes'] == 1:
258 self.ui.sb_nbCouronne.setPalette(self.redPalette)
261 self.ui.sb_nbCouronne.setPalette(self.blackPalette)
263 if dico['nbSecteurs'] == 3:
264 self.ui.sb_nbSecteur.setPalette(self.redPalette)
267 self.ui.sb_nbSecteur.setPalette(self.blackPalette)
269 print "incomplet: ", incomplet
272 def fileDefault(self):
273 filedef = os.path.expanduser("~/.config/salome/dialogFissureCoude.dic")
277 def writeDefault(self, dico):
278 filedef = self.fileDefault()
279 f = open(filedef, 'w')
283 def readValPrec(self):
284 filedef = self.fileDefault()
285 if os.path.exists(filedef):
286 f = open(filedef, 'r')
290 self.initDialog(dico)
294 self.initDialog(self.defaut)
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')
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]
320 if os.path.exists(filedef):
321 f = open(filedef, 'r')
325 self.initDialog(dico)
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(),
361 def checkValues(self):
365 dico = self.creeDico()
366 NOK = self.testval(dico)
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()
379 # ----------------------------------------------------------------------------
381 window = fissureCoudeDialog()
382 # window.ui.dsb_tolerance.setValue(0.01)
387 result = window.result()
390 print "dialog accepted, check"
391 retry = window.checkValues()
393 print "dialog rejected, exit"