]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
*** empty log message ***
authorPascale Noyret <pascale.noyret@edf.fr>
Thu, 15 Oct 2009 15:17:48 +0000 (15:17 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Thu, 15 Oct 2009 15:17:48 +0000 (15:17 +0000)
src/EFICASGUI/colors.py
src/EFICASGUI/eficasSalome.py

index 8ff6391753174df5592aeb33d822769b30a96d8e..7a2eccddd88599df37c5833702e9d3ea0c3256f9 100644 (file)
@@ -1,17 +1,18 @@
 # Liste de couleurs pour visualisation
-RED   = 255,0,0
-GREEN = 0,255,0
-BLUE  = 0,0,255
-
-SANDY  = 255,0,128
-ORANGE = 255,128,0
-PURPLE = 128,0,255
-
+RED        = 255,0,0
+GREEN      = 0,255,0
+BLUE       = 0,0,255
+SANDY      = 255,0,128
+ORANGE     = 255,128,0
+PURPLE     = 128,0,255
 DARK_RED   = 128,0,0
 DARK_GREEN = 0,128,0
 DARK_BLUE  = 0,0,128
+YELLOW     = 255,255,0
+PINK       = 255,0,255
+CYAN       = 0,255,255
+
+ListeColors= (RED, GREEN, BLUE, SANDY,ORANGE , PURPLE, DARK_RED,DARK_GREEN,DARK_BLUE,YELLOW,PINK,CYAN  )
+
 
-YELLOW = 255,255,0
-PINK   = 255,0,255
-CYAN   = 0,255,255
 
index b4f19c5b53cf154936f946c0d75dce530ce4e385..bd6df7e65b3e85d9f552601e4e5bf4ac06723bb6 100644 (file)
@@ -1,29 +1,13 @@
 # -*- coding: utf-8 -*-
+#_____________________________________
 
-from pal.logger import ExtLogger
-logger=ExtLogger( "EFICAS_SRC.EFICASGUI.eficasSalome.py" )
-
-# -----------------------------------------------------------------------------
 import sys, os, re,types
 
+from pal.logger import ExtLogger
+logger=ExtLogger( "EFICAS_SRC.EFICASGUI.eficasSalome.py" )
 
-
-"""
-# Remplacement de la fonction exit standard par une fonction
-# qui n'interrompt pas l'execution
-
-sys._exit=sys.exit
-
-def exit(ier):
-   print "appel de exit: ",ier
-
-
-# Fin remplacement
-"""
-
-
-import eficasConfig
-
+import eficasConfig 
+# eficasConfig definit le EFICAS_ROOT
 # lignes de path ajoutees pour acceder aux packages python du
 # logiciel Eficas. Le package Aster est ajoute explicitement pour
 # acceder au module prefs.py. A
@@ -33,16 +17,6 @@ sys.path[:0]=[eficasConfig.eficasPath,
               eficasConfig.eficasPath,
              ]
 
-print sys.path
-
-
-
-# mode de lancement Eficas
-ASTER  = "ASTER"
-HOMARD = "HOMARD"
-OPENTURNS = "OPENTURNS"
-SEP = "SEP"
-
 
 import Editeur    
 from InterfaceQT4 import qtEficas
@@ -55,46 +29,17 @@ import SalomePyQt
 from pal.studyedit import StudyEditor
 monEditor=StudyEditor()
 
-# message utilisateur
-msgWarning                 = "Attention"
-msgMainShapeSelection      = "On travaille sur la geometrie principale : "
-msgSubShapeBadMainShape    = "La selection geometrique SALOME ne correspond pas a une sous-geometrie de la geometrie principale : "
-msgMeshGroupBadMainShape   = "Le groupe de maillage selectionne dans SALOME ne reference pas la bonne geometrie principale : "
-msgIncompleteSelection     = "Tous les elements de la selection SALOME n'ont pu etre ajoutee"
-msgUnAuthorizedSelecion    = "Selection SALOME non authorise. Autorise : sous-geometrie, groupe de maille"
-msgErrorAddJdcInSalome     = "Erreur dans l'export du fichier de commande dans l'arbre d'etude Salome"
-msgErrorDisplayShape       = "Erreur dans l'affichage de la forme geometrique selectionnee"
-msgErrorDisplayMeshGroup   = "Erreur dans l'affichage du groupe de maillage selectionne"
-msgErrorNeedSubShape       = "Selection d'un element sous geometrique seulement"
-
-
-msgErrorGroupMaSelection    = "Selection GROUP_MA ne peut pas prendre un point ou un noeud"
-msgWarningGroupNoSelection  = "Attention, GROUP_NO devrait prendre un point ou un noeud"
-
 
 
 # couleur pour visualisation des geometries 
-
 import colors
-COLORS = ( colors.RED, 
-         colors.GREEN,
-         colors.BLUE,
-         colors.SANDY,
-         colors.ORANGE,
-         colors.PURPLE,
-         colors.DARK_RED,
-         colors.DARK_GREEN,
-         colors.DARK_BLUE,
-         colors.YELLOW,
-         colors.PINK,
-         colors.CYAN )
-
+COLORS = colors.ListeColors
 LEN_COLORS = len( COLORS )
 
 
 class MyEficas( qtEficas.Appli ):
     """
-    Classe de lancement du logiciel EFICAS dans SALOME.
+    Classe de lancement du logiciel EFICAS dans SALOME
     Cette classe specialise le logiciel Eficas par l'ajout de:        
     a)la creation de groupes de mailles dans le composant SMESH de SALOME
     b)la visualisation d'elements geometrique dans le coposant GEOM de SALOME par selection dans EFICAS
@@ -135,14 +80,10 @@ class MyEficas( qtEficas.Appli ):
         
         # donnee pour la creation de groupe de maille
         self.mainShapeNames   = {} #dictionnaire pour gerer les multiples fichiers possibles ouverts par 
-        self.mainShapeEntries = {} #eficas ( cle = identifiant du JDC ), une mainshape par fichier ouvert.    
-        self.subShapes        = {} #dictionnaire des sous-geometrie de la geometrie principale ( cle = entry, valeur = name ) 
+                                   #eficas ( cle = identifiant du JDC ), une mainshape par fichier ouvert.    
+                                   #dictionnaire des sous-geometrie de la geometrie principale ( cle = entry, valeur = name ) 
         #----------------------------------------------------------------------    
         
-        # visualisation groupes de mailles
-        self.workingMesh = {} #dictionnaire cle = identifiant JDC / valeur = entry Mesh
-        #----------------------------------------------------------------------        
-        
         self.icolor = 0  # compteur pour memoriser la couleur courante
         self.show()
         
@@ -155,316 +96,62 @@ class MyEficas( qtEficas.Appli ):
         appli = None
         event.accept()
      
-        
-                        
-    def __selectWorkingMesh( self, meshGroupEntries ):
-        """
-        Selection interactive du maillage sur lequel on travail
-        """
-        selMeshEntry, keep = None, False
-        diag = SelectMeshDiagImpl( meshGroupEntries, self.parent  )
-    
-        if diag.exec_loop() == qt.QDialog.Accepted:
-            selMeshEntry, keep = diag.getUserSelection()
-        return selMeshEntry, keep    
-            
-
-
-    def __selectMainShape( self, groupeMaNamesIn, groupeNoNamesIn, editor ):
-        """
-        Selection interactive de la main shape
-        """
-        groupeMaNamesOut, groupeNoNamesOut = [], []
-        selectedMainShape  =  None
-        mainShapes = {}
-        mainShapeEntries = []
-
-        # liste des main shape possibles
-        for groups in ( groupeMaNamesIn, groupeNoNamesIn ):
-            for subShapeName in groups:
-                entries = getEntriesFromName(self, "GEOM", subShapeName )
-           
-                for entry in entries:
-                    mainShapeEntry = self.getMainShapeEntry( entry )
-                    if mainShapeEntry != entry:
-                        if mainShapes.has_key(subShapeName):
-                            mainShapes[ subShapeName ].append( mainShapeEntry )
-                        else:
-                            mainShapes[ subShapeName ] = [ mainShapeEntry ]
-                        if not mainShapeEntry in mainShapeEntries:
-                            mainShapeEntries += [ mainShapeEntry ]
-        
-        if mainShapes:
-            if len(mainShapeEntries)>1:
-                diag = SelectMainShapeDiagImpl( mainShapeEntries, self.parent  )
-        
-                if diag.exec_loop() == qt.QDialog.Accepted:
-                    selectedMainShape = diag.getUserSelection()                
-                    print 'main shape user selection ->',selectedMainShape
-
-            else:
-                selectedMainShape = mainShapeEntries[0]
-            
-            self.mainShapeEntries[ editor ] = selectedMainShape
-                    
-            # filtre sur la main shape selectionnee
-            for name in groupeMaNamesIn:
-                try:
-                    if selectedMainShape in mainShapes[ name ] :
-                        groupeMaNamesOut += [ name ]
-                except:
-                    pass
-            
-            for name in groupeNoNamesIn:
-                try:
-                    if selectedMainShape in mainShapes[ name ] :
-                        groupeNoNamesOut += [ name ]
-                except:
-                    pass
-                        
-        return groupeMaNamesOut, groupeNoNamesOut
-
-
-
-
-    def __selectShape( self, editor, selectedEntry, kwType = None ):
-        """
-        selection sous-geometrie dans Salome:
-        -test1) si c'est un element sous-geometrique .
-        -test2) si appartient a la geometrie principale.
-        
-        met a jours la liste self.subShapes si test ok
-        """        
-        name, msgError = '',''
-        
-        selectedMainShapeEntry = self.getMainShapeEntry( selectedEntry )
-        if selectedMainShapeEntry and selectedMainShapeEntry != selectedEntry: #ok test1)
-            
-            #PNPNPNPN a Revoir
-            tgeo=self.getShapeType(  selectedEntry )
-            if kwType == "GROUP_NO" and tGeo != "VERTEX":                
-                msgError = msgWarningGroupNoSelection
-            elif kwType == "GROUP_MA" and tGeo == "VERTEX":
-                name, msgError = '', msgErrorGroupMaSelection                
-                return name, msgError            
-                            
-            if not self.mainShapeEntries.has_key( editor ):
-                self.mainShapeEntries[ editor ] = selectedMainShapeEntry
-                mySO=monEditor.study.FindObjectID(selectedMainShapeEntry )
-                if  mySO:
-                    name = mySO.GetName()
-                msgError = msgMainShapeSelection + name
-            if selectedMainShapeEntry == self.mainShapeEntries[ editor ]:
-                mySO=monEditor.study.FindObjectID(selectedMainShapeEntry )
-                if  mySO:
-                    name = mySO.GetName()
-                self.subShapes[ selectedEntry ] = name                
-            else:                
-                if not self.mainShapeNames.has_key( editor ):
-                    mySO=monEditor.study.FindObjectID(self.mainShapeEntries[ editor ])
-                    if  mySO:
-                        self.mainShapeNames[ editor ] = mySO.GetName()
-                msgError = msgSubShapeBadMainShape + self.mainShapeNames[ editor ]                
-        else:
-            name, msgError = '', msgErrorNeedSubShape
-
-        return name, msgError 
-        
-        
-        
-    def __selectMeshGroup( self, editor, selectedEntry, kwType = None ):
-        """
-        selection groupe de maille dans Salome:
-        -test 1) si c'est un groupe de maille 
-        -test 2) si le maillage fait reference a la geometrie principale 
-        """        
-        name, msgError = '',''                
-                
-        mySO=monEditor.study.FindObjectID(selectedEntry )
-        from pal.smeshstudytools import SMeshStudyTools
-        monSMeshStudyTools=SMeshStudyTools(monEditor)
-        selectedMeshEntry = monSMeshStudyTools.getMeshFromGroup(mySO)
-
-                
-        if selectedMeshEntry: # ok test 1)            
-            tGroup = ""
-            mySO = self._myStudy.FindObjectID(selectedEntry)
-            if mySO:
-                groupObject = mySO.GetObject()
-                if not groupObject:
-                    mycomponent = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-                    SCom        = monEditor.study.FindComponent( "SMESH" )
-                    monEditor.builder.LoadWith( SCom , myComponent  )
-                    groupObject      = mySO.GetObject()
-            if not groupObject :
-               logger.debug("selectedMeshEntry: An error occurs")
-               
-            
-            import SMESH
-            aGroup = groupObject._narrow( SMESH.SMESH_GroupBase )
-            if aGroup: tGroup = aGroup.GetType()
-
-            #PNPNPNPN bizarre
-            if kwType == "GROUP_NO" and tGroup != SMESH.NODE:                
-                msgError = msgWarningGroupNoSelection
-            elif kwType == "GROUP_MA" and tGroup == SMESH.NODE:
-                name, msgError = '', msgErrorGroupMaSelection                
-                return name, msgError                        
-                        
-            mySO = self._myStudy.FindObjectID(selectedMeshEntry)
-            if mySO:
-                object = mySO.GetObject()
-                if not object:
-                    mycomponent = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-                    SCom        = monEditor.study.FindComponent( "SMESH" )
-                    monEditor.builder.LoadWith( SCom , myComponent  )
-                    object      = mySO.GetObject()
-            if not object :
-               logger.debug("selectedMainShapeEntry: An error occurs")
-
-            mesh     = object._narrow( SMESH.SMESH_Mesh  )
-            if mesh: #Ok, c'est bien un objet maillage
-                shape = mesh.GetShapeToMesh()
-                if shape:
-                    ior = salome.orb.object_to_string( shape )
-                    if ior:
-                       sObject   = currentStudy.FindObjectIOR(  ior )
-                       selectedMainShapeEntry = sObject.GetID()
-                else:
-                    selectedMainShapeEntry=0
-                    logger.debug( 'SalomeStudy.getShapeFromMesh( meshEntry = %s ) ' %meshEntry )
-
-            
-            if selectedMainShapeEntry: #test 2)                
-                if not self.mainShapeEntries.has_key( editor ):
-                    self.mainShapeEntries[ editor ] = selectedMainShapeEntry
-                    mySO=monEditor.study.FindObjectID(selectedMainShapeEntry )
-                    if  mySO:
-                        name = mySO.GetName()
-                    msgError = msgMainShapeSelection + name                    
-                if selectedMainShapeEntry == self.mainShapeEntries[ editor ]:
-                    mySO=monEditor.study.FindObjectID(selectedEntry )
-                    if  mySO:
-                        name = mySO.GetName()
-                else:                    
-                    if not self.mainShapeNames.has_key( editor ):
-                       mySO=monEditor.study.FindObjectID(self.mainShapeEntries[ editor ])
-                       if  mySO:
-                            self.mainShapeNames[ editor ] = mySO.GetName()
-                    msgError = msgMeshGroupBadMainShape + self.mainShapeNames[ editor ]
-            else:
-                # on authorise quand meme les groupes de maillage ne faisant 
-                # pas reference a une geometrie principale (dixit CS_CBO )
-                mySO=monEditor.study.FindObjectID(selectedEntry )
-                if  mySO:
-                    name = mySO.GetName()
-                                          
-        return name, msgError
-        
-    
-        
-    def __getAllGroupeMa(self, item ):
-        """
-        Recupere tous les GROUPE_MA dans le JDC courant
-        """
-        groupMa = ()                
-        try:
-        #if 1 :
-            itemName  = item.get_nom()
-            if 'GROUP_MA' in itemName:
-                itemValue = item.get_valeur()
-                if type( itemValue ) == str:
-                    groupMa += ( itemValue , )
-                elif type( itemValue ) == tuple:
-                    groupMa += itemValue                
-               elif type( itemValue ) == list:
-                   groupMa += tuple(itemValue)
-               elif type( itemValue ) == types.InstanceType and itemValue.has_key('GROUP_MA'):
-                    # pour creer 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()
-                if 'GROUP_MA' in itemName:
-                   children = item._GetSubList()
-                   for child in children:
-                       groupMa +=  self.__getAllGroupeMa( child )
-            except:
-               pass
-        return groupMa                
-        
-   
-    def __getAllGroupeNo(self, item ):
-        """
-        Recupere tous les GROUPE_NO dans le JDC courant
-        """
-        groupNo = ()                
-        try:
-            itemName  = item.get_nom()            
-            if 'GROUP_NO' in itemName:
-                itemValue = item.get_valeur()                
-                if type( itemValue ) == str:
-                    groupNo += ( itemValue , )
-                elif type( itemValue ) == tuple:
-                    groupNo += itemValue
-               elif type( itemValue ) == list:
-                   groupNo += tuple(itemValue)
-               elif type( itemValue ) == types.InstanceType and itemValue.has_key('GROUP_NO'):
-                    # pour creer le groupe de Noeuds dans DEFI_GROUP> CREA_GROUP_NO> GROUP_NO
-                   groupNo += ( itemValue['GROUP_NO'], )
-            else:
-                children = item._GetSubList()
-                for child in children:            
-                    groupNo += self.__getAllGroupeNo( child )
-        except:
-       # traitement des MCLIST Pour CREA_GROUP_NO dans DEFI_GROUP
-            try:
-                itemName  = item.get_nom()
-                if 'GROUP_NO' in itemName:
-                   children = item._GetSubList()
-                   for child in children:
-                       groupNo +=  self.__getAllGroupeNo( child )
-            except:
-               pass
-        return groupNo
-
-        
-    # ___________________________ Methodes de l ex Pal __________________________________
-    def getEntriesFromName(self, componentName, subShapeName ):
-        entries = []
-        try :
-           listSO  = self._myStudy.FindObjectByName( objectName, componentName )
-           for SObjet in listSO :
-               entry = SObjet.GetID()
-               entries.append( entry )
-        except :
-           logger.debug("getEntriesFromName: An error occurs")
-           entries = None
-        return entries
-
+# ___________________________ Methodes de l ex Pal __________________________________
+
+    #----------------------------------------------------------------
+    def getCORBAObjectInComponent( self,  entry, composant ):
+    #----------------------------------------------------------------
+       object = None
+       mySO = monEditor.study.FindObjectID(entry)
+       if mySO:
+          object = mySO.GetObject()
+          if not object:
+             myComponent = salome.lcc.FindOrLoadComponent("FactoryServer", composant)
+             SCom        = monEditor.study.FindComponent( composant )
+             monEditor.builder.LoadWith( SCom , myComponent  )
+             object      = mySO.GetObject()
+       if not object :
+             logger.debug("selectedEntry: An error occurs")
+       return object
+
+
+    #-------------------------------------
+    def isMeshGroup( self,entry):
+    #-------------------------------------
+       result=False
+       import SMESH
+       try:
+         monObjet =self.getCORBAObjectInComponent(entry,"SMESH") 
+         print monObjet
+         if monObjet != None :                                    # selection d'un groupe de SMESH
+            if  monObjet._narrow(SMESH.SMESH_GroupBase):
+                result = True 
+         print result
+       except :
+         logger.debug(' isMeshGroup pb avec ( entry = %s ) ' %entry )          
+       return result
+
+    #-------------------------------------
+    def isShape( self,entry):
+    #-------------------------------------
+       result=False
+       import GEOM
+       try:
+         monObjet =self.getCORBAObjectInComponent(entry,"GEOM") 
+         if monObjet != None :                                    # selection d'un objet GEOM
+            if  monObjet._narrow(GEOM.GEOM_Object ):
+                result = True 
+       except :
+         logger.debug(' isShape pb avec ( entry = %s ) ' %entry )          
+       return result
+
+    #-----------------------------------------------------------------
     def getMainShapeEntry(self,entry):
+    #-----------------------------------------------------------------
         result=None
         try:
            mainShapeEntry = entry.split(':')[:4]
-
            if len(mainShapeEntry) == 4:
                 strMainShapeEntry = '%s:%s:%s:%s'%tuple(mainShapeEntry)
                 if self.isMainShape(strMainShapeEntry):
@@ -474,21 +161,14 @@ class MyEficas( qtEficas.Appli ):
             result = None
         return result
 
+    #-----------------------------------------------------------------
     def isMainShape(self,entry):
+    #-----------------------------------------------------------------
         result = False
         try:
-            anObject=None
-            mySO=monEditor.study.FindObjectID(entry )
-            if  mySO:
-                anObject = mySO.GetObject()
-                if not anObject :
-                   strContainer, strComponentName = "FactoryServer", "GEOM"
-                   myComponent = salome.lcc.FindOrLoadComponent( strContainer, strComponentName )
-                   SCom        = monEditor.study.FindComponent( strComponentName )
-                   monEditor.builder.LoadWith( SCom , myComponent  )
-                   anObject = mySO.GetObject()
-
-            shape    = anObject._narrow( GEOM.GEOM_Object )
+            monObjet =self.getCORBAObjectInComponent(entry,"GEOM") 
+            import GEOM
+            shape    = monObjet._narrow( GEOM.GEOM_Object )
             if shape.IsMainShape():
                 result = True
         except:
@@ -496,14 +176,151 @@ class MyEficas( qtEficas.Appli ):
             result = False
         return result
 
+    
+    #-----------------------------------------------------------------
+    def ChercheType( self, shape ):
+    #-----------------------------------------------------------------
+        tgeo =  shape.GetShapeType() 
+        geomEngine = salome.lcc.FindOrLoadComponent( "FactoryServer", "GEOM" )
+        print dir(monEditor.study)
+        groupIMeasureOp = geomEngine.GetIMeasureOperations(monEditor.study._get_StudyId())
+        if tgeo != "COMPOUND" : return tgeo
+
+        strInfo =  groupIMeasureOp.WhatIs( shape )
+        dictInfo = {}
+        l = strInfo.split('\n')
+
+        for couple in l:
+             nom, valeur = couple.split(':')
+             dictInfo[ nom.strip() ] = valeur.strip()
+
+        ordre = [ "COMPSOLID", "SOLID", "SHELL", "FACE", "WIRE", "EDGE", "VERTEX" ]
+        for t in ordre:
+            if dictInfo[ t ] != '0':
+               tgeo = t
+               return tgeo
+        return None
+
+
+    #-----------------------------------------------------------------
+    def selectShape( self, editor, entry, kwType = None ):
+    #-----------------------------------------------------------------
+        """
+        selection sous-geometrie dans Salome:
+        -test1) si c'est un element sous-geometrique .
+        -test2) si appartient a la geometrie principale.
+        """
+        name, msgError = '',''
+        mySO = monEditor.study.FindObjectID(entry)
+        if mySO == None :
+           return name, msgError
+        object = mySO.GetObject()
+        if object == None :
+           return name, msgError
+
+        import GEOM
+        shape  = object._narrow( GEOM.GEOM_Object )
+        if not shape :
+           return name, msgError
+
+        tGeo=self.ChercheType(shape)
+        if not tGeo :
+           return name, msgError
+        if kwType == "GROUP_NO" and tGeo != "VERTEX":
+            msgError = msgWarningGroupNoSelection
+        elif kwType == "GROUP_MA" and tGeo == "VERTEX":
+            name, msgError = '', msgErrorGroupMaSelection
+            return name, msgError
+
+        mainShapeEntry = self.getMainShapeEntry( entry )
+        if self.mainShapeNames.has_key( editor ):
+          print "------------- self.mainShapeNames[editor]" , self.mainShapeNames[editor]
+          if self.mainShapeNames[editor] == mainShapeEntry:
+             name=mySO.GetName()
+          else :
+             msgError="Le groupe reference la geometrie " + mainShapeEntry + " et non " + self.mainShapeNames[editor]
+        else :
+          self.mainShapeNames[editor] = mainShapeEntry
+          name=mySO.GetName()
+       
+        return name, msgError
         
-    #-----------------------  LISTE DES NOUVEAUX CAS D'UTILISATIONS -----------    
+
+    #-----------------------------------------------------------------
+    def selectMeshGroup( self, editor, selectedEntry, kwType = None ):
+    #-----------------------------------------------------------------
+        """
+        selection groupe de maille dans Salome:
+        -test 1) si c'est un groupe de maille
+        -test 2) si le maillage fait reference a la geometrie principale
+        """
+        name, msgError = '',''
+
+        mySO=monEditor.study.FindObjectID(selectedEntry )
+        from pal.smeshstudytools import SMeshStudyTools
+        monSMeshStudyTools=SMeshStudyTools(monEditor)
+        meshSO = monSMeshStudyTools.getMeshFromGroup(mySO)
+        if meshSO == None : return name, msgError    
+
+       # on verifie que l entree selectionnee a le bon type (NODE ou EDGE...)
+        tGroup = ""
+        groupObject = self.getCORBAObjectInComponent(selectedEntry,"SMESH")
+        if not groupObject :
+           logger.debug("selectedMeshEntry: An error occurs")
+
+        import SMESH
+        aGroup = groupObject._narrow( SMESH.SMESH_GroupBase )
+        if aGroup: tGroup = aGroup.GetType()
+
+        if kwType == "GROUP_NO" and tGroup != SMESH.NODE:
+             msgError = "GROUP_NO attend un groupe de noeud"
+        elif kwType == "GROUP_MA" and tGroup == SMESH.NODE:
+             msgError = "GROUP_MA attend un point goupe de maille"
+             return name, msgError
+
+        # on cherche la shape associee
+        #PN PN mesh_Object est un SOject
+        meshObject = meshSO.GetObject()
+        mesh     = meshObject._narrow( SMESH.SMESH_Mesh  )
+        if mesh:         #c'est bien un objet maillage
+             shape = mesh.GetShapeToMesh()
+             if shape:
+                ior = salome.orb.object_to_string( shape )
+                if ior:
+                   sObject   = monEditor.study.FindObjectIOR(  ior )
+                   mainShapeID = sObject.GetID()
+             else :
+                mainShapeID=0
+        else :
+             return name, "Type d objet non permis"    
+
+        # on cherche si la shape associee est la bonne
+        print "------------- mainShapeID" , mainShapeID
+        if self.mainShapeNames.has_key( editor ):
+          print "------------- self.mainShapeNames[editor]" , self.mainShapeNames[editor]
+          if self.mainShapeNames[editor] == mainShapeID:
+             name=mySO.GetName()
+          else :
+             msgError="Le groupe reference la geometrie " + mainShapeID + " et non " + self.mainShapeNames[editor]
+        else :
+          self.mainShapeNames[editor] = mainShapeID
+          name=mySO.GetName()
+
+        print "------------------------------ name :", name
+        print "------------------------------ name :", name
+        print "------------------------------ name :", name
+        return name,msgError
+
+# ___________________________ Methodes appelees par EFICAS  __________________________________
+        
+    #----------------------------------------------------------------
     def selectGroupFromSalome( self, kwType = None, editor=None):
+    #----------------------------------------------------------------
         """
