from Logger import ExtLogger
-import qt
-import notifqt
+#import notifqt
# -----------------------------------------------------------------------------
import sys, os, re,types
sys.path[:0]=[os.path.join( eficasConfig.eficasPath,'Aster'),
os.path.join( eficasConfig.eficasPath,'Homard'),
+ os.path.join( eficasConfig.eficasPath,'InterfaceQT'),
os.path.join( eficasConfig.eficasPath,'InterfaceTK'),
+ os.path.join( eficasConfig.eficasPath,'Openturns'),
os.path.join( eficasConfig.eficasPath,'Editeur'),
eficasConfig.eficasPath,
]
-import Tkinter
# mode de lancement Eficas
ASTER = "ASTER"
HOMARD = "HOMARD"
+OPENTURNS = "OPENTURNS"
import Editeur
try :
- from Editeur import eficas
- from Editeur import splash
+ import qt
+ from InterfaceQT import qtEficas
except :
+ import Tkinter
from InterfaceTK import eficas
from InterfaceTK import splash
import salome
import meshGui
import PALGUI_API
-import studyManager
# __MEM_GBO: on préfère importer visuDriver après studyManager car le premier dépend du second.
# Cependant, le problème est résolu à sa source: le fichier visuDriver importe le studyManager.
# Ainsi, il n'est plus nécessaire de se préoccuper explicitement de l'ordre des import.
+import studyManager
import visuDriver
#from qxembed import QXEmbed
-
-#class MyEficas( Tkinter.Toplevel, eficas.EFICAS, QXEmbed ):
-class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
+class MyEficas( qtEficas.Appli ):
"""
Classe de lancement du logiciel EFICAS dans SALOME.
Cette classe spécialise le logiciel Eficas par l'ajout de:
@type code: string
- @param code: catalogue à lancer ( ASTER, HOMARD ). optionnel ( défaut = ASTER ).
+ @param code: catalogue à lancer ( ASTER, HOMARD OPENTURNS ). optionnel ( défaut = ASTER ).
@type fichier: string
@param fichier: chemin absolu du fichier eficas à ouvrir à dès le lancement. optionnel
"""
- #QXEmbed.__init__( self, parent, "", qt.Qt.WDestructiveClose | qt.Qt.WStyle_Customize | qt.Qt.WStyle_StaysOnTop )
- Tkinter.Toplevel.__init__( self )
if Editeur.__dict__.has_key( 'session' ):
from Editeur import session
if fichier:
eficasArg += [ fichier ]
if version:
+ print version
eficasArg += [ "-c", version ]
+ else :
+ print "noversion"
session.parse( eficasArg )
-
- #---------------------------------------- initialisation EFICAS --------------------------
- splash.init_splash( self, code = code, titre = "Lancement d'EFICAS pour %s" %code )
- splash._splash.configure( text="Chargement d'EFICAS en cours.\n Veuillez patienter ..." )
- # différence eficas 1.7 et 1.8
-
- # compatibilite 1.12
- V112=0
- try :
- from Editeur import appli
- V112=1
- except :
- pass
-
- if V112 :
- eficas.EFICAS.__init__( self, self, code = code )
- else :
- eficas.EFICAS.__init__( self, self, code = code , salome = 1)
-
-
- #---------------------------------------------------------------------------------------------
-
-
- """
- #------ embarcation dans une fenêtre qt pour mise au premier plan ---
- #embedded = QXEmbed( parent, "", qt.Qt.WDestructiveClose | qt.Qt.WStyle_Customize | qt.Qt.WStyle_StaysOnTop )
- embedded = QXEmbed( parent, "" )
- #embedded.initialize()
- embedded.show()
- embedded.embedTk( self.winfo_id() )
- size = embedded.sizeHint()
- #print 'CS_pbruno size (%s, %s )'%( size.width(), size.height () )
- embedded.resize( size.width(), size.height () )
- embedded.setWFlags( qt.Qt.WDestructiveClose | qt.Qt.WStyle_Customize | qt.Qt.WStyle_StaysOnTop )
- #---------------------------------------------------------------------------------------------
- """
+ qtEficas.Appli.__init__( self,code=code,salome=1,parent=parent)
#--------------- spécialisation EFICAS dans SALOME -------------------
self.parent = parent
#----------------------------------------------------------------------
self.icolor = 0 # compteur pour mémoriser la couleur courante
+ self.show()
- def quit(self):
- global appli
- appli = None
- self.destroy()
-
- def destroy(self):
+ def closeEvent(self,event):
+ import InterfaceQT.readercata
+ if hasattr(InterfaceQT.readercata,'reader') :
+ del InterfaceQT.readercata.reader
global appli
appli = None
- Tkinter.Toplevel.destroy(self)
-
+ event.accept()
+
def __studySync( self ):
"""
IMPORTANT( à appeler préalablement à chaque appel du gestionnaire d'étude ) : spécifique au lancement de Eficas dans Salome,
- def __selectMainShape( self, groupeMaNamesIn, groupeNoNamesIn, jdcID ):
+ def __selectMainShape( self, groupeMaNamesIn, groupeNoNamesIn, editor ):
"""
Sélection intéractive de la main shape
"""
else:
selectedMainShape = mainShapeEntries[0]
- self.mainShapeEntries[ jdcID ] = selectedMainShape
+ self.mainShapeEntries[ editor ] = selectedMainShape
# filtre sur la main shape sélectionnée
for name in groupeMaNamesIn:
- def __selectShape( self, jdcID, selectedEntry, kwType = None ):
+ def __selectShape( self, editor, selectedEntry, kwType = None ):
"""
sélection sous-géométrie dans Salome:
-test1) si c'est un élément sous-géométrique .
name, msgError = '', msgErrorGroupMaSelection
return name, msgError
- if not self.mainShapeEntries.has_key( jdcID ):
- self.mainShapeEntries[ jdcID ] = selectedMainShapeEntry
+ if not self.mainShapeEntries.has_key( editor ):
+ self.mainShapeEntries[ editor ] = selectedMainShapeEntry
name = studyManager.palStudy.getName( selectedMainShapeEntry )
msgError = msgMainShapeSelection + name
- if selectedMainShapeEntry == self.mainShapeEntries[ jdcID ]:
+ if selectedMainShapeEntry == self.mainShapeEntries[ editor ]:
name = studyManager.palStudy.getName( selectedEntry )
self.subShapes[ selectedEntry ] = name
else:
- if not self.mainShapeNames.has_key( jdcID ):
- self.mainShapeNames[ jdcID ] = studyManager.palStudy.getName( self.mainShapeEntries[ jdcID ] )
- msgError = msgSubShapeBadMainShape + self.mainShapeNames[ jdcID ]
+ if not self.mainShapeNames.has_key( editor ):
+ self.mainShapeNames[ editor ] = studyManager.palStudy.getName( self.mainShapeEntries[ editor ] )
+ msgError = msgSubShapeBadMainShape + self.mainShapeNames[ editor ]
else:
name, msgError = '', msgErrorNeedSubShape
- def __selectMeshGroup( self, jdcID, selectedEntry, kwType = None ):
+ def __selectMeshGroup( self, editor, selectedEntry, kwType = None ):
"""
sélection groupe de maille dans Salome:
-test 1) si c'est un groupe de maille
selectedMainShapeEntry = studyManager.palStudy.getShapeFromMesh( selectedMeshEntry )
if selectedMainShapeEntry: #test 2)
- if not self.mainShapeEntries.has_key( jdcID ):
- self.mainShapeEntries[ jdcID ] = selectedMainShapeEntry
+ if not self.mainShapeEntries.has_key( editor ):
+ self.mainShapeEntries[ editor ] = selectedMainShapeEntry
name = studyManager.palStudy.getName( selectedMainShapeEntry )
msgError = msgMainShapeSelection + name
- if selectedMainShapeEntry == self.mainShapeEntries[ jdcID ]:
+ if selectedMainShapeEntry == self.mainShapeEntries[ editor ]:
name = studyManager.palStudy.getName( selectedEntry ) #ok test 2)
else:
- if not self.mainShapeNames.has_key( jdcID ):
- self.mainShapeNames[ jdcID ] = studyManager.palStudy.getName(
- self.mainShapeEntries[ jdcID ] )
- msgError = msgMeshGroupBadMainShape + self.mainShapeNames[ jdcID ]
+ if not self.mainShapeNames.has_key( editor ):
+ self.mainShapeNames[ editor ] = studyManager.palStudy.getName(
+ self.mainShapeEntries[ editor ] )
+ msgError = msgMeshGroupBadMainShape + self.mainShapeNames[ editor ]
else:
# on authorise quand même les groupes de maillage ne faisant
# pas référence à une géométrie principale (dixit CS_CBO )
- def __updateSubShapes( self, jdcID, groupeNames ):
+ def __updateSubShapes( self, editor, groupeNames ):
"""
mise à jours de la liste self.subShapes à partir de la liste des noms de groupe fourni en entré
"""
entries = studyManager.palStudy.getEntriesFromName( studyManager.SGeom, name )
for entry in entries:
if not self.subShapes.has_key( entry ):
- ok, msgError = self.__selectShape( jdcID, entry ) # filtre
+ ok, msgError = self.__selectShape( editor, entry ) # filtre
if ok:
self.subShapes[ entry ] = name
"""
groupMa = ()
try:
+ #if 1 :
itemName = item.get_nom()
if 'GROUP_MA' in itemName:
- #print 'CS_pbruno itemName',itemName
itemValue = item.get_valeur()
if type( itemValue ) == str:
groupMa += ( itemValue , )
elif type( itemValue ) == types.InstanceType and itemValue.has_key('GROUP_MA'):
# pour créer le groupe de mailles dans DEFI_GROUP> CREA_GROUP_MA> GROUP_MA
groupMa += ( itemValue['GROUP_MA'], )
+ else :
+ # sert pour DEFI_GROUP_MA / UNION
+ mc=item.get_definition()
+ if type( mc ) == types.InstanceType :
+ children = item._GetSubList()
+ for child in children:
+ try :
+ if 'grma' in repr(child.get_definition().type[0]) :
+ val=tuple(child.get_valeur())
+ groupMa += val
+ except :
+ pass
else:
children = item._GetSubList()
for child in children:
groupMa += self.__getAllGroupeMa( child )
except:
+ #else :
# traitement des MCLIST Pour CREA_GROUP_MA
try:
itemName = item.get_nom()
#----------------------- LISTE DES NOUVEAUX CAS D'UTILISATIONS -----------
- def selectGroupFromSalome( self, kwType = None):
+ def selectGroupFromSalome( self, kwType = None, editor=None):
"""
Sélection d'élément(s) d'une géométrie ( sub-shape ) ou d'élément(s) de maillage ( groupe de maille) à partir de l'arbre salome
retourne ( la liste des noms des groupes, message d'erreur )
Note: Appelé par EFICAS lorsqu'on clique sur le bouton ajouter à la liste du panel AFF_CHAR_MECA
"""
names, msg = [], ''
- try:
+ #try:
+ if 1 :
+ self.editor=editor
atLeastOneStudy = self.__studySync()
if not atLeastOneStudy:
return names, msg
entries = salome.sg.getAllSelected()
nbEntries = len( entries )
if nbEntries >= 1:
-# jdcID = self.bureau.nb.getcurselection()
- jdcID = self.bureau.JDCDisplay_courant
for entry in entries:
if studyManager.palStudy.isMeshGroup( entry ): #sélection d'un groupe de maille
- name, msg = self.__selectMeshGroup( jdcID, entry, kwType )
+ name, msg = self.__selectMeshGroup( editor, entry, kwType )
elif studyManager.palStudy.isShape( entry ): #sélection d'une sous-géométrie
- name, msg = self.__selectShape( jdcID, entry, kwType )
+ name, msg = self.__selectShape( editor, entry, kwType )
else:
name, msg = '', msgUnAuthorizedSelecion
if name:
if names and len( names ) < nbEntries:
msg = msgIncompleteSelection
salome.sg.EraseAll()
- except:
+ #except:
+ else:
logger.debug(50*'=')
return names, msg
Ajoute le Jeu De Commande ASTER ou HOMARD dans l'arbre d'étude Salome dans la rubrique EFICAS
"""
ok, msgError = False, msgErrorAddJdcInSalome
- try:
+ #try:
+ if 1:
atLeastOneStudy = self.__studySync()
if not atLeastOneStudy:
return ok, msgError
- fileType = { 'ASTER': studyManager.FICHIER_EFICAS_ASTER,
- 'HOMARD': studyManager.FICHIER_EFICAS_HOMARD }
+ fileType = { 'ASTER' : studyManager.FICHIER_EFICAS_ASTER,
+ 'HOMARD' : studyManager.FICHIER_EFICAS_HOMARD ,
+ 'OPENTURNS': studyManager.FICHIER_EFICAS_OPENTURNS}
- folderName = { 'ASTER': 'AsterFiles',
- 'HOMARD': 'HomardFiles' }
+ folderName = { 'ASTER' : 'AsterFiles',
+ 'HOMARD' : 'HomardFiles' ,
+ 'OPENTURNS': 'OpenturnsFiles'}
+
+ folderType = { 'ASTER': studyManager.ASTER_FILE_FOLDER,
+ 'HOMARD': studyManager.ASTER_FILE_FOLDER,
+ 'OPENTURNS': studyManager.OPENTURNS_FILE_FOLDER
+ }
+
moduleEntry = studyManager.palStudy.addComponent(self.module)
itemName = re.split("/",jdcPath)[-1]
fatherEntry = studyManager.palStudy.addItem(
moduleEntry,
- itemName = folderName[self.bureau.code],
+ itemName = folderName[self.code],
itemIcon = "ICON_COMM_FOLDER",
- itemType = studyManager.ASTER_FILE_FOLDER,
+ itemType = folderType[self.code],
bDoublonCheck = True )
commEntry = studyManager.palStudy.addItem( fatherEntry ,
itemName = itemName,
- itemType = fileType[ self.bureau.code ],
+ itemType = fileType[ self.code ],
itemValue = jdcPath,
itemComment = str( jdcPath ),
itemIcon = "ICON_COMM_FILE",
print 'addJdcInSalome commEntry->', commEntry
if commEntry:
ok, msgError = True, ''
- except:
+ #except:
logger.debug(50*'=')
return ok, msgError
- def createOrUpdateMesh( self ):
+ def createOrUpdateMesh( self, editor ):
"""
Ouverture d'une boite de dialogue : Creation de groupes de mailles dans un maillage existant ou un nouveau maillage.
Note: Appelé par EFICAS à la sauvegarde du JDC.
if not atLeastOneStudy:
return
-# jdcID = self.bureau.nb.getcurselection()
- jdcID = self.bureau.JDCDisplay_courant
-
- groupeMaNames = self.__getAllGroupeMa( self.bureau.JDCDisplay_courant.tree.item )
- groupeNoNames = self.__getAllGroupeNo( self.bureau.JDCDisplay_courant.tree.item )
+ groupeMaNames = self.__getAllGroupeMa( editor.tree.item )
+ groupeNoNames = self.__getAllGroupeNo( editor.tree.item )
# on elimine les doublons de la liste
groupeMaNames = dict.fromkeys(groupeMaNames).keys()
groupeNoNames = dict.fromkeys(groupeNoNames).keys()
- print 'CS_pbruno createOrUpdateMesh groupeMaNames', groupeMaNames
- print 'CS_pbruno createOrUpdateMesh groupeNoNames', groupeNoNames
+ #print 'CS_pbruno createOrUpdateMesh groupeNoNames', groupeNoNames
# mise à jours de la liste des sous-géométrie ( self.subShapes )
- if not self.mainShapeEntries.has_key( jdcID ):
+ if not self.mainShapeEntries.has_key( editor ):
# l'utilisateur n'a sélectionné aucune sous-géométrie et donc pas de géométrie principale
- groupeMaNames, groupeNoNames = self.__selectMainShape( groupeMaNames, groupeNoNames, jdcID )
+ groupeMaNames, groupeNoNames = self.__selectMainShape( groupeMaNames, groupeNoNames, editor )
if groupeMaNames or groupeNoNames:
print 'CS_pbruno createOrUpdateMesh groupeMaNames', groupeMaNames
print 'CS_pbruno createOrUpdateMesh groupeNoNames', groupeNoNames
- self.__updateSubShapes( jdcID, groupeMaNames + groupeNoNames )
+ self.__updateSubShapes( editor, groupeMaNames + groupeNoNames )
# recupération des identifiants( entries ) associés aux noms des groupes
groupeMaEntries = []
if groupeMaEntries or groupeNoEntries:
diag = meshGui.MeshUpdateDialogImpl(
- self.mainShapeEntries[jdcID],
+ self.mainShapeEntries[editor],
groupeMaEntries,
groupeNoEntries,
studyManager.palStudy,
ok, msgError = False, ''
try:
sg = salome.ImportComponentGUI('SMESH')
- currentjdcID = self.bureau.nb.getcurselection()
+ currentjdcID = self.editor.nb.getcurselection()
meshGroupEntries = []
selMeshEntry = None
selMeshGroupEntry = None
initialdir = fichier)
f=open(sauvegarde,'w+')
for unite in dico.keys():
- print unite
type=dico[unite][0]
fic=dico[unite][1:]
ligne="fort."+str(unite)+" "+type+" "+fic
f.close()
self.rangeInStudy(sauvegarde)
print "==============================="
- print "fin crreConfigTxt"
"""
pass #CS_pbruno à implémenter
#
def envoievisu(self,liste_commandes):
- #try:
- if ( 1 == 1 ):
+ try:
+ #if ( 1 == 1 ):
atLeastOneStudy = self.__studySync()
if not atLeastOneStudy:
return
monId = monDriver.analyse()
PALGUI_API.displaySE(monId)
- else:
- #except:
- print "boum dans envoievisu"
+ #else:
+ except:
+ print "pb dans envoievisu"
#
def runEficas( code="ASTER", fichier=None, module = studyManager.SEficas, version=None ):
global appli
+ print code
+ print fichier
if not appli: #une seul instance possible!
appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier, module = module, version=version )
-# Init globale du module
-root = Tkinter.Tk()
-root.withdraw()
-
appli = None