--- /dev/null
+#==============================================================================
+# File : Makefile.in
+# Created : dim déc 9 18:35:11 CET 2001
+# Author : Paul RASCLE, EDF
+# Project : SALOME
+# Copyright : EDF 2001
+#==============================================================================
+
+# source path
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl:${KERNEL_ROOT_DIR}/idl/salome
+
+
+@COMMENCE@
+
+# header files
+EXPORT_HEADERS=
+
+
+# Libraries targets
+
+LIB =
+LIB_SRC =
+
+LIB_CLIENT_IDL =
+
+LIB_SERVER_IDL =
+
+EXPORT_PYSCRIPTS = \
+appli.py \
+c_nouvelleLigneTableDdl.py \
+ddl.py \
+fichier.py \
+materiau.py \
+pression.py \
+c_nouvelleLigneTablePression.py \
+eelih.py \
+geometrie.py \
+modelisation.py \
+publication.py \
+c_geometrie.py \
+c_selectionGeometrie.py \
+maillage.py \
+c_maillage.py \
+c_suppressionLigneTable.py \
+eficas_novice.py \
+mainwindow.py \
+panelbase.py \
+validationlineedit.py \
+c_modelisation.py \
+c_table.py \
+eelihCL.py
+
+# additionnal information to compil and link file
+
+CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) $(SIP_INCLUDES)
+CPPFLAGS += -I$(top_builddir)/SALOME/src/SALOME_PYQT
+CXXFLAGS +=
+
+LDFLAGS += $(PYTHON_LIBS) $(PYQT_LIBS) -lSalomeGUI
+
+@CONCLUDE@
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules de l'application
+from mainwindow import *
+from modelisation import *
+from materiau import *
+import eelih
+
+class Appli:
+ """
+ Définit l'application :
+ - salome = référence de l'étude Salome
+ - etude = définie les valeurs à saisir
+ - mw = interface graphique
+ - flagEficasOrAster = E si Eficas a été chargé (fichier .comm enregistré manuellement par l'utilisateur)
+ A si Aster a été chargé (fichier .comm enregistré automatiquement dans /tmp)
+ """
+ def __init__(self, salomeRef, flag):
+ # référence à Salome
+ self.salome = salomeRef
+
+ # flag pour l'enregistrement du fichier de commande
+ self.flagEficasOrAster = flag
+
+ # création de l'étude
+ self.etude = eelih.Eelih()
+
+ # création de la fenêtre principale
+ self.mw = MainWindow(self)
+ self.mw.show()
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# module salome
+import salome
+# module eficas
+import SMESH_utils
+# module GEOM
+import GEOM
+# module de bases
+import string
+# module pour le maillage
+import maillage
+
+class C_geometrie:
+ """
+ controleur de la classe Geometrie, permet la sélection de la géométrie dans l'arbre d'étude
+ de Salome. Met à jour les champs correspondants (sous-géométries, ...)
+ - geometrie = référence sur le panneau géométrie
+ - dicoSousGeom = clé = IORString
+ valeur = name
+ """
+ def __init__(self, appli, geometrie):
+ self.appli = appli
+ self.geometrie = geometrie
+ self.dicoSousGeom = []
+
+ def getGeometrie(self):
+ """
+ affecte le nom de la géométrie sélectionnée dans l'arbre d'étude de Salome
+ à l'instance étude de l'application et au lineedit correspondant
+ """
+ # récupération de tous les objets sélectionnés dans l'arbre d'étude
+ listeSelection = salome.sg.getAllSelected()
+ if len(listeSelection) > 1:
+ print "----------------------------------------"
+ print "1 seule géométrie doit être sélectionnée"
+ elif len(listeSelection) == 0:
+ print "----------------------------------------"
+ print "Sélectionnez une géométrie"
+ else:
+ # on teste si l'objet sélectionné est une géométrie et s'il possède des fils
+ import EFICASGUI
+ import salomedsgui
+ anObject=SMESH_utils.entryToIor(salome.myStudy,listeSelection[0])
+ if not anObject: # l'objet n'a pas encore chargé
+ strContainer, strComponentName = "FactoryServer", "GEOM"
+ myComponent = salome.lcc.FindOrLoadComponent( strContainer, strComponentName )
+ SCom=salome.myStudy.FindComponent( strComponentName )
+ myBuilder = salome.myStudy.NewBuilder()
+ myBuilder.LoadWith( SCom , myComponent )
+ anObject=SMESH_utils.entryToIor(salome.myStudy,listeSelection[0])
+ type = None
+ try:
+ type = anObject._narrow(GEOM.GEOM_Object)
+ except:
+ pass
+
+ # le type doit être une géométrie
+ if type == None:
+ print "----------------------------------------"
+ print "Sélectionnez une géométrie"
+ # type = géométrie
+ else:
+ # on vérifie que cette géométrie possède au moins un fils qui soit une géoméotrie
+ geom = salome.lcc.FindOrLoadComponent( "FactoryServer", "GEOM" )
+ group = geom.GetIMeasureOperations(EFICASGUI.currentStudyId)
+ nom = SMESH_utils.entryToName(salome.myStudy, listeSelection)
+
+ # modelisation 3D --> il faut un SOLID
+ if self.appli.etude.modelisation == '3D':
+ n = string.find(group.WhatIs(type), 'SOLID')
+ if group.WhatIs(type)[n+8] != 0:
+ liste = []
+ liste = [nom[0], listeSelection[0]]
+ self.geometrie.ln.setText(nom[0])
+ self.appli.etude.setGeometrie(liste)
+ # groupes de mailles = face ou shell
+ self.dicoSousGeom = SMESH_utils.getSubGeometryIorAndName(salome.myStudy, self.appli.etude.geometrie)
+ listeSousGeom = []
+ for maille in self.dicoSousGeom.keys():
+ anObject = SMESH_utils.iorStringToIor(maille)
+ type = anObject._narrow(GEOM.GEOM_Object)
+ n = string.find(group.WhatIs(type), 'FACE')
+ if group.WhatIs(type)[n+7] != 0:
+ listeSousGeom.append(self.dicoSousGeom[maille])
+ else:
+ n = string.find(group.WhatIs(type), 'SHELL')
+ if group.WhatIs(type)[n+8] != 0:
+ listeSousGeom.append(self.dicoSousGeom[maille])
+
+ listeSousGeom.sort()
+ self.appli.etude.setSousGeometrie(listeSousGeom)
+
+ else:
+ print "----------------------------------------"
+ print "Pour une modélisation 3D, la géométrie sélectionnée doit être un solide."
+
+ # modelisation 2D --> SHELL ou FACE
+ if string.find(self.appli.etude.modelisation, '2D') != -1:
+ liste = []
+ liste = [nom[0], listeSelection[0]]
+ self.geometrie.ln.setText(nom[0])
+ self.appli.etude.setGeometrie(liste)
+ self.dicoSousGeom = SMESH_utils.getSubGeometryIorAndName(salome.myStudy, self.appli.etude.geometrie)
+ listeSousGeom = []
+ n = string.find(group.WhatIs(type), 'SHELL')
+ if group.WhatIs(type)[n+8] != 0:
+ # groupes de mailles = edge
+ for maille in self.dicoSousGeom.keys():
+ anObject = SMESH_utils.iorStringToIor(maille)
+ type = anObject._narrow(GEOM.GEOM_Object)
+ n = string.find(group.WhatIs(type), 'EDGE')
+ if group.WhatIs(type)[n+7] != 0:
+ listeSousGeom.append(self.dicoSousGeom[maille])
+ else:
+ n = string.find(group.WhatIs(type), 'FACE')
+ if group.WhatIs(type)[n+7] != 0:
+ # groupes de mailles = edge
+ for maille in self.dicoSousGeom.keys():
+ anObject = SMESH_utils.iorStringToIor(maille)
+ type = anObject._narrow(GEOM.GEOM_Object)
+ n = string.find(group.WhatIs(type), 'EDGE')
+ if group.WhatIs(type)[n+7] != 0:
+ listeSousGeom.append(self.dicoSousGeom[maille])
+
+ listeSousGeom.sort()
+ self.appli.etude.setSousGeometrie(listeSousGeom)
+
+ # on cree le bon nombre de panneaux maillages : autant qu'il y a de sous geometries
+ #self.createMeshPanel()
+ #print "-----------------------------"
+ #print "-----------------------------"
+ #print "-----------------------------"
+ #print "-----------------------------"
+ #print "-----------------------------"
+ #print "-----------------------------"
+ #print "-----------------------------"
+ #print "liste des panneaux ="
+ #print self.appli.mw.listePanels
+
+# def createMeshPanel(self):
+# """
+# cree autant de panneaux maillages que de sous geometries
+# """
+# self.listeMaillages = []
+# for i in self.appli.etude.sousGeometrie:
+# mesh = maillage.Maillage(self.appli.mw.ws, self.appli)
+# self.listeMaillages.append(mesh)
+# self.appli.mw.listePanels.append(mesh)
+# #self.appli.mw.listePanels.insert(0, self.appli.mw.listePanels[0] + 1)
+# #del self.appli.mw.listePanels[1]
+
+# self.updateGeomMaillage(mesh, i)
+
+ def getSousGeometrie(self):
+ """
+ retourne les sous-géométries de la géométrie sélectionnée dans l'arbre d'étude de Salome
+ """
+ liste = SMESH_utils.getSubGeometry(salome.myStudy, self.geometrie.appli.etude.geometrie)
+ liste.sort()
+ return liste
+
+ def updateComboSousGeom(self):
+ """
+ affecte les combobox des tables des panneaux ddl et pression avec les valeurs
+ des sous-géométries
+ """
+ # insertion pour le panneau ddl
+ for cmb in self.geometrie.appli.mw.ddl.controleurNouvelleLigneTable.controleurTable.listeComboGeom:
+ cmb.insertStrList(self.geometrie.appli.etude.sousGeometrie)
+
+ # insertion pour le panneau pression
+ for cmb in self.geometrie.appli.mw.pression.controleurNouvelleLigneTable.controleurTable.listeComboGeom:
+ cmb.insertStrList(self.geometrie.appli.etude.sousGeometrie)
+
+ def updateGeomMaillage(self, maillage, sousGeom):
+ """
+ affecte le label indiquant la géométrie sélectionnée du panneau maillage
+ affecte la listbox du panneau maillage avec les valeurs des maillages trouvés dans l'arbre d'étude
+ Salome correspondant à la géométrie sélectionnée
+ """
+ # affectation de la géométrie sélectionnée au label du panneau maillage
+ maillage.lblGeom2.setText(str(self.appli.etude.geometrie[0]))
+
+ # affectation de la sous géométrie au label du panneau maillage
+ maillage.lblSousGeom2.setText(str(sousGeom))
+
+ # récupération des mailles correspondants
+ import eelihCL
+ maillage.cl=eelihCL.CLinit()
+ # récupération de l'IOR des sous géométries
+ GEOMIor = []
+ for iorSousGeom in self.dicoSousGeom.keys():
+ GEOMIor.append(iorSousGeom)
+ maillage.cl.GetOrCreateCL(iorSousGeom)
+ #self.appli.mw.maillage.cl.traiteCL()
+ maillage.cl.get_geoms()
+ maillage.cl.get_maillages()
+#
+ maillage.cl.MainShapes(0)
+#
+ listeMaillage = maillage.cl.Possibles(0, str(self.appli.etude.geometrie[0]))
+ # insertion des maillages trouvés dans la listbox du panneau maillage
+ # si aucun maillage on disable la listbox
+ # sinon on disable le lineedit pour donner le nom d'un nouveau maillage
+ if listeMaillage != []:
+ maillage.lbMaillage.insertStrList(listeMaillage)
+ #maillage.lbMaillage.setEnabled(1)
+ #maillage.lblMaillage.setEnabled(1)
+ #maillage.lblNouveauMaillage.setEnabled(0)
+ #maillage.lnNouveauMaillage.setEnabled(0)
+ #else:
+ #maillage.lnNouveauMaillage.setEnabled(1)
+ #maillage.lblNouveauMaillage.setEnabled(1)
+ #maillage.lbMaillage.setEnabled(0)
+ #maillage.lblMaillage.setEnabled(0)
+
+
+ def convertit_group_maille_from_salome(self,liste_in):
+ """
+ convertit les groupes de maille
+ """
+ newr=[]
+ if [ 1 == 1 ]:
+ for entree in liste_in :
+ travail=[]
+ travail.append(entree)
+ if dict_geom_numgroupe.has_key(entree):
+ r=dict_geom_numgroupe[entree]
+ else:
+ r=SMESH_utils.getAsterGroupMa(salome.myStudy,travail)
+ dict_geom_numgroupe[entree]=r
+ for i in r :
+ newr.append(i)
+ else :
+ print "pas de groupe de maille associé"
+ showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de maille")
+ return newr
+
+ def convertit_entrees_en_valeurs(self,liste_faces):
+ """
+ convertit les entry de l'arbre d'étude en valeur
+ """
+ valeur=self.convertit_group_maille_from_salome(liste_faces)
+ if valeur == []:
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ print "VALEUR", valeur
+ if len(valeur) == 1:
+ valeur = "'" + str(valeur[0]) + "'"
+ return valeur
+
+ def add_selection(self):
+ """
+ retourne le nom des objets sélectionnés dans l'arbre d'étude
+ """
+ entrychaine=salome.sg.getAllSelected()
+ if len(entrychaine) >= 1:
+ print "1 seule géométrie doit être sélectionnée"
+
+
+ # liste des faces sélectionnées dans ddl et pression
+# liste_faces = []
+# for face in self.appli.etude.ddls:
+# if face[0] not in liste_faces:
+# liste_faces.append(face[0])
+
+# for face in self.appli.etude.chargements:
+# if face[0] not in liste_faces:
+# liste_faces.append(face[0])
+# if liste_faces != '':
+ liste_faces = []
+ #liste_faces.append('0:1:2:1:1')
+ #liste_faces.append('0:1:2:1:2')
+
+ # récupération de toutes les sous géométries
+ for sousGeom in self.appli.etude.sousGeometrie:
+ SO = salome.myStudy.FindObject(str(sousGeom))
+ liste_faces.append(SO.GetID())
+
+ touteslesvaleurs = self.convertit_entrees_en_valeurs(liste_faces)
+ #liste_faces = []
+ #liste_faces.append('0:1:2:1:2')
+ #touteslesvaleurs = self.convertit_entrees_en_valeurs(liste_faces)
+ return touteslesvaleurs
+
+dict_geom_numgroupe = { }
+dict_geom_numface = { }
--- /dev/null
+# -*- coding: utf-8 -*-
+
+from panelbase import *
+
+
+class C_maillage:
+ """
+ controleur de la classe Maillage, traite les maillages correspondants à la géométrie
+ sélectionnée ou crée un maillage avec le nom saisi
+ - maillage = référence sur le panneau maillage
+ """
+ def __init__(self, maillage):
+ self.maillage = maillage
+
+ def traiteMaillage(self):
+ """
+ si un maillage est sélectionné dans la listbox traite ce maillage
+ sinon crée un nouveau maillage avec comme nom le nom saisi
+ """
+ # nouveau maillage
+ if self.maillage.lbMaillage.currentItem() == -1:
+ self.maillage.cl.traiteNewMaillage(0, str(self.maillage.lblGeom2.text()), str(self.maillage.lnNouveauMaillage.text()))
+ self.maillage.cl.traiteCL()
+ # met à jour les autres listbox des autres maillages -> ajoute le maillage cree
+ self.updateMeshList()
+
+ # sélection d'un maillage existant
+ else:
+ self.maillage.cl.traiteMaillage(0, str(self.maillage.lbMaillage.currentText().latin1()))
+ self.maillage.cl.traiteCL()
+
+ print "traitemaillage -------------------------"
+
+ def enableBtnSuivant(self):
+ """
+ rend actif le bouton suivant (terminer) si un maillage a été sélectionné ou
+ si un nom de nouveau maillage a été saisi
+ """
+ # nouveau maillage
+ if self.maillage.lblNouveauMaillage.isEnabled():
+ if self.maillage.lblNouveauMaillage.text().latin1() != str(''):
+ self.maillage.btnSuivant.setEnabled(1)
+ else:
+ self.maillage.btnSuivant.setEnabled(0)
+ # sélection d'un maillage existant
+ elif self.maillage.lbMaillage.currentItem() != -1:
+ self.maillage.btnSuivant.setEnabled(1)
+ else:
+ self.maillage.btnSuivant.setEnabled(0)
+
+ def close(self):
+ """
+ ferme l'application quand on clique sur le bouton suivant (terminer)
+ """
+ self.maillage.appli.mw.close()
+
+ def updateMeshList(self):
+ """
+ met à jour la liste des maillages dans tous les panneaux maillages
+ quand un nouveau maillage est cree
+ """
+ for maillage in self.maillage.appli.mw.publication.listeMaillages:
+ try:
+ maillage.cl.get_geoms()
+ maillage.cl.get_maillages()
+
+ maillage.cl.MainShapes(0)
+
+ listeMaillage = maillage.cl.Possibles(0, str(self.maillage.appli.etude.geometrie[0]))
+
+ maillage.lbMaillage.insertStrList(listeMaillage)
+ except:
+ pass
+
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+class C_modelisation:
+ """
+ controleur de la classe Modelisation, si la modélisation est 2D on cache la colonne DZ
+ de la table du panneau ddl
+ - modelisation = référence sur le panneau modélisation
+ """
+ def __init__(self, modelisation):
+ self.modelisation = modelisation
+
+ def enableDZ(self):
+ """
+ si la modélisation est 2D on cache la colonne DZ de la table du panneau ddl
+ """
+ # modélisation 2D --> on cache
+ if self.modelisation.cmb.currentText().latin1() != '3D':
+ self.modelisation.appli.mw.ddl.tbl.hideColumn(3)
+ # modélisation 3D --> on montre
+ else:
+ self.modelisation.appli.mw.ddl.tbl.showColumn(3)
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# modules de gestion des tables
+from c_suppressionLigneTable import *
+# modules controleur de la géométrie
+from c_geometrie import *
+# modules de base
+import commands
+import os
+# modules validateur de lineedit
+from validationlineedit import *
+
+class C_nouvelleLigneTableDdl(QWidget):
+ """
+ controleur de la table du panneau ddl, permet la création d'une ligne de cette table
+ - appli = référence sur l'application
+ - c_table = référence sur le controleur table (permet le contrôle de la table)
+ - ddl = référence sur le panneau ddl
+ """
+ def __init__(self, appli, c_table, ddl):
+ self.appli = appli
+ self.controleurTable = c_table
+ self.ddl = ddl
+
+ def nouvelleLigne(self):
+ """
+ insère une nouvelle ligne dans la table
+ """
+ # insertion de la ligne
+ self.controleurTable.tbl.insertRows(len(self.controleurTable.listeBoutonsMoins))
+ self.controleurTable.tbl.setRowHeight(len(self.controleurTable.listeBoutonsMoins), 30)
+ # création des boutons associés à cette nouvelle ligne
+ self.creeBoutons()
+
+ def creeBoutons(self):
+ """
+ crée les boutons associés à une ligne
+ """
+ # ajout du combobox pour le choix des sous-géométries
+ cmb = QComboBox(self.controleurTable.tbl)
+ cmb.setMinimumWidth(100)
+ cmb.setMaximumWidth(200)
+ # méthode pour récupérer les sous géométries
+ self.controleurTable.listeComboGeom.append(cmb)
+ controleurSousGeom = C_geometrie(self.appli, self.ddl)
+ self.controleurTable.listeControleursGeoms.append(controleurSousGeom)
+ liste = self.appli.etude.sousGeometrie
+ cmb.insertStrList(liste)
+ # ajout du combobox géométrie dans la nouvelle ligne
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins), 0, cmb)
+ self.controleurTable.tbl.adjustColumn(0)
+
+ # ajout du lineedit dx dans la nouvelle ligne
+ lnx = QLineEdit('', self.controleurTable.tbl)
+ lnx.setPaletteBackgroundColor(QColor(255, 170, 255))
+ self.controleurTable.listeEditDx.append(lnx)
+ validateur = ValidationLineEdit(None, None, None, lnx)
+ self.controleurTable.listeControleursDx.append(validateur)
+ self.connect(lnx, SIGNAL('textChanged(const QString&)'), self.controleurTable.listeControleursDx[self.controleurTable.listeEditDx.index(lnx)].isValid)
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins), 1, lnx)
+
+ # ajout du lineedit dy dans la nouvelle ligne
+ lny = QLineEdit('', self.controleurTable.tbl)
+ lny.setPaletteBackgroundColor(QColor(255, 170, 255))
+ self.controleurTable.listeEditDy.append(lny)
+ validateur = ValidationLineEdit(None, None, None, lny)
+ self.controleurTable.listeControleursDy.append(validateur)
+ self.connect(lny, SIGNAL('textChanged(const QString&)'), self.controleurTable.listeControleursDy[self.controleurTable.listeEditDy.index(lny)].isValid)
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins), 2, lny)
+
+ # ajout du lineedit dz dans la nouvelle ligne
+ lnz = QLineEdit('', self.controleurTable.tbl)
+ lnz.setPaletteBackgroundColor(QColor(255, 170, 255))
+ self.controleurTable.listeEditDz.append(lnz)
+ validateur = ValidationLineEdit(None, None, None, lnz)
+ self.controleurTable.listeControleursDz.append(validateur)
+ self.connect(lnz, SIGNAL('textChanged(const QString&)'), self.controleurTable.listeControleursDz[self.controleurTable.listeEditDz.index(lnz)].isValid)
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins), 3, lnz)
+
+ # ajout du bouton moins dans la liste
+ px = QPixmap(os.path.join(os.getenv("EFICAS_ROOT_DIR"), 'share/salome/resources/moins.png'))
+ icon = QIconSet(px)
+ pbMoins = QPushButton(icon, '', self.controleurTable.tbl)
+ pbMoins.setFixedWidth(30)
+ pbMoins.setFixedHeight(30)
+ self.controleurTable.listeBoutonsMoins.append(pbMoins)
+ controleurLigne = C_suppressionLigneTable(self.controleurTable, pbMoins, cmb, controleurSousGeom)
+ self.controleurTable.listeControleursMoins.append(controleurLigne)
+ self.connect(pbMoins, SIGNAL('clicked()'), self.controleurTable.listeControleursMoins[self.controleurTable.listeBoutonsMoins.index(pbMoins)].supprimeLigne)
+ # ajout du bouton moins dans la nouvelle ligne
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins) - 1, 4, pbMoins)
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# modules de gestions des tables
+from c_suppressionLigneTable import *
+# modules controleur géométrie
+from c_geometrie import *
+# modules de base
+import commands
+import os
+# modules validateur de lineedit
+from validationlineedit import *
+
+class C_nouvelleLigneTablePression(QWidget):
+ """
+ controleur de la table du panneau pression, permet la création d'une ligne de cette table
+ - appli = référence sur l'application
+ - controleurTable = référence sur le controleur de la table
+ - pression = référence sur le panneau pression
+ """
+ def __init__(self, appli, c_table, pression):
+ self.appli = appli
+ self.controleurTable = c_table
+ self.pression = pression
+
+ def nouvelleLigne(self):
+ """
+ insère une nouvelle ligne dans la table
+ """
+ # création de la ligne
+ self.controleurTable.tbl.insertRows(len(self.controleurTable.listeBoutonsMoins))
+ self.controleurTable.tbl.setRowHeight(len(self.controleurTable.listeBoutonsMoins), 30)
+ # création des boutons associés à cette nouvelle ligne
+ self.creeBoutons()
+
+ def creeBoutons(self):
+ """
+ crée les boutons associés à une ligne
+ """
+ # ajout du combobox pour le choix des sous-géométries
+ cmb = QComboBox(self.controleurTable.tbl)
+ cmb.setMinimumWidth(50)
+ cmb.setMaximumWidth(200)
+ # méthode pour récupérer les sous géométries
+ self.controleurTable.listeComboGeom.append(cmb)
+ controleurSousGeom = C_geometrie(self.appli, self.pression)
+ self.controleurTable.listeControleursGeoms.append(controleurSousGeom)
+ liste = self.appli.etude.sousGeometrie
+ cmb.insertStrList(liste)
+ # ajout du combobox géométrie dans la nouvelle ligne
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins), 0, cmb)
+ self.controleurTable.tbl.adjustColumn(0)
+
+ # ajout du lineedit Pression dans la nouvelle ligne
+ lnf = QLineEdit('', self.controleurTable.tbl)
+ lnf.setPaletteBackgroundColor(QColor(255, 170, 255))
+ self.controleurTable.listeEditPression.append(lnf)
+ validateur = ValidationLineEdit(None, None, None, lnf)
+ self.controleurTable.listeControleursPression.append(validateur)
+ self.connect(lnf, SIGNAL('textChanged(const QString&)'), self.controleurTable.listeControleursPression[self.controleurTable.listeEditPression.index(lnf)].isValid)
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins), 1, lnf)
+
+ # ajout du bouton moins dans la liste
+ px = QPixmap(os.path.join(os.getenv("EFICAS_ROOT_DIR"), 'share/salome/resources/moins.png'))
+ icon = QIconSet(px)
+ pbMoins = QPushButton(icon, '', self.controleurTable.tbl)
+ pbMoins.setFixedWidth(30)
+ pbMoins.setFixedHeight(30)
+ self.controleurTable.listeBoutonsMoins.append(pbMoins)
+ controleurLigne = C_suppressionLigneTable(self.controleurTable, pbMoins, cmb, controleurSousGeom)
+ self.controleurTable.listeControleursMoins.append(controleurLigne)
+ self.connect(pbMoins, SIGNAL('clicked()'), self.controleurTable.listeControleursMoins[self.controleurTable.listeBoutonsMoins.index(pbMoins)].supprimeLigne)
+ # ajout du bouton moins dans la nouvelle ligne
+ self.controleurTable.tbl.setCellWidget(len(self.controleurTable.listeBoutonsMoins) - 1, 2, pbMoins)
--- /dev/null
+# -*- coding: utf-8 -*-
+
+import salome
+import SMESH_utils
+
+class C_selectionGeometrie:
+ def __init__(self, c_table, widget):
+ self.controleurTable = c_table
+ self.widget = widget
+
+ def convertit_group_maille_from_salome(self,liste_in):
+ newr=[]
+ if [ 1 == 1 ]:
+ print liste_in
+ for entree in liste_in :
+ travail=[]
+ travail.append(entree)
+ entryname_list=SMESH_utils.entryToName(salome.myStudy,travail)
+ entreeName=entryname_list[0]
+ if dict_geom_numgroupe.has_key(entreeName):
+ r=dict_geom_numgroupe[entreeName]
+ else:
+ r=SMESH_utils.getAsterGroupMa(salome.myStudy,travail)
+ dict_geom_numgroupe[entreeName]=r
+ for i in r :
+ newr.append(i)
+ else :
+ print "pas de groupe de maille associé"
+ showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de maille")
+ return newr
+
+ def convertit_entrees_en_valeurs(self,entrychaine):
+ valeur=self.convertit_group_maille_from_salome(entrychaine)
+ if valeur == []:
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ print "VALEUR", valeur
+ if len(valeur) == 1:
+ valeur = "'" + str(valeur[0]) + "'"
+ return valeur
+
+ def add_selection(self):
+ entrychaine=salome.sg.getAllSelected()
+ if entrychaine != '':
+ # apparemment inutile
+ #entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
+ touteslesvaleurs = self.convertit_entrees_en_valeurs(entrychaine)
+ if touteslesvaleurs != []:
+ # on recherche dans quelle ligne on insère la valeur sélectionnée dans Salome
+ indice = self.controleurTable.listeBoutonsSelections.index(self.widget)
+ # on modifie le texte du lineedit de cette ligne et de la colonne objet
+ self.controleurTable.tbl.setText(indice, 1, str(touteslesvaleurs))
+ self.controleurTable.tbl.adjustColumn(1)
+
+dict_geom_numgroupe = { }
+dict_geom_numface = { }
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+class C_suppressionLigneTable:
+ """
+ controleur des tables des panneaux ddl et pression, permet la suppression d'une ligne
+ - c_table : controleur d'une table
+ - widgetMoins = référence sur le bouton moins
+ - widgetSousGeom = référence sur le combobox
+ - controleurSousGeom = référence sur le controleur géométrie
+ """
+ def __init__(self, c_table, widgetMoins, widgetSousGeom, controleurSousGeom):
+ self.controleurTable = c_table
+ self.widgetMoins = widgetMoins
+ self.widgetSousGeom = widgetSousGeom
+ self.controleurSousGeom = controleurSousGeom
+
+ def supprimeLigne(self):
+ """
+ supprime les références sur les boutons et les controleurs associés des listes
+ qui contiennent tous les boutons et controleurs associés à une table,
+ supprime également la ligne de la table
+ """
+ indice = self.controleurTable.listeBoutonsMoins.index(self.widgetMoins)
+
+ # suppression des listes
+ self.controleurTable.listeBoutonsMoins.remove(self.widgetMoins)
+ if self.widgetSousGeom != None:
+ self.controleurTable.listeComboGeom.remove(self.widgetSousGeom)
+ self.controleurTable.listeControleursMoins.remove(self)
+ if self.controleurSousGeom != None:
+ self.controleurTable.listeControleursGeoms.remove(self.controleurSousGeom)
+ # suppression de la ligne de la table
+ self.controleurTable.tbl.removeRow(indice)
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+class C_table:
+ """
+ controleur des tables, permet de gérer l'ajout et la suppression d'une ligne dans une table
+ - listeBoutonsMoins = liste des boutons moins créés pour la table
+ - listeComboGeom = liste des combobox créés pour la table
+ - listeEditDx = liste des lineedit DX créés pour la table
+ - listeEditDy = liste des lineedit DY créés pour la table
+ - listeEditDz = liste des lineedit DZ créés pour la table
+ - listeEditPression = liste des lineedit Pression créés pour la table
+ - listeControleursMoins = liste des controleurs C_suppressionLigneTable
+ - listeControleursDx = liste des controleurs Validationlineedit pour Dx
+ - listeControleursDy = liste des controleurs Validationlineedit pour Dy
+ - listeControleursDz = liste des controleurs Validationlineedit pour Dz
+ - listeControleursPression = liste des controleurs Validationlineedit pour Pression
+ - listeControleursGeoms = liste des controleurs pour récupérer les sous-géométries dans les combobox
+ - tbl = référence sur la table
+ """
+ def __init__(self, table):
+ self.listeBoutonsMoins = []
+ self.listeComboGeom = []
+ self.listeEditDx = []
+ self.listeEditDy = []
+ self.listeEditDz = []
+ self.listeEditPression = []
+ self.listeControleursMoins = []
+ self.listeControleursDx = []
+ self.listeControleursDy = []
+ self.listeControleursDz = []
+ self.listeControleursPression = []
+ self.listeControleursGeoms = []
+ self.tbl = table
+
+
--- /dev/null
+
+
+DEBUT();
+
+# MATERIAU
+
+MAIL=LIRE_MAILLAGE(UNITE=21,
+ FORMAT='MED',
+ INFO_MED=2,);
+
+# MODELISATION
+
+MATE=AFFE_MATERIAU(MAILLAGE=MAIL,
+ AFFE=_F(TOUT='OUI',
+ MATER=MA,),);
+
+# CHARGEMENT
+
+RESU=MECA_STATIQUE(MODELE=MODE,
+ CHAM_MATER=MATE,
+ EXCIT=_F(CHARGE=CHAR,),);
+
+RESU=CALC_ELEM(reuse =RESU,
+ MODELE=MODE,
+ CHAM_MATER=MATE,
+ RESULTAT=RESU,
+ OPTION=('SIEF_ELGA_DEPL','SIGM_ELNO_DEPL','EQUI_ELNO_SIGM',),
+ EXCIT=_F(
+ CHARGE=CHAR,),);
+
+RESU=CALC_NO(reuse =RESU,
+ RESULTAT=RESU,
+ OPTION=('EQUI_NOEU_SIGM','SIGM_NOEU_DEPL',),);
+
+IMPR_RESU(FORMAT='MED',
+ UNITE=80,
+ RESU=_F(MAILLAGE=MAIL,
+ RESULTAT=RESU,
+ NOM_CHAM=('SIGM_NOEU_DEPL','EQUI_NOEU_SIGM','DEPL',),),);
+
+FIN();
+
+# FIN
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+from qttable import QTable
+# modules de gestion des panneaux
+from panelbase import *
+# modules validateur lineedit
+from validationlineedit import *
+# modules controles des tables
+from c_suppressionLigneTable import *
+from c_nouvelleLigneTableDdl import *
+from c_table import *
+# modules de base
+import commands
+
+class Ddl(PanelBase):
+ """
+ Hérite de la classe mère PanelBase
+ Définit le panneau pour le choix des degrés de liberté d'un groupe de faces :
+ - tbl = table d'affichage des degrés de liberté
+ - controleurTable = controleur de gestion de la table
+ - controleurNouvelleLigneTable = controleur pour l'ajout d'une nouvelle ligne dans la table
+ - boutonPlus = permet de créer une nouvelle ligne quand on clique dessus
+ """
+ def __init__(self, parent, appli):
+ # hérite de la classe mère des panneaux
+ PanelBase.__init__(self, parent, appli)
+
+ # on modifie le label titre
+ self.lblTitre.setText('Degrés de liberté imposés')
+
+ # on modifie l'explication
+ self.lblExplication.setText("Définissez le(s) groupe(s) de mailles et les ddls à appliquer :")
+
+ # bouton suivant toujours actif
+ self.btnSuivant.setEnabled(1)
+
+ # espacement
+ self.sp2 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp2, 3, 0)
+
+ # création d'une QGridLayout
+ self.glProprietes = QGridLayout(self.parent, 1, 2, 5)
+ self.gl.addLayout(self.glProprietes, 4, 0)
+
+ # ---------------- création et ajout du QTable ----------------
+ self.tbl = QTable(1, 5, self.parent)
+ self.tbl.setMinimumHeight(150)
+ self.tbl.setMaximumHeight(200)
+ self.tbl.setColumnWidth(4, 30)
+ self.tbl.setRowHeight(0, 30)
+
+ self.th = self.tbl.horizontalHeader()
+ self.th.setLabel(0, 'Objet')
+ self.th.setLabel(1, 'DX')
+ self.th.setLabel(2, 'DY')
+ self.th.setLabel(3, 'DZ')
+ self.th.setLabel(4, '')
+
+ self.tbl.verticalHeader().hide()
+ self.tbl.setLeftMargin(0)
+
+ self.glProprietes.addWidget(self.tbl, 0, 0)
+
+ # création du controleur de la table
+ self.controleurTable = C_table(self.tbl)
+
+ # création du controleur pour l'ajout d'une nouvelle ligne
+ self.controleurNouvelleLigneTable = C_nouvelleLigneTableDdl(self.appli, self.controleurTable, self)
+ # ajout de la première ligne
+ self.controleurNouvelleLigneTable.creeBoutons()
+
+ # bouton plus = nouvelle ligne
+ px = QPixmap(os.path.join(os.getenv("EFICAS_ROOT_DIR"), 'share/salome/resources/plus.png'))
+ icon = QIconSet(px)
+ self.boutonPlus = QPushButton(icon, '', self.parent)
+ self.glProprietes.addWidget(self.boutonPlus, 0, 1, Qt.AlignCenter)
+
+ self.connect(self.boutonPlus, SIGNAL('clicked()'), self.controleurNouvelleLigneTable.nouvelleLigne)
+
+ def suivant(self):
+ """
+ met à jour l'étude avec les valeurs des ddls saisies
+ passe au panneau suivant
+ affiche les valeurs mises à jour (simple fonction d'aide)
+ """
+ self.appli.etude.setDdls(self.tbl)
+ PanelBase.suivant(self)
+ self.appli.etude.affiche()
--- /dev/null
+# -*- coding: utf-8 -*-
+
+class Eelih:
+ """
+ représente les données de l'étude :
+ - modelisation = type de modélisation choisie
+ - materiau_e = module d'Young choisi
+ - materiau_nu = coefficient de Poisson choisi
+ - chargements = liste réprésentant les pressions choisies pour les sous-géométries
+ - ddls = liste représentant les valeurs pour les ddls pour les sous-géométries
+ - geometrie = nom de la géométrie sélectionnée dans l'arbre d'étude Salome
+ - sousGeometrie = liste des sous-géométries de la géométrie choisie
+ """
+ def __init__(self):
+ self.modelisation = None
+ self.materiau_e = None
+ self.materiau_nu = None
+ self.chargements = None
+ self.ddls = None
+ self.geometrie = None
+ self.sousGeometrie = None
+
+ def setModelisation(self, val):
+ """
+ fixe la valeur de la modélisation choisie
+ """
+ self.modelisation = val.latin1()
+
+ def setMateriau_e(self, val):
+ """
+ fixe la valeur du module d'Young choisi
+ """
+ self.materiau_e = val
+
+ def setMateriau_nu(self, val):
+ """
+ fixe la valeur du coefficient de Poisson choisi
+ """
+ self.materiau_nu = val
+
+ def setChargements(self, table):
+ """
+ crée la liste des pressions choisies
+ un item de la liste est composé du nom de la sous-géométrie choisie et de la pression à appliquer
+ """
+ self.chargements = []
+ for ligne in range(table.numRows()):
+ # création d'un item
+ liste = []
+ cmb = table.cellWidget(ligne, 0)
+ liste.append(cmb.currentText().latin1())
+ liste.append(table.cellWidget(ligne, 1).text().latin1())
+ # ajout de l'item dans la liste
+ self.chargements.append(liste)
+
+ def setDdls(self, table):
+ """
+ crée la liste des ddls choisies
+ un item de la liste est composé du nom de la sous-géométrie choisie, de l'axe de liberté et de sa valeur
+ """
+ self.ddls = []
+ for ligne in range(table.numRows()):
+ for i in range(1, 4):
+ # création d'un item
+ liste = []
+ cmb = table.cellWidget(ligne, 0)
+ liste.append(cmb.currentText().latin1())
+ th = table.horizontalHeader()
+ liste.append(th.label(i).latin1())
+ liste.append(table.cellWidget(ligne, i).text().latin1())
+ # ajout de l'item dans la liste
+ self.ddls.append(liste)
+
+ def setGeometrie(self, val):
+ """
+ fixe le nom de la géométrie sélectionnée dans l'arbre d'étude
+ """
+ self.geometrie = val
+
+ def setSousGeometrie(self, liste):
+ """
+ crée la liste des sous-géométries de la géométrie sélectionnée
+ """
+ self.sousGeometrie = []
+ for val in liste:
+ if val != '':
+ self.sousGeometrie.append(val)
+
+ def affiche(self):
+ """
+ affiche les différentes valeurs de l'étude
+ (simple fonction d'aide)
+ """
+ print "***********************"
+ print "***** ETUDE ***********"
+ print "***********************"
+ print "modélisation = " + str(self.modelisation)
+ print "module d'Young = " + str(self.materiau_e)
+ print "coeff. de Poisson = " + str(self.materiau_nu)
+ print "géométrie = " + str(self.geometrie)
+ print "sous géométries = " + str(self.sousGeometrie)
+ print "chargements = " + str(self.chargements)
+ print "degrés de libertés = " + str(self.ddls)
--- /dev/null
+import salome
+import eficasCL
+
+Tag_RefOnShape = 1
+dict_CL={}
+
+class CLinit(eficasCL.CLinit):
+ def traiteCL(self):
+ self.get_geoms()
+ self.get_maillages()
+ salome.sg.updateObjBrowser(0)
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules de base
+import sys
+# modules PyQt
+from qt import *
+# modules IHM
+from mainwindow import *
+from appli import *
+
+if __name__ == '__main__':
+ a = QApplication(sys.argv)
+ appli = Appli()
+ a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()'))
+ a.exec_loop()
--- /dev/null
+
+
+DEBUT();
+
+MA=DEFI_MATERIAU(ELAS=_F(E=<balise_E>,
+ NU=<balise_NU>,),);
+
+MAIL=LIRE_MAILLAGE(UNITE=21,
+ FORMAT='MED',
+ INFO_MED=2,);
+
+MODE=AFFE_MODELE(MAILLAGE=MAIL,
+ AFFE=_F(TOUT='OUI',
+ PHENOMENE='MECANIQUE',
+ MODELISATION=<balise_MODELISATION>,),);
+
+MATE=AFFE_MATERIAU(MAILLAGE=MAIL,
+ AFFE=_F(TOUT='OUI',
+ MATER=MA,),);
+
+CHAR=AFFE_CHAR_MECA(MODELE=MODE,
+ FACE_IMPO=_F(GROUP_MA=<balise_CHARGEMENTS>,
+ DX=<balise_DX>,
+ DY=<balise_DY>,
+ DZ=<balise_DZ>,),
+ PRES_REP=_F(GROUP_MA='Bas',
+ PRES=100.0,),);
+
+RESU=MECA_STATIQUE(MODELE=MODE,
+ CHAM_MATER=MATE,
+ EXCIT=_F(CHARGE=CHAR,),);
+
+RESU=CALC_ELEM(reuse =RESU,
+ MODELE=MODE,
+ CHAM_MATER=MATE,
+ RESULTAT=RESU,
+ OPTION=('SIEF_ELGA_DEPL','SIGM_ELNO_DEPL','EQUI_ELNO_SIGM',),
+ EXCIT=_F(
+ CHARGE=CHAR,),);
+
+RESU=CALC_NO(reuse =RESU,
+ RESULTAT=RESU,
+ OPTION=('EQUI_NOEU_SIGM','SIGM_NOEU_DEPL',),);
+
+IMPR_RESU(FORMAT='MED',
+ UNITE=80,
+ RESU=_F(MAILLAGE=MAIL,
+ RESULTAT=RESU,
+ NOM_CHAM=('SIGM_NOEU_DEPL','EQUI_NOEU_SIGM','DEPL',),),);
+
+FIN();
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules de base
+import commands
+import sys
+from tkFileDialog import *
+
+cartouche = "DEBUT();\n\n"
+cartouche = cartouche + "%(MATERIAU)s\n\n"
+cartouche = cartouche + "MAIL=LIRE_MAILLAGE(UNITE=21,\n"
+cartouche = cartouche + " FORMAT='MED',\n"
+cartouche = cartouche + " INFO_MED=2,);\n\n"
+cartouche = cartouche + "%(MODELISATION)s\n\n"
+cartouche = cartouche + "MATE=AFFE_MATERIAU(MAILLAGE=MAIL,\n"
+cartouche = cartouche + " AFFE=_F(TOUT='OUI',\n"
+cartouche = cartouche + " MATER=MA,),);\n\n"
+cartouche = cartouche + "%(CHARGEMENT)s\n\n"
+cartouche = cartouche + "RESU=MECA_STATIQUE(MODELE=MODE,\n"
+cartouche = cartouche + " CHAM_MATER=MATE,\n"
+cartouche = cartouche + " EXCIT=_F(CHARGE=CHAR,),);\n\n"
+cartouche = cartouche + "RESU=CALC_ELEM(reuse =RESU,\n"
+cartouche = cartouche + " MODELE=MODE,\n"
+cartouche = cartouche + " CHAM_MATER=MATE,\n"
+cartouche = cartouche + " RESULTAT=RESU,\n"
+cartouche = cartouche + " OPTION=('SIEF_ELGA_DEPL','SIGM_ELNO_DEPL','EQUI_ELNO_SIGM',),\n"
+cartouche = cartouche + " EXCIT=_F(\n"
+cartouche = cartouche + " CHARGE=CHAR,),);\n\n"
+cartouche = cartouche + "RESU=CALC_NO(reuse =RESU,\n"
+cartouche = cartouche + " RESULTAT=RESU,\n"
+cartouche = cartouche + " OPTION=('EQUI_NOEU_SIGM','SIGM_NOEU_DEPL',),);\n\n"
+cartouche = cartouche + "IMPR_RESU(FORMAT='MED',\n"
+cartouche = cartouche + " UNITE=80,\n"
+cartouche = cartouche + " RESU=_F(MAILLAGE=MAIL,\n"
+cartouche = cartouche + " RESULTAT=RESU,\n"
+cartouche = cartouche + " NOM_CHAM=('SIGM_NOEU_DEPL','EQUI_NOEU_SIGM','DEPL',),),);\n\n"
+cartouche = cartouche + "FIN();"
+
+dict_fichier = {}
+
+class Fichier:
+ """
+ réalise la création du fichier de commandes avec les valeurs saisies à partir de la chaine cartouche
+ - utilisation du % export dico
+ """
+ def __init__(self, appli, salomeRef):
+ self.appli = appli
+
+ # initialisation pour la publication dans l'arbre d'étude
+ self.salome = salomeRef
+
+ def creer(self):
+ """
+ crée le fichier de commandes
+ """
+ # définition de MATERIAU
+ s = 'MA=DEFI_MATERIAU(ELAS=_F(E='
+ tmp = str(self.appli.etude.materiau_e.latin1())
+ s = s + tmp
+ s = s + ', \n'
+ s = s + '\t\t\t NU='
+ tmp = str(self.appli.etude.materiau_nu.latin1())
+ s = s + tmp
+ s = s + ',),);\n\n'
+
+ dict_fichier['MATERIAU'] = s
+
+ # définition de MODELISATION
+ s = 'MODE=AFFE_MODELE(MAILLAGE=MAIL,\n'
+ s = s + "\t\tAFFE=_F(TOUT='OUI',\n"
+ s = s + "\t\t\t\tPHENOMENE='MECANIQUE',\n"
+ s = s + "\t\t\t\tMODELISATION="
+ s = s + "'" + self.appli.etude.modelisation + "'"
+ s = s + ',),);\n\n'
+
+ dict_fichier['MODELISATION'] = s
+
+ # définition des ddls et pressions
+ s = 'CHAR=AFFE_CHAR_MECA(MODELE=MODE,\n'
+ s = s + '\t\t\tFACE_IMPO=('
+ for i in range(0, len(self.appli.etude.ddls), 3):
+ liste = self.appli.etude.ddls[i:i+3]
+ if liste[0][2] == '' and liste[1][2] == '' and liste[2][2] == '':
+ pass
+ else:
+ s = s + "\n\t\t\t\t_F(GROUP_MA='" + str(liste[0][0]) + "',"
+ for i in range(3):
+ if liste[i][2] != '':
+ s = s + "\n\t\t\t\t\t\t" + str(liste[i][1]) + "=" + str(liste[i][2]) + ","
+ s = s + '),'
+ s = s + '),\n'
+
+ s = s + '\t\t\tPRES_REP=('
+ for pres in self.appli.etude.chargements:
+ if pres[1] != '':
+ s = s + "\n\t\t\t\t_F(GROUP_MA='" + pres[0] + "',"
+ s = s + "\n\t\t\t\t\t\tPRES=" + pres[1] + ",),"
+ s = s + "),);"
+
+ dict_fichier['CHARGEMENT'] = s
+
+ ch = cartouche % dict_fichier
+
+ # si flag = E enregistrement manuel du fichier
+ # si flag = A enregistrement automatique
+ if self.appli.flagEficasOrAster == 'A':
+ # ouverture du nouveau fichier en écriture
+ f_temp = open('/tmp/temporaire.comm', 'w')
+
+ # écriture du fichier
+ f_temp.write(ch)
+
+ # fermeture du fichier créé
+ f_temp.close()
+
+ # publication du fichier dans l'arbre d'étude Salome
+ import eficasEtude
+ self.salome.rangeInStudy('/tmp/temporaire.comm')
+ elif self.appli.flagEficasOrAster == 'E':
+ # on demande Ã| l'utilisateur dans quel fichier il veut sauvegarder
+ filesave = asksaveasfilename(defaultextension = '.comm',
+ initialdir = commands.getoutput("echo $HOME"),
+ title="Sauvegarde du fichier de commandes")
+ # ouverture du nouveau fichier en écriture
+ f_temp = open(filesave, 'w')
+ # écriture du fichier
+ f_temp.write(ch)
+ # fermeture du fichier créé
+ f_temp.close()
+
+ # publication du fichier dans l'arbre d'étude Salome
+ import eficasEtude
+ self.salome.rangeInStudy(filesave)
+ else:
+ print "Erreur flag enreigstrement fichier .comm (A pour Aster, E pour Eficas)"
+ sys.exit()
+
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# module de gestion des panneaux
+from panelbase import *
+# modules controleur de la géométrie
+from c_geometrie import *
+# modules de base
+import commands
+import os
+
+class Geometrie(PanelBase):
+ """
+ Hérite de la classe mère PanelBase
+ Définit le panneau pour le choix de la géométrie sur laquelle on veut travailler
+ - pbSelection = bouton pour la sélection dans l'arbre d'étude Salome
+ - ln = lineedit pour l'affichage de la sélection
+ """
+ def __init__(self, parent, appli):
+ # hérite de la classe mère des panneaux
+ PanelBase.__init__(self, parent, appli)
+
+ # on modifie le label titre
+ self.lblTitre.setText('Sélection de la géométrie')
+
+ # on modifie l'explication
+ self.lblExplication.setText("Sélectionnez la géométrie sur laquelle vous souhaitez travailler :")
+
+ # espacement
+ self.sp2 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp2, 3, 0)
+
+ # création d'une QGridLayout
+ self.glProprietes = QGridLayout(self.parent, 1, 4, 5)
+ self.gl.addLayout(self.glProprietes, 4, 0)
+
+ # création d'un horizontalboxlayout
+ self.hbl = QHBoxLayout(self.glProprietes)
+
+ # création du bouton sélection
+ px = QPixmap(os.path.join(os.getenv("EFICAS_ROOT_DIR"), 'share/salome/resources/select1.png'))
+ icon = QIconSet(px)
+ self.pbSelection = QPushButton(icon, '', self.parent)
+ self.pbSelection.setFixedWidth(30)
+ self.pbSelection.setFixedHeight(30)
+ self.hbl.addWidget(self.pbSelection)
+
+ # création du lineedit d'affichage de la géométrie sélectionnée
+ self.ln = QLineEdit('', self.parent)
+ self.ln.setReadOnly(1)
+ self.ln.setMaximumWidth(300)
+ self.hbl.addWidget(self.ln)
+ self.connect(self.ln, SIGNAL('textChanged(const QString&)'), self.valid)
+
+ # création du controleur géométrie
+ self.controleurGeom = C_geometrie(self.appli, self)
+ self.connect(self.pbSelection, SIGNAL('clicked()'), self.controleurGeom.getGeometrie)
+
+ def valid(self):
+ """
+ rend actif le bouton suivant si une géométrie est sélectionnée et si des sous-géométries existent
+ """
+ if self.ln.text() != '':
+ self.btnSuivant.setEnabled(1)
+ else:
+ self.btnSuivant.setEnabled(0)
+
+ def suivant(self):
+ """
+ met à jour les combobox des sous-géométries des tables des panneaux ddl et pression
+ met à jour les maillages associés à cette géométrie dans le panneau maillage
+ affiche le panneau suivant
+ affiche les valeurs saisies (simple fonction d'aide)
+ """
+ self.controleurGeom.updateComboSousGeom()
+ #self.controleurGeom.updateGeomMaillage()
+ #self.controleurGeom.add_selection()
+ PanelBase.suivant(self)
+ self.appli.etude.affiche()
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# module de gestion des panneaux
+from panelbase import *
+# modules controleur géométrie
+from c_geometrie import *
+# modules controleur maillage
+from c_maillage import *
+# modules eficas conditions aux limites
+import eelihCL
+
+class Maillage(PanelBase):
+ """
+ Hérite de la classe mère PanelBase
+ Définit le panneau pour le choix du maillage :
+ - lblGeom2 = label qui donne le nom de la géométrie sélectionnée
+ - lbMaillage = listbox qui donne le(s) maillage(s) équivalent(s) à la géométrie s'il(s) existe(nt)
+ - lnNouveauMaillage = lineedit pour saisir le nom du nouveau maillage si le maillage n'existe pas
+ - cl = conditions aux limites
+ - controleurMaillage = controleur du panneau maillage
+ """
+ def __init__(self, parent, appli):
+ # hérite de la classe mère des panneaux
+ PanelBase.__init__(self, parent, appli)
+
+ # on modifie le label titre
+ self.lblTitre.setText('Définition du maillage')
+
+ # on modifie l'explication
+ self.lblExplication.setText("Définissez un maillage sur lequel s'appliquent les conditions aux limites \nsi celui-ci n'existe pas encore :")
+
+ # espacement
+ self.sp2 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp2, 3, 0)
+
+ # création d'une QGridLayout
+ self.glProprietes = QGridLayout(self.parent, 4, 3, 5)
+ self.gl.addLayout(self.glProprietes, 4, 0)
+
+ # ajout du label géométrie choisie
+ self.lblGeom1 = QLabel('Géométrie choisie :', self.parent)
+ self.glProprietes.addWidget(self.lblGeom1, 0, 0, Qt.AlignRight)
+
+ self.lblGeom2 = QLabel('', self.parent)
+ self.lblGeom2.setPaletteBackgroundColor(QColor(255, 255, 255))
+ self.lblGeom2.setMinimumWidth(200)
+ self.lblGeom2.setMaximumWidth(200)
+ self.lblGeom2.setFrameShape(QFrame.LineEditPanel)
+ self.glProprietes.addWidget(self.lblGeom2, 0, 1, Qt.AlignLeft)
+
+ # ajout du label sous géométrie
+ self.lblSousGeom1 = QLabel('Sous-géométrie :', self.parent)
+ self.glProprietes.addWidget(self.lblSousGeom1, 1, 0, Qt.AlignRight)
+
+ self.lblSousGeom2 = QLabel('', self.parent)
+ self.lblSousGeom2.setPaletteBackgroundColor(QColor(255, 255, 255))
+ self.lblSousGeom2.setMinimumWidth(200)
+ self.lblSousGeom2.setMaximumWidth(200)
+ self.lblSousGeom2.setFrameShape(QFrame.LineEditPanel)
+ self.glProprietes.addWidget(self.lblSousGeom2, 1, 1, Qt.AlignLeft)
+
+ # ajout de la listbox des maillages correspondant à la géométrie
+ self.lblMaillage =QLabel('Sélectionnez le(s) maillage(s) correspondant(s) :', self.parent)
+ self.glProprietes.addWidget(self.lblMaillage, 2, 0, Qt.AlignRight)
+
+ self.lbMaillage = QListBox(self.parent)
+ self.lbMaillage.setMinimumWidth(200)
+ self.lbMaillage.setMaximumWidth(200)
+ self.glProprietes.addWidget(self.lbMaillage, 2, 1, Qt.AlignLeft)
+
+ # ajout du lineedit pour le nom du nouveau maillage si nécessaire
+ self.lblNouveauMaillage = QLabel('Nom du nouveau maillage :', self.parent)
+ self.glProprietes.addWidget(self.lblNouveauMaillage, 3, 0, Qt.AlignRight)
+
+ self.lnNouveauMaillage = QLineEdit(self.parent)
+ self.lnNouveauMaillage.setMinimumWidth(200)
+ self.lnNouveauMaillage.setMaximumWidth(200)
+ self.glProprietes.addWidget(self.lnNouveauMaillage, 3, 1, Qt.AlignLeft)
+
+ self.pb = QPushButton('essai', self.parent)
+ self.glProprietes.addWidget(self.pb, 3, 2, Qt.AlignCenter)
+
+ # c'est le dernier panneau de l'application --> le bouton suivant devient terminer
+ self.btnSuivant.setText('Terminer')
+
+ # conditions aux limites
+ self.cl = None
+
+ # création d'un controleur maillage
+ self.controleurMaillage = C_maillage(self)
+
+ #self.connect(self.btnSuivant, SIGNAL('pressed()'), self.controleurMaillage.traiteMaillage)
+ self.connect(self.pb, SIGNAL('clicked()'), self.controleurMaillage.traiteMaillage)
+ self.connect(self.lbMaillage, SIGNAL('highlighted(int)'), self.controleurMaillage.enableBtnSuivant)
+ self.connect(self.lnNouveauMaillage, SIGNAL('textChanged(const QString&)'), self.controleurMaillage.enableBtnSuivant)
+
+ def suivant(self):
+ """
+ affiche le panneau suivant
+ """
+ print "suivant ------------------------------"
+ PanelBase.suivant(self)
+
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# modules panneau modelisation
+from modelisation import *
+# modules panneau materiau
+from materiau import *
+# modules panneau ddl
+from ddl import *
+# modules panneau pression
+from pression import *
+# modules panneau publication
+from publication import *
+# modules panneau geometrie
+from geometrie import *
+# modules panneau maillage
+from maillage import *
+
+class MainWindow(QMainWindow):
+ """
+ Définit la fenêtre principale de l'application
+ - ws = widgetStack (pile des panneaux à afficher)
+ - listePanels = liste de l'ordre d'affichage des panneaux
+ """
+ def __init__(self, appli):
+ self.appli = appli
+ QMainWindow.__init__(self, None, "Etude élastique linéaire isotrope homogène", Qt.WDestructiveClose)
+ self.setCaption("Etude élastique linéaire isotrope homogène")
+ self.resize(800, 400)
+
+ # création de la pile des panneaux
+ self.ws = QWidgetStack(self)
+ self.ws.show()
+ self.setCentralWidget(self.ws)
+
+ # création des différents panneaux
+ self.modelisation = Modelisation(self.ws, self.appli)
+ self.materiau = Materiau(self.ws, self.appli)
+ self.geometrie = Geometrie(self.ws, self.appli)
+ self.ddl = Ddl(self.ws, self.appli)
+ self.pression = Pression(self.ws, self.appli)
+ #self.maillage = Maillage(self.ws, self.appli)
+ self.publication = Publication(self.ws, self.appli, self.appli.salome)
+
+ # liste d'ordre d'affichage des panneaux
+ self.listePanels = [1, self.modelisation, self.materiau, self.geometrie, self.ddl, self.pression, self.publication]
+
+ # ajout des panneaux dans la pile
+ for wid in self.listePanels[1:]:
+ self.ws.addWidget(wid)
+
+ # affichage du premier panneau
+ self.ws.raiseWidget(self.listePanels[1])
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# module de gestion des panneaux
+from panelbase import *
+# modules validateur lineedit
+from validationlineedit import *
+
+class Materiau(PanelBase):
+ """
+ Hérite de la classe mère PanelBase
+ Définit le panneau pour le choix des propriétés du matériau :
+ - lnE : lineedit du module d'Young
+ - lnNU : lineedit du coefficient de Poisson
+ """
+ def __init__(self, parent, appli):
+ # hérite de la classe mère des panneaux
+ PanelBase.__init__(self, parent, appli)
+
+ # on modifie le label titre
+ self.lblTitre.setText('Propriétés du matériau')
+
+ # on modifie l'explication
+ self.lblExplication.setText("Définissez le module d'Young et le coefficient de Poisson :")
+
+ # espacement
+ self.sp2 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp2, 3, 0)
+
+ # création d'une QGridLayout
+ self.glProprietes = QGridLayout(self.parent, 2, 3, 5)
+ self.gl.addLayout(self.glProprietes, 4, 0)
+
+ # ---------------- création et ajout de E ----------------
+ # ajout du label E
+ self.lblE = QLabel("E (module d'Young) :", self.parent)
+ self.glProprietes.addWidget(self.lblE, 0, 0, Qt.AlignRight)
+ # ajout du lineedit E
+ self.lnE = QLineEdit(self.parent)
+ self.lnE.setMaximumHeight(30)
+ self.lnE.setMaximumWidth(150)
+ self.lnE.setMaxLength(10)
+ self.lnE.setPaletteBackgroundColor(QColor(255, 170, 255))
+ self.glProprietes.addWidget(self.lnE, 0, 1)
+ # ajout du label aide E
+ self.lblAideE = QLabel("( E >= 0 )", self.parent)
+ self.glProprietes.addWidget(self.lblAideE, 0, 2)
+
+ # ---------------- création et ajout de NU ----------------
+ # ajout du label NU
+ self.lblNU = QLabel("NU (coefficient de Poisson) :", self.parent)
+ self.glProprietes.addWidget(self.lblNU, 1, 0, Qt.AlignRight)
+ # ajout du lineedit NU
+ self.lnNU = QLineEdit(self.parent)
+ self.lnNU.setMaximumHeight(30)
+ self.lnNU.setMaximumWidth(150)
+ self.lnNU.setMaxLength(10)
+ self.lnNU.setPaletteBackgroundColor(QColor(255, 170, 255))
+ self.glProprietes.addWidget(self.lnNU, 1, 1)
+ # ajout du label aide NU
+ self.lblAideNU = QLabel("( -1 <= NU <= 0.5 )", self.parent)
+ self.glProprietes.addWidget(self.lblAideNU, 1, 2)
+
+ # connexion des signaux et des slots
+ # dès qu'une valeur est saisie, on teste sa validité
+ # pour E --> ajout du validateur
+ self.validE = ValidationLineEdit(0, 10000000000000, 10000000, self.lnE)
+ self.connect(self.lnE, SIGNAL('textChanged(const QString&)'), self.validE.isValid)
+ self.connect(self.lnE, SIGNAL('textChanged(const QString&)'), self.valid)
+ # pour NU --> ajout du validateur
+ self.validNU = ValidationLineEdit(-1, 0.5, 10, self.lnNU)
+ self.connect(self.lnNU, SIGNAL('textChanged(const QString&)'), self.validNU.isValid)
+ self.connect(self.lnNU, SIGNAL('textChanged(const QString&)'), self.valid)
+
+ def suivant(self):
+ """
+ met à jour l'étude avec les nouvelles valeurs saisies
+ affiche le panneau suivant
+ affiche les nouvelles valeurs de l'étude (simple fonction d'aide)
+ """
+ self.appli.etude.setMateriau_e(self.lnE.text())
+ self.appli.etude.setMateriau_nu(self.lnNU.text())
+ PanelBase.suivant(self)
+ self.appli.etude.affiche()
+
+ def valid(self):
+ """
+ rend valide le bouton suivant si les valeurs saisies sont valides
+ """
+ if self.validE.isValid() and self.validNU.isValid():
+ self.btnSuivant.setEnabled(1)
+ else:
+ self.btnSuivant.setEnabled(0)
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# module de gestion des panneaux
+from panelbase import *
+# modules panneau materiau
+from materiau import *
+# modules controleur panneau modelisation
+from c_modelisation import *
+
+class Modelisation(PanelBase):
+ """
+ Hérite de la classe mère PanelBase
+ Définit le panneau pour le choix de la modélisation :
+ - cmb = combobox pour choisir le type de modélisation
+ """
+ def __init__(self, parent, appli):
+ # hérite de la classe mère des panneaux
+ PanelBase.__init__(self, parent, appli)
+
+ # liste des choix possibles
+ self.listeChoix = ['3D', '2D_CONTRAINTES_PLANES', '2D_DEFORMATIONS_PLANES', '2D_AXISYMETRIQUE']
+
+ # on modifie le label titre
+ self.lblTitre.setText("Modélisation")
+
+ # on modifie l'explication
+ self.lblExplication.setText("Quelle type de modélisation souhaitez-vous réaliser ?")
+
+ # bouton suivant toujours valide
+ self.btnSuivant.setEnabled(1)
+
+ # espacement
+ self.sp2 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp2, 3, 0)
+ #self.gl.setRowSpacing(3, 100)
+
+ # création et ajout du combobox
+ self.cmb = QComboBox(0, self.parent)
+ self.cmb.insertStrList(self.listeChoix)
+ self.cmb.setMaximumWidth(250)
+ self.gl.addWidget(self.cmb, 4, 0, Qt.AlignCenter)
+
+ # création du controleur modelisation
+ self.controleurModelisation = C_modelisation(self)
+
+ self.connect(self.cmb, SIGNAL('activated(const QString&)'), self.controleurModelisation.enableDZ)
+
+ def suivant(self):
+ """
+ met à jour l'étude avec la valeur de la modélisation choisie
+ affiche le panneau suivant
+ affiche les valeurs de l'étude (simple fonction d'aide)
+ """
+ self.appli.etude.setModelisation(self.cmb.currentText())
+ PanelBase.suivant(self)
+ self.appli.etude.affiche()
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+
+class PanelBase(QWidget):
+ """
+ Panneau mère pour tous les panneaux de l'application, se compose de tous les widgets
+ en commun dans tous les panneaux de l'application
+ - lblTitre : titre du panneau
+ - lblExplication : label explication des fonctions du panneau
+ - btnPrecedent : charge le panneau précédent
+ - btnSuivant : charge le panneau suivant
+ """
+ def __init__(self, parent, appli):
+ self.appli = appli
+ QWidget.__init__(self, parent)
+ self.parent =self
+ # création d'une gridlayout pour tous les widgets
+ self.gl = QGridLayout(self.parent, 8, 1)
+
+ # définition et création du label titre
+ self.lblTitre = QLabel("Titre", self.parent)
+ self.lblTitre.setPaletteBackgroundColor(QColor(85, 85, 127))
+ self.lblTitre.setPaletteForegroundColor(QColor(255, 255, 255))
+ self.lblTitre.setAlignment(Qt.AlignCenter)
+ self.lblTitre.setMinimumHeight(60)
+ self.gl.addWidget(self.lblTitre, 0, 0)
+
+ # espacement
+ self.sp1 = QSpacerItem(20, 30, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp1, 1, 0)
+
+ # définition et création du label explication
+ self.lblExplication = QLabel("Explications", self.parent)
+ self.lblExplication.setAlignment(Qt.AlignCenter)
+ self.lblExplication.setMinimumHeight(60)
+ self.gl.addWidget(self.lblExplication, 2, 0)
+
+ # espacement
+ self.sp3 = QSpacerItem(20, 100, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp3, 5, 0)
+
+ # création d'un gridlayout pour les boutons précédent et suivant
+ self.glBoutons = QGridLayout(self.parent, 1, 5)
+ self.gl.addLayout(self.glBoutons, 6, 0)
+ self.glBoutons.setColSpacing(0, 20)
+
+ # définition et création du bouton précédent
+ self.btnPrecedent = QPushButton("Précédent", self.parent)
+ self.btnPrecedent.setMaximumWidth(100)
+ self.glBoutons.addWidget(self.btnPrecedent, 0, 1)
+ self.glBoutons.setColSpacing(2, 200)
+
+ # définition et création du bouton suivant
+ self.btnSuivant = QPushButton("Suivant", self.parent)
+ self.btnSuivant.setMaximumWidth(100)
+ self.btnSuivant.setEnabled(0)
+ self.glBoutons.addWidget(self.btnSuivant, 0, 3)
+ self.glBoutons.setColSpacing(4, 20)
+
+ # espacement
+ self.sp4 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp4, 7, 0)
+
+ # slots et connexions
+ self.connect(self.btnPrecedent, SIGNAL('clicked()'), self.precedent)
+ self.connect(self.btnSuivant, SIGNAL('clicked()'), self.suivant)
+
+ def precedent(self):
+ """
+ affiche le panneau précédent
+ """
+ # on est au premier panneau ->on ne fait rien
+ if self.parentWidget().parentWidget().listePanels[0] <= 1 :
+ pass
+ # sinon on affiche le panneau précédent
+ else:
+ self.parentWidget().parentWidget().listePanels.insert(0, self.parentWidget().parentWidget().listePanels[0] - 1)
+ del self.parentWidget().parentWidget().listePanels[1]
+ self.parentWidget().raiseWidget(self.parentWidget().parentWidget().listePanels[self.parentWidget().parentWidget().listePanels[0]])
+
+ def suivant(self):
+ """
+ affiche le panneau suivant
+ """
+ # on est au dernier niveau -> on close
+ if self.parentWidget().parentWidget().listePanels[0] >= len(self.parentWidget().parentWidget().listePanels) - 1 :
+ self.parentWidget().parentWidget().close()
+ # sinon on affiche le panneau suivant
+ else:
+ self.parentWidget().parentWidget().listePanels.insert(0, self.parentWidget().parentWidget().listePanels[0] + 1)
+ del self.parentWidget().parentWidget().listePanels[1]
+ self.parentWidget().raiseWidget(self.parentWidget().parentWidget().listePanels[self.parentWidget().parentWidget().listePanels[0]])
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+from qttable import QTable
+# module de gestion des panneaux
+from panelbase import *
+# modules validateur lineedit
+from validationlineedit import *
+# modules de gestion des tables
+from c_suppressionLigneTable import *
+from c_nouvelleLigneTablePression import *
+from c_table import *
+# modules de base
+import commands
+
+class Pression(PanelBase):
+ """
+ Hérite de la classe mère PanelBase
+ Définit le panneau pour le choix des pressions à appliquer pour les sous-géométries :
+ - tbl = table pour l'affichage des pressions
+ - controleurTable = controleur de la table
+ - controleurNouvelleLigneTable = controleur pour l'ajout d'une ligne dans la table
+ """
+ def __init__(self, parent, appli):
+ # hérite de la classe mère des panneaux
+ PanelBase.__init__(self, parent, appli)
+
+ # on modifie le label titre
+ self.lblTitre.setText('Pressions imposés')
+
+ # on modifie l'explication
+ self.lblExplication.setText("Définissez le(s) groupe(s) de mailles et les pressions à appliquer :")
+
+ # bouton suivant toujurs actif
+ self.btnSuivant.setEnabled(1)
+
+ # espacement
+ self.sp2 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp2, 3, 0)
+
+ # création d'une QGridLayout
+ self.glProprietes = QGridLayout(self.parent, 1, 2, 5)
+ self.gl.addLayout(self.glProprietes, 4, 0)
+
+ # ---------------- création et ajout du QTable ----------------
+ self.tbl = QTable(1, 3, self.parent)
+ self.tbl.setMinimumHeight(150)
+ self.tbl.setMaximumHeight(200)
+ self.tbl.setColumnWidth(2, 30)
+ self.tbl.setRowHeight(0, 30)
+
+ self.th = self.tbl.horizontalHeader()
+ self.th.setLabel(0, 'Objet')
+ self.th.setLabel(1, 'Pression')
+ self.th.setLabel(2, '')
+
+ self.tbl.verticalHeader().hide()
+ self.tbl.setLeftMargin(0)
+
+ self.glProprietes.addWidget(self.tbl, 0, 0)
+
+ # création du controleur table
+ self.controleurTable = C_table(self.tbl)
+
+ # création du controleur pour ajout d'une nouvelle ligne dans la table
+ self.controleurNouvelleLigneTable = C_nouvelleLigneTablePression(self.appli, self.controleurTable, self)
+ self.controleurNouvelleLigneTable.creeBoutons()
+
+ # bouton plus = nouvelle ligne
+ px = QPixmap(os.path.join(os.getenv("EFICAS_ROOT_DIR"), 'share/salome/resources/plus.png'))
+ icon = QIconSet(px)
+ self.boutonPlus = QPushButton(icon, '', self.parent)
+ self.glProprietes.addWidget(self.boutonPlus, 0, 1, Qt.AlignCenter)
+
+ self.connect(self.boutonPlus, SIGNAL('clicked()'), self.controleurNouvelleLigneTable.nouvelleLigne)
+
+ def suivant(self):
+ """
+ met à jour l'étude avec les valeurs de pressions saisies
+ affiche le panneau suivant
+ affiche les valeurs de l'étude (simple fonction d'aide)
+ """
+ self.appli.etude.setChargements(self.tbl)
+ PanelBase.suivant(self)
+ self.appli.etude.affiche()
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+# module de gestion des panneaux
+from panelbase import *
+# modules de création du fichier de commande
+from fichier import *
+# modules de base
+import commands
+
+import salome
+import SMESH_utils
+import maillage
+
+class Publication(PanelBase):
+ """
+ Hérite de la classe mère PanelBase
+ Définit le panneau pour publier le fichier de commandes dans l'arbre d'études de Salome :
+ """
+ def __init__(self, parent, appli, salomeRef):
+ # hérite de la classe mère des panneaux
+ PanelBase.__init__(self, parent, appli)
+
+ # initialisation pour la publication dans l'arbre d'étude
+ self.salome = salomeRef
+
+ # on modifie le label titre
+ self.lblTitre.setText('Lancement du calcul')
+
+ # on modifie l'explication
+ self.lblExplication.setText("Etes-vous sûr de souhaiter lancer le calcul ?")
+
+ # espacement
+ self.sp2 = QSpacerItem(20, 50, QSizePolicy.Minimum, QSizePolicy.Minimum)
+ self.gl.addItem(self.sp2, 3, 0)
+
+ # changement du bouton suivant
+ self.btnSuivant.setText("Lancer le calcul")
+ self.btnSuivant.setMaximumWidth(150)
+
+ # bouton suivant toujours actif
+ self.btnSuivant.setEnabled(1)
+
+ def suivant(self):
+ """
+ affiche le panneau suivant
+ crée le fichier de commandes associé aux valeurs saisies
+ """
+ # création des groupes de mailles
+ self.add_selection()
+
+ # panneau suivant
+ PanelBase.suivant(self)
+
+ # remplissage du fichier
+ fichier = Fichier(self.appli, self.salome)
+ fichier.creer()
+
+ def convertit_group_maille_from_salome(self,liste_in):
+ """
+ convertit les groupes de maille
+ """
+ newr=[]
+ if [ 1 == 1 ]:
+ for entree in liste_in :
+ travail=[]
+ travail.append(entree)
+ if dict_geom_numgroupe.has_key(entree):
+ r=dict_geom_numgroupe[entree]
+ else:
+ r=SMESH_utils.getAsterGroupMa(salome.myStudy,travail)
+ dict_geom_numgroupe[entree]=r
+ for i in r :
+ newr.append(i)
+ else :
+ print "pas de groupe de maille associé"
+ showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de maille")
+ return newr
+
+ def convertit_entrees_en_valeurs(self,liste_faces):
+ """
+ convertit les entry de l'arbre d'étude en valeur
+ """
+ valeur=self.convertit_group_maille_from_salome(liste_faces)
+ if valeur == []:
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ print "VALEUR", valeur
+ if len(valeur) == 1:
+ valeur = "'" + str(valeur[0]) + "'"
+ return valeur
+
+ def add_selection(self):
+ """
+ retourne le nom des objets sélectionnés dans l'arbre d'étude
+ """
+ entrychaine=salome.sg.getAllSelected()
+ if len(entrychaine) >= 1:
+ print "1 seule géométrie doit être sélectionnée"
+
+ liste_faces = []
+
+ # récupération des sous géométries sélectionnées
+ liste_select = []
+ for sousGeomDdl in self.appli.etude.ddls:
+ if sousGeomDdl[0] not in liste_select:
+ liste_select.append(sousGeomDdl[0])
+ for sousGeomPression in self.appli.etude.chargements:
+ if sousGeomPression[0] not in liste_select:
+ liste_select.append(sousGeomPression[0])
+
+ # transformation des sous geometries en entry
+ for sousGeom in liste_select:
+ SO = salome.myStudy.FindObject(str(sousGeom))
+ liste_faces.append(SO.GetID())
+
+ print "----------------------------------> ", liste_faces
+ self.createMeshPanel(liste_select)
+
+ touteslesvaleurs = self.convertit_entrees_en_valeurs(liste_faces)
+
+ return touteslesvaleurs
+
+ def createMeshPanel(self, listeSousGeomName):
+ """
+ cree autant de panneaux maillages que de sous geometries
+ """
+ self.listeMaillages = []
+ for i in listeSousGeomName:
+ mesh = maillage.Maillage(self.appli.mw.ws, self.appli)
+ self.listeMaillages.append(mesh)
+ self.appli.mw.listePanels.append(mesh)
+ #self.appli.mw.listePanels.insert(0, self.appli.mw.listePanels[0] + 1)
+ #del self.appli.mw.listePanels[1]
+
+ self.updateGeomMaillage(mesh, i)
+
+ def updateGeomMaillage(self, maillage, sousGeom):
+ """
+ affecte le label indiquant la géométrie sélectionnée du panneau maillage
+ affecte la listbox du panneau maillage avec les valeurs des maillages trouvés dans l'arbre d'étude
+ Salome correspondant à la géométrie sélectionnée
+ """
+ # affectation de la géométrie sélectionnée au label du panneau maillage
+ maillage.lblGeom2.setText(str(self.appli.etude.geometrie[0]))
+
+ # affectation de la sous géométrie au label du panneau maillage
+ maillage.lblSousGeom2.setText(str(sousGeom))
+
+ # récupération des mailles correspondants
+ import eelihCL
+ maillage.cl=eelihCL.CLinit()
+ # récupération de l'IOR des sous géométries
+ GEOMIor = []
+ for iorSousGeom in self.appli.mw.geometrie.controleurGeom.dicoSousGeom.keys():
+ GEOMIor.append(iorSousGeom)
+ maillage.cl.GetOrCreateCL(iorSousGeom)
+ #self.appli.mw.maillage.cl.traiteCL()
+ maillage.cl.get_geoms()
+ maillage.cl.get_maillages()
+#
+ maillage.cl.MainShapes(0)
+#
+ listeMaillage = maillage.cl.Possibles(0, str(self.appli.etude.geometrie[0]))
+ # insertion des maillages trouvés dans la listbox du panneau maillage
+ # si aucun maillage on disable la listbox
+ # sinon on disable le lineedit pour donner le nom d'un nouveau maillage
+ if listeMaillage != []:
+ maillage.lbMaillage.insertStrList(listeMaillage)
+ #maillage.lbMaillage.setEnabled(1)
+ #maillage.lblMaillage.setEnabled(1)
+ #maillage.lblNouveauMaillage.setEnabled(0)
+ #maillage.lnNouveauMaillage.setEnabled(0)
+ #else:
+ #maillage.lnNouveauMaillage.setEnabled(1)
+ #maillage.lblNouveauMaillage.setEnabled(1)
+ #maillage.lbMaillage.setEnabled(0)
+ #maillage.lblMaillage.setEnabled(0)
+
+
+
+dict_geom_numgroupe = { }
+dict_geom_numface = { }
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# modules PyQt
+from qt import *
+
+class ValidationLineEdit:
+ """
+ crée un validateur pour un lineedit
+ """
+ def __init__(self, min, max, decimal, widget):
+ """
+ min = valeur minimale à saisir
+ max = valeur maximale à saisir
+ decimal = nombre de chiffres après la virgule autorisé
+ widget = widget associé au validateur
+ """
+ self.widget = widget
+ if min == None and max == None and decimal == None:
+ val = QDoubleValidator(self.widget)
+ else:
+ val = QDoubleValidator(min, max, decimal, self.widget)
+ self.widget.setValidator(val)
+
+ def isValid(self):
+ """
+ si les données saisies dans le widget vérifient le validateur,
+ le widget devient blanc sinon le widget est rose
+ """
+ correct = 0
+ if self.widget.hasAcceptableInput():
+ self.widget.setPaletteBackgroundColor(QColor(255, 255, 255))
+ correct = 1
+ else:
+ self.widget.setPaletteBackgroundColor(QColor(255, 170, 255))
+
+ return correct
+