-        Selection d'element(s) d'une geometrie ( sub-shape ) ou d'element(s) de maillage ( groupe de maille) à partir de l'arbre salome
+        Selection d'element(s) d'une geometrie ( sub-shape ) ou d'element(s) de maillage ( groupe de maille)  partir de l'arbre salome
         retourne ( la liste des noms des groupes, message d'erreur )
-        
-        Note: Appele par EFICAS lorsqu'on clique sur le bouton ajouter à la liste du panel AFF_CHAR_MECA        
+      
+        Note: Appele par EFICAS lorsqu'on clique sur le bouton ajouter la liste du panel GROUPMA        
         """
         names, msg = [], ''
         try:            
@@ -511,32 +328,37 @@ class MyEficas( qtEficas.Appli ):
             atLeastOneStudy = monEditor.study
             if not atLeastOneStudy:
                 return names, msg
-            # recupere toutes les selections de l'utilsateur dans l'arbre Salome
+
+           # recupere toutes les selections de l'utilsateur dans l'arbre Salome
             entries = salome.sg.getAllSelected()
             nbEntries = len( entries )
-            #if nbEntries >= 1:
-            #    for entry in entries:
-            #        if studyManager.palStudy.isMeshGroup( entry ): #selection d'un groupe de maille
-            #            name, msg = self.__selectMeshGroup( editor, entry, kwType )
-            #        elif studyManager.palStudy.isShape( entry ): #selection d'une sous-geometrie
-            #            name, msg = self.__selectShape( editor, entry, kwType )
-            #        else:
-            #            name, msg = '', msgUnAuthorizedSelecion
-            #        if name:
-                       names.append( name )                    
+            if nbEntries >= 1:
+                for entry in entries:
+                    if self.isMeshGroup(entry):               # selection d 'un sous maillage
+                       name, msg = self.selectMeshGroup( editor, entry, kwType )
+                    elif self.isShape(entry):               # selection d'une sous-geometrie
+                       name, msg = self.selectShape( editor, entry, kwType )
+                    else:
+                       name, msg = None, "Selection SALOME non autorisee."
+                    if name:
+                       names.append( name )                    
                         
-            if names and len( names ) < nbEntries:                        
-                msg = msgIncompleteSelection
         except:            
             logger.debug("selectGroupFromSalome: An error occurs")
+        print "=================== selectGroupFromSalome ", names, msg
+        print "=================== selectGroupFromSalome ", names, msg
+        print "=================== selectGroupFromSalome ", names, msg
         return names, msg                
         
-        
+    #---------------------------------------------
     def addJdcInSalome(  self, jdcPath ):
+    #---------------------------------------------
         """
-        Ajoute le Jeu De Commande ASTER ou HOMARD dans l'arbre d'etude Salome dans la rubrique EFICAS
+        Ajoute le Jeu De Commande dans l'arbre d'etude Salome dans la rubrique EFICAS
+        Revu pour QT4
         """
-        ok, msgError = False, msgErrorAddJdcInSalome
+        msgError    = "Erreur dans l'export du fichier de commande dans l'arbre d'etude Salome"
+        ok = False
         #try:            
         if 1:
             atLeastOneStudy = monEditor.study
@@ -577,7 +399,7 @@ class MyEficas( qtEficas.Appli ):
                                            #icon    = "ICON_COMM_FILE",
                                            comment = str( jdcPath ))
 
-            salome.sg.updateObjBrowser()
+            salome.sg.updateObjBrowser(1)
 
             print 'addJdcInSalome commEntry->', commEntry            
             if commEntry:
@@ -587,128 +409,15 @@ class MyEficas( qtEficas.Appli ):
         return ok, msgError        
         
                 
-                
-    def displayMeshGroups(self, meshGroupName):
-        """
-        visualisation group de maille de nom meshGroupName dans salome
-        """
-        ok, msgError = False, ''
-        try:
-            sg = salome.ImportComponentGUI('SMESH')
-            currentjdcID = self.editor.nb.getcurselection()
-            meshGroupEntries = []
-            selMeshEntry = None
-            selMeshGroupEntry = None
-            
-            # liste des groupes de maille de nom meshGroupName
-            listSO = monEditor.study.FindObjectByName(meshGroupName, "SMESH")
-            print "liste des groupes de maille de nom %s: "%(meshGroupName), listSO
-            
-            if len(listSO)>0:
-                for SObjet in listSO:
-                    groupEntry = SObjet.GetID()                
-                    meshGroupEntries += [groupEntry]                    
-                
-                if len(meshGroupEntries)>1:
-                
-                    # choix d'un maillage
-                    if not self.workingMesh.has_key(currentjdcID): # aucun maillage de defini par defaut encore
-                        #selMeshEntry = "0:1:3:5" #CS_pbruno todo : choix maillage + test si c un maillage
-                        selMeshEntry, keep = self.__selectWorkingMesh(meshGroupEntries)
-                        if keep:
-                            self.workingMesh[currentjdcID] = selMeshEntry
-                    else: # deja un de defini par defaut
-                        selMeshEntry = self.workingMesh[currentjdcID]
-                            
-                    # le groupe de maille est il ds ce maillage?
-                    lselMeshEntry = len(selMeshEntry)            
-                    for groupEntry in meshGroupEntries:                
-                        if selMeshEntry == groupEntry[0:lselMeshEntry]:
-                            selMeshGroupEntry = groupEntry
-                            break
-    
-                else:
-                    selMeshGroupEntry = meshGroupEntries[0]
-                    
-                # on affiche le groupe ds la vue VTK
-                if selMeshGroupEntry:
-                    #CS_pbruno: marche QUE si le module SMESH est active
-                    myComponent = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-                    SCom        = monEditor.study.FindComponent("SMESH")
-                    monEditor.builder.LoadWith( SCom , myComponent  )                             
-                    sg.CreateAndDisplayActor(selMeshGroupEntry)
-                    salome.sg.Display(selMeshGroupEntry)
-                    salome.sg.FitAll()                
-                    ok = True                
-        except:
-            msgError = msgErrorDisplayMeshGroup
-            logger.debug(50*'=')
-        return ok, msgError
-
-            
-    def displayShape(  self, shapeName ):
-        """
-        visualisation geometrie de nom shapeName dans salome
-        """
-        ok, msgError = False, ''
-        try:
-            import VISU            
-            import visu_gui
-            currentViewType = None            
-            m = visu_gui.myVisu.GetViewManager()
-            v = m.GetCurrentView()
-            if v:
-                currentViewType = v.GetType()
-            
-            atLeastOneStudy = monEditor.study
-            if not atLeastOneStudy:
-                return ok, msgError            
-                                     
-            print 'displayShapestrGeomShape shapeName -> ', shapeName
-            
-            if currentViewType == VISU.TVIEW3D: # maillage
-                print 'Vue courante = VTK : affichage groupe de maille'                
-                ok, msgError = self.displayMeshGroups(shapeName)
-            else: #geometrie
-                print 'Vue courante = OCC : affichage element geometrique'
-                current_color = COLORS[ self.icolor % LEN_COLORS ]                
-                ##### PNPNPNPN dans visuPal
-                #ok = studyManager.palStudy.displayShapeByName( shapeName, current_color )
-                salome.sg.FitAll()
-                self.icolor = self.icolor + 1             
-                if not ok:
-                    msgError = msgErrorDisplayShape
-        except:            
-            logger.debug(50*'=')
-        return ok, msgError    
-        
-        
-    def creeConfigTxt(self,fichier,dico):        
-        """
-           sauvegarde = asksaveasfilename(title="fichier config.txt",
-                                     defaultextension='.txt',
-                                     initialdir = fichier)
-           f=open(sauvegarde,'w+')
-           for unite in dico.keys():
-                type=dico[unite][0]
-                fic=dico[unite][1:]
-                ligne="fort."+str(unite)+" "+type+" "+fic
-                f.write(ligne)
-           f.close()
-           self.rangeInStudy(sauvegarde)
-          print "==============================="
-        """
-        pass #CS_pbruno a implementer
-           
            
-    def buildCabriGeom( self, name, **param ):
+#    def buildCabriGeom( self, name, **param ):
         """
         visualisation dans GEOM d'une geometrie CABRI
         """
-        import cabri        
-        qt.QApplication.setOverrideCursor( qt.QCursor.waitCursor )
-        cabri.tetra( name, **param )
-        qt.QApplication.restoreOverrideCursor()
+#        import cabri        
+#        qt.QApplication.setOverrideCursor( qt.QCursor.waitCursor )
+#        cabri.tetra( name, **param )
+#        qt.QApplication.restoreOverrideCursor()
         
         
         
@@ -753,27 +462,8 @@ def runEficas( code="ASTER", fichier=None, module = "Eficas", version=None ):
 
         
         
-# pour compatibilitee           
-def runHomard( code="HOMARD", fichier=None ):
-    global appli    
-    if not appli: #une seul instance possible!                        
-        appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier )
-        
-
-        
-        
-"""        
-def runAster(parent = SalomePyQt.SalomePyQt().getDesktop(),  code="ASTER", fichier=None ) :
-    global appli    
-    if not appli: #une seul instance possible!                        
-        appli = MyEficas( parent,  code = code, fichier = fichier )
-"""    
 
 appli = None
 
 
 
-
-
-