1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2006-2016 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, or (at your option) any later version.
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 fissureCoudeDlg(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 fissureCoude_ui import Ui_Dialog
46 class fissureCoudeDialog(QtGui.QDialog):
49 QtGui.QDialog.__init__(self)
50 # Set up the user interface from Designer.
54 self.blackPalette = self.ui.dsb_angle.palette()
55 self.redPalette = QPalette()
56 self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
60 self.initDialog(self.defaut)
61 self.ui.dsb_angle.setSpecialValueText("saisie_obligatoire")
62 self.ui.dsb_rCintr.setSpecialValueText("saisie_obligatoire")
63 self.ui.dsb_lTubeP1.setSpecialValueText("saisie_obligatoire")
64 self.ui.dsb_lTubeP2.setSpecialValueText("saisie_obligatoire")
65 self.ui.dsb_epais.setSpecialValueText("saisie_obligatoire")
66 self.ui.dsb_dext.setSpecialValueText("saisie_obligatoire")
67 self.ui.dsb_profondeur.setSpecialValueText("saisie_obligatoire")
68 self.ui.dsb_longueur.setSpecialValueText("saisie_obligatoire")
69 self.ui.dsb_azimut.setSpecialValueText("saisie_obligatoire")
70 self.ui.dsb_orientation.setSpecialValueText("saisie_obligatoire")
71 self.ui.dsb_posiAngul.setSpecialValueText("saisie_obligatoire")
72 self.ui.dsb_absCurv.setSpecialValueText("saisie_obligatoire")
73 self.ui.sb_nbTranches.setSpecialValueText("saisie_obligatoire")
74 self.ui.sb_nbCouronne.setSpecialValueText("saisie_obligatoire")
75 self.ui.sb_nbSecteur.setSpecialValueText("saisie_obligatoire")
76 self.ui.dsb_aretesFaceFissure.setSpecialValueText("automatique")
77 self.ui.dsb_influence.setSpecialValueText("automatique")
78 self.ui.lb_calcul.hide()
80 # Connect up the buttons.
81 self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
83 self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
85 self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
87 self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
89 self.disconnect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"), self.accept)
90 self.connect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"),
110 cbOptDiscrSain = False,
111 cbOptDiscrFiss = False,
114 cbForceEllipse = False,
121 aretesFaceFissure = 0.0,
125 def initDialog(self, dico):
126 self.ui.dsb_angle.setValue(dico['angle'])
127 self.ui.dsb_rCintr.setValue(dico['rCintr'])
128 self.ui.dsb_lTubeP1.setValue(dico['lTubeP1'])
129 self.ui.dsb_lTubeP2.setValue(dico['lTubeP2'])
130 self.ui.dsb_epais.setValue(dico['epais'])
131 self.ui.dsb_dext.setValue(dico['dext'])
132 self.ui.dsb_profondeur.setValue(dico['profondeur'])
133 self.ui.dsb_longueur.setValue(dico['longueur'])
134 self.ui.dsb_azimut.setValue(dico['azimut'])
135 self.ui.dsb_orientation.setValue(dico['orientation'])
136 self.ui.dsb_posiAngul.setValue(dico['posiAngul'])
137 self.ui.dsb_absCurv.setValue(dico['absCurv'])
138 self.ui.sb_nbTranches.setValue(dico['nbTranches'])
139 self.ui.sb_nbCouronne.setValue(dico['nbCouronnes'])
140 self.ui.sb_nbSecteur.setValue(dico['nbSecteurs'])
141 self.ui.dsb_aretesFaceFissure.setValue(dico['aretesFaceFissure'])
142 self.ui.dsb_influence.setValue(dico['influence'])
143 self.ui.sb_nbAxeTubeP1.setValue(dico['nbAxeTubeP1'])
144 self.ui.sb_nbAxeTubeP2.setValue(dico['nbAxeTubeP2'])
145 self.ui.sb_nbAxeCoude.setValue(dico['nbAxeCoude'])
146 self.ui.sb_nbCirconf.setValue(dico['nbCirconf'])
147 self.ui.sb_nbEpaisseur.setValue(dico['nbEpaisseur'])
148 self.ui.dsb_rayonTore.setValue(dico['rayonTore'])
149 #self.ui.cb_optDiscrSain.setChecked(False)
150 #self.ui.gb_discrSain.setShown(False)
151 self.ui.cb_optDiscrSain.setChecked(not(dico['cbOptDiscrSain']))
152 self.ui.cb_optDiscrSain.click()
153 self.ui.cb_optDiscrFiss.setChecked(not(dico['cbOptDiscrFiss']))
154 self.ui.cb_optDiscrFiss.click()
155 if dico['rbPosiAngul']:
156 self.ui.dsb_absCurv.setEnabled(False)
157 self.ui.dsb_posiAngul.setEnabled(True)
158 self.ui.rb_posiAngul.setChecked(True)
159 #self.ui.rb_posiAngul.click()
161 self.ui.dsb_absCurv.setEnabled(True)
162 self.ui.dsb_posiAngul.setEnabled(False)
163 self.ui.rb_absCurv.setChecked(True)
164 #self.ui.rb_absCurv.click()
165 self.ui.rb_fissExt.setChecked(dico['rbFissExt'])
166 self.ui.cb_forceEllipse.setChecked(dico['cbForceEllipse'])
167 incomplet = self.testval(dico)
170 def testval(self, dico):
172 if dico['angle'] < -180.0:
173 self.ui.dsb_angle.setPalette(self.redPalette)
176 self.ui.dsb_angle.setPalette(self.blackPalette)
178 if dico['rCintr'] == 0.0:
179 self.ui.dsb_rCintr.setPalette(self.redPalette)
182 self.ui.dsb_rCintr.setPalette(self.blackPalette)
184 if dico['lTubeP1'] == 0.0:
185 self.ui.dsb_lTubeP1.setPalette(self.redPalette)
188 self.ui.dsb_lTubeP1.setPalette(self.blackPalette)
190 if dico['lTubeP2'] == 0.0:
191 self.ui.dsb_lTubeP2.setPalette(self.redPalette)
194 self.ui.dsb_lTubeP2.setPalette(self.blackPalette)
196 if dico['epais'] == 0.0:
197 self.ui.dsb_epais.setPalette(self.redPalette)
200 self.ui.dsb_epais.setPalette(self.blackPalette)
202 if dico['dext'] == 0.0:
203 self.ui.dsb_dext.setPalette(self.redPalette)
206 self.ui.dsb_dext.setPalette(self.blackPalette)
208 if dico['profondeur'] == 0.0:
209 self.ui.dsb_profondeur.setPalette(self.redPalette)
212 self.ui.dsb_profondeur.setPalette(self.blackPalette)
214 if dico['longueur'] == 0.0:
215 self.ui.dsb_longueur.setPalette(self.redPalette)
218 self.ui.dsb_longueur.setPalette(self.blackPalette)
220 if dico['azimut'] < -180.0:
221 self.ui.dsb_azimut.setPalette(self.redPalette)
224 self.ui.dsb_azimut.setPalette(self.blackPalette)
226 if dico['orientation'] < 0.0:
227 self.ui.dsb_orientation.setPalette(self.redPalette)
230 self.ui.dsb_orientation.setPalette(self.blackPalette)
232 if dico['posiAngul'] < -180.0 and dico['rbPosiAngul'] == True:
233 self.ui.dsb_posiAngul.setPalette(self.redPalette)
236 self.ui.dsb_posiAngul.setPalette(self.blackPalette)
238 if dico['absCurv'] == 0.0 and dico['rbPosiAngul'] == False:
239 self.ui.dsb_absCurv.setPalette(self.redPalette)
242 self.ui.dsb_absCurv.setPalette(self.blackPalette)
244 if dico['nbTranches'] == 7:
245 self.ui.sb_nbTranches.setPalette(self.redPalette)
248 self.ui.sb_nbTranches.setPalette(self.blackPalette)
250 if dico['nbCouronnes'] == 1:
251 self.ui.sb_nbCouronne.setPalette(self.redPalette)
254 self.ui.sb_nbCouronne.setPalette(self.blackPalette)
256 if dico['nbSecteurs'] == 3:
257 self.ui.sb_nbSecteur.setPalette(self.redPalette)
260 self.ui.sb_nbSecteur.setPalette(self.blackPalette)
262 print "incomplet: ", incomplet
265 def fileDefault(self):
266 filedef = os.path.expanduser("~/.config/salome/dialogFissureCoude.dic")
270 def writeDefault(self, dico):
271 filedef = self.fileDefault()
272 f = open(filedef, 'w')
276 def readValPrec(self):
277 filedef = self.fileDefault()
278 if os.path.exists(filedef):
279 f = open(filedef, 'r')
283 self.initDialog(dico)
287 self.initDialog(self.defaut)
291 fileDiag = QFileDialog(self)
292 fileDiag.setFileMode(QFileDialog.AnyFile)
293 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
294 fileDiag.setViewMode(QFileDialog.List)
295 if fileDiag.exec_() :
296 fileNames = fileDiag.selectedFiles()
297 filedef = fileNames[0]
298 dico = self.creeDico()
299 f = open(filedef, 'w')
305 fileDiag = QFileDialog(self)
306 fileDiag.setFileMode(QFileDialog.ExistingFile)
307 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
308 fileDiag.setViewMode(QFileDialog.Detail)
309 if fileDiag.exec_() :
310 fileNames = fileDiag.selectedFiles()
311 filedef = fileNames[0]
313 if os.path.exists(filedef):
314 f = open(filedef, 'r')
318 self.initDialog(dico)
322 angle = self.ui.dsb_angle.value(),
323 rCintr = self.ui.dsb_rCintr.value(),
324 lTubeP1 = self.ui.dsb_lTubeP1.value(),
325 lTubeP2 = self.ui.dsb_lTubeP2.value(),
326 epais = self.ui.dsb_epais.value(),
327 dext = self.ui.dsb_dext.value(),
328 profondeur = self.ui.dsb_profondeur.value(),
329 longueur = self.ui.dsb_longueur.value(),
330 azimut = self.ui.dsb_azimut.value(),
331 orientation = self.ui.dsb_orientation.value(),
332 posiAngul = self.ui.dsb_posiAngul.value(),
333 absCurv = self.ui.dsb_absCurv.value(),
334 nbTranches = self.ui.sb_nbTranches.value(),
335 nbCouronnes = self.ui.sb_nbCouronne.value(),
336 nbSecteurs = self.ui.sb_nbSecteur.value(),
337 cbOptDiscrSain = self.ui.cb_optDiscrSain.isChecked(),
338 cbOptDiscrFiss = self.ui.cb_optDiscrFiss.isChecked(),
339 rbPosiAngul = self.ui.rb_posiAngul.isChecked(),
340 rbFissExt = self.ui.rb_fissExt.isChecked(),
341 cbForceEllipse = self.ui.cb_forceEllipse.isChecked(),
342 nbAxeTubeP1 = self.ui.sb_nbAxeTubeP1.value(),
343 nbAxeTubeP2 = self.ui.sb_nbAxeTubeP2.value(),
344 nbAxeCoude = self.ui.sb_nbAxeCoude.value(),
345 nbCirconf = self.ui.sb_nbCirconf.value(),
346 nbEpaisseur = self.ui.sb_nbEpaisseur.value(),
347 rayonTore = self.ui.dsb_rayonTore.value(),
348 aretesFaceFissure = self.ui.dsb_aretesFaceFissure.value(),
349 influence = self.ui.dsb_influence.value(),
354 def checkValues(self):
358 from blocFissure.gmu import initLog
360 initLog.setVerbose() # don't set the level too early, to be able to modify it
361 from blocFissure.gmu import geomsmesh
362 from blocFissure.gmu.casStandard import casStandard
363 from blocFissure.ihm.fissureCoude_ihm import fissureCoude_ihm
365 dico = self.creeDico()
366 NOK = self.testval(dico)
368 dico['lenSegPipe'] = (dico['longueur'] + math.pi*dico['profondeur'])/dico['nbTranches']
369 print 'lenSegPipe', dico['lenSegPipe']
370 areteMinAngle = (dico['rCintr'] -dico['dext']/2.0)*(dico['angle']*math.pi/180.0)/dico['nbAxeCoude']
371 print'areteMinAngle', areteMinAngle
372 areteMinCirco = dico['dext']*math.pi/(2*dico['nbCirconf'])
373 print'areteMinCirco', areteMinCirco
374 areteMinEpais = dico['epais']/dico['nbEpaisseur']
375 print'areteMinEpais', areteMinEpais
376 if dico['influence'] == 0:
377 dico['influence'] = max(areteMinAngle, areteMinCirco, areteMinEpais)
378 print 'influence', dico['influence']
379 if dico['aretesFaceFissure'] == 0:
380 dico['aretesFaceFissure'] = (areteMinAngle + areteMinCirco)/2.0
381 print 'aretesFaceFissure', dico['aretesFaceFissure']
382 if dico['rbPosiAngul'] == False:
383 rmoy = (dico['dext'] - dico['epais'])/2.0
385 if dico['rbFissExt'] == False:
387 dico['posiAngul'] = (180.0/math.pi)*dico['absCurv']/(dico['rCintr']+(rmoy+eta*dico['epais']/2.0)*math.cos(math.pi*dico['azimut']/180.))
388 print 'posiAngul' , dico['posiAngul']
390 self.writeDefault(dico)
391 self.ui.lb_calcul.show()
392 probleme = fissureCoude_ihm(0)
393 probleme.setDicoParams(dico)
394 probleme.executeProbleme()
400 # ----------------------------------------------------------------------------
402 window = fissureCoudeDialog()
403 # window.ui.dsb_tolerance.setValue(0.01)
408 result = window.result()
411 print "dialog accepted, check"
412 retry = window.checkValues()
414 print "dialog rejected, exit"