]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
PR: merge from branch V3_2_0_AMA tag mergeto_V3_2_0_maintenance_04aug06 S3_2_0__A8_3_0 mergefrom_V3_2_0_AMA_04_aug06
authorsalome <>
Fri, 4 Aug 2006 09:12:04 +0000 (09:12 +0000)
committersalome <>
Fri, 4 Aug 2006 09:12:04 +0000 (09:12 +0000)
doc/patchEficasV1_10.diff [new file with mode: 0644]
src/EFICASGUI/Makefile.in
src/EFICASGUI/SelectMainShapeDiag_ui.ui [new file with mode: 0644]
src/EFICASGUI/eficasSalome.py

diff --git a/doc/patchEficasV1_10.diff b/doc/patchEficasV1_10.diff
new file mode 100644 (file)
index 0000000..935874c
--- /dev/null
@@ -0,0 +1,26 @@
+diff -Naur EficasV1_10AsterSTA8.orig/Editeur/panelsSalome.py EficasV1_10AsterSTA8/Editeur/panelsSalome.py
+--- EficasV1_10AsterSTA8.orig/Editeur/panelsSalome.py  2006-06-20 16:41:50.000000000 +0200
++++ EficasV1_10AsterSTA8/Editeur/panelsSalome.py       2006-07-18 17:44:45.000000000 +0200
+@@ -100,12 +100,20 @@
+       try: 
+         valeur,validite,commentaire=self.get_valeur()
+         #print 'add_valeur_plusieurs_base', name
+-        #print 'valeur = %s, validite = %s,commentaire = %s'%( valeur,validite,commentaire )            
++        #print 'valeur = %s, validite = %s,commentaire = %s'%( valeur,validite,commentaire )
+         if not valeur: # sélection dans salome        
+             #print 'CS_pbruno selection SALOME'
+             strSelection = ''
+             
+-            selection, msg = self.parent.appli.selectGroupFromSalome()
++            genea  = self.node.item.get_genealogie()            
++            kwType = None
++            for e in genea:
++                if "GROUP_NO" in e:
++                    kwType = "GROUP_NO"
++                if "GROUP_MA" in e:
++                    kwType = "GROUP_MA"            
++                
++            selection, msg = self.parent.appli.selectGroupFromSalome( kwType )
+             
+             #print 'CS_pbruno selection SALOME selection ->',selection
+             #print 'CS_pbruno selection SALOME msg ->',msg
index 079fe3c2e01e72d52ad10f406a43fd6137366ef8..73c0c469c51419f5865bc8fee3f55483195eab59 100644 (file)
@@ -32,6 +32,7 @@ LIB_SERVER_IDL =
 PO_FILES =  EFICAS_msg_en.po EFICAS_icons.po
 
 EXPORT_PYSCRIPTS = \
+SelectMainShapeDiag_ui.py\
 EFICASGUI.py   \
 eficasSalome.py \
 
@@ -39,6 +40,10 @@ eficasSalome.py \
 # _CS_gbo_151104 Ajout pour compatibilité ascendante entre versions de Eficas
 EXPORT_PYSCRIPTS+=eficas_etude.py
 
+# On utilise le pyuic trouvé par le configure plutôt que celui se trouvant dans l'environnement
+PYUIC = pyuic
+%.py:%.ui
+       $(PYUIC) $< -o $@
 
 
 @CONCLUDE@
diff --git a/src/EFICASGUI/SelectMainShapeDiag_ui.ui b/src/EFICASGUI/SelectMainShapeDiag_ui.ui
new file mode 100644 (file)
index 0000000..add435a
--- /dev/null
@@ -0,0 +1,138 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>SelectMainShapeDiag</class>
+<widget class="QDialog">
+    <property name="name">
+        <cstring>SelectMainShapeDiag</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>373</width>
+            <height>260</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>SALOME - Main Shape Selection</string>
+    </property>
+    <property name="sizeGripEnabled">
+        <bool>true</bool>
+    </property>
+    <vbox>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel">
+            <property name="name">
+                <cstring>textLabel2</cstring>
+            </property>
+            <property name="text">
+                <string>Select the main shape you want to work on</string>
+            </property>
+        </widget>
+        <widget class="QListBox">
+            <item>
+                <property name="text">
+                    <string>New Item</string>
+                </property>
+            </item>
+            <property name="name">
+                <cstring>lbMainShapes</cstring>
+            </property>
+        </widget>
+        <widget class="QLayoutWidget">
+            <property name="name">
+                <cstring>Layout1</cstring>
+            </property>
+            <hbox>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>0</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>buttonHelp</cstring>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Help</string>
+                    </property>
+                    <property name="accel">
+                        <string>F1</string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                </widget>
+                <spacer>
+                    <property name="name">
+                        <cstring>Horizontal Spacing2</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>20</width>
+                            <height>20</height>
+                        </size>
+                    </property>
+                </spacer>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>buttonOk</cstring>
+                    </property>
+                    <property name="text">
+                        <string>&amp;OK</string>
+                    </property>
+                    <property name="accel">
+                        <string></string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                    <property name="default">
+                        <bool>true</bool>
+                    </property>
+                </widget>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>buttonCancel</cstring>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Cancel</string>
+                    </property>
+                    <property name="accel">
+                        <string></string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                </widget>
+            </hbox>
+        </widget>
+    </vbox>
+</widget>
+<connections>
+    <connection>
+        <sender>buttonOk</sender>
+        <signal>clicked()</signal>
+        <receiver>SelectMainShapeDiag</receiver>
+        <slot>accept()</slot>
+    </connection>
+    <connection>
+        <sender>buttonCancel</sender>
+        <signal>clicked()</signal>
+        <receiver>SelectMainShapeDiag</receiver>
+        <slot>reject()</slot>
+    </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
index ae7e714262f3449ef4b8118234ebbeba101d9c74..e2142cd71a6abdc042e134e1bda9266f88763919 100644 (file)
@@ -3,7 +3,7 @@ from Logger import ExtLogger
 import qt
 import notifqt
 # -----------------------------------------------------------------------------
-import sys, os
+import sys, os, re
 
 
 
@@ -50,16 +50,25 @@ import studyManager
 
 import SalomePyQt
 
+from SelectMainShapeDiag_ui import SelectMainShapeDiag
+
 
 
 # message utilisateur
 msgWarning                 = "Attention"
+msgMainShapeSelection      = "On travaille sur la géométrie principale : "
 msgSubShapeBadMainShape    = "La sélection géométrique SALOME ne correspond pas à une sous-géométrie de la géométrie principale : "
 msgMeshGroupBadMainShape   = "Le groupe de maillage sélectionné dans SALOME ne référence pas la bonne géométrie principale : "
 msgIncompleteSelection     = "Tous les éléments de la sélection SALOME n'ont pu étre ajoutée"
 msgUnAuthorizedSelecion    = "Sélection SALOME non authorisé. Autorisé : sous-géométrie, groupe de maille"
 msgErrorAddJdcInSalome     = "Erreur dans l'export du fichier de commande dans l'arbre d'étude Salome"
 msgErrorDisplayShape       = "Erreur dans l'affichage de la forme géométrique sélectionnée"
+msgErrorNeedSubShape       = "Sélection d'un élément sous géométrique seulement"
+
+
+msgErrorGroupMaSelection    = "Sélection 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 géometrie CS_CBO
@@ -78,8 +87,38 @@ COLORS = ( studyManager.RED,
 
 LEN_COLORS = len( COLORS )
 
+
+
+class SelectMainShapeDiagImpl( SelectMainShapeDiag ):
+    def __init__( self, mainShapeEntries, parent = None,name = None,modal = 1,fl = 0 ):
+        SelectMainShapeDiag.__init__( self,parent,name,modal,fl )
+        
+        self.mainShapes = {} # ( entry, value )
+        for entry in mainShapeEntries:
+            name = studyManager.palStudy.getName( entry )
+            self.mainShapes[entry] = name
+            
+        self.lbMainShapes.clear()
+        for entry,name in self.mainShapes.items():
+            self.lbMainShapes.insertItem( name )
+        self.lbMainShapes.setCurrentItem( 0 )
+
+                                    
+    def getUserSelection( self ):
+        mainShapeEntry = None
+        
+        item = self.lbMainShapes.selectedItem()
+        mainShapeName = str( item.text() )        
+        
+        for entry, name in self.mainShapes.items():
+            if mainShapeName == name:
+                mainShapeEntry = entry
+                break                
+            
+        return mainShapeEntry 
     
 
+
 #class MyEficas( Tkinter.Toplevel, eficas.EFICAS, QXEmbed ):
 class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
     """
@@ -88,7 +127,7 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
     a)la création de groupes de mailles dans le composant SMESH de SALOME
     b)la visualisation d'éléments géométrique dans le coposant GEOM de SALOME par sélection dans EFICAS
     """
-    def __init__(self, parent, code = None, fichier = None ):
+    def __init__( self, parent, code = None, fichier = None, module = studyManager.SEficas ):
         """
         Constructeur.
                 
@@ -144,6 +183,7 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
         #--------------- spécialisation EFICAS dans SALOME  -------------------                
         self.parent = parent        
         self.salome = True      #active les parties de code spécifique dans Salome( pour le logiciel Eficas )
+        self.module = module    #indique sous quel module dans l'arbre d'étude ajouter le JDC.
         
         
         # donnée pour la création de groupe de maille
@@ -183,67 +223,130 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
             studyManager.palStudy.setCurrentStudyID( activeStudyId )            
             
         return True
+        
             
+    def __selectMainShape( self, groupeMaNamesIn, groupeNoNamesIn ):
+        """
+        Sélection intéractive 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 = studyManager.palStudy.getEntriesFromName( studyManager.SGeom, subShapeName )
+                for entry in entries:
+                    mainShapeEntry = studyManager.palStudy.getMainShapeEntry( entry )
+                    if mainShapeEntry != entry:
+                        mainShapes[ subShapeName ] = mainShapeEntry
+                        mainShapeEntries += [ mainShapeEntry ]
+                                
+        if mainShapes:
+            diag = SelectMainShapeDiagImpl( mainShapeEntries, self.parent  )
+    
+            if diag.exec_loop() == qt.QDialog.Accepted:
+                selectedMainShape = diag.getUserSelection()                
+                print 'main shape user selection ->',selectedMainShape
                 
-        
-
-    def __selectShape( self, jdcID, selectedEntry ):
+                # filtre sur la main shape sélectionnée
+                for name in groupeMaNamesIn:
+                    try:
+                        if mainShapes[ name ] == selectedMainShape:
+                            groupeMaNamesOut += [ name ]
+                    except:
+                        pass                                                        
+                                                
+                for name in groupeNoNamesIn:
+                    try:
+                        if mainShapes[ name ] == selectedMainShape:
+                            groupeNoNamesOut += [ name ]
+                    except:
+                        pass         
+        
+        return groupeMaNamesOut, groupeNoNamesOut
+
+
+
+    def __selectShape( self, jdcID, selectedEntry, kwType = None ):
         """
         sélection sous-géométrie dans Salome:
-        -test1) si c'est un élément géométrique.
+        -test1) si c'est un élément sous-géométrique .
         -test2) si appartient à la géométrie principale.
         
         met à jours la liste self.subShapes si test ok
-        """
-        print 'CS_pbruno __selectShape'
-        name, msgError = '',''        
-                
+        """        
+        name, msgError = '',''
+        
         selectedMainShapeEntry = studyManager.palStudy.getMainShapeEntry( selectedEntry )
         
-        if selectedMainShapeEntry: #ok test1)        
+        if selectedMainShapeEntry and selectedMainShapeEntry != selectedEntry: #ok test1)
+            
+            tGeo = studyManager.palStudy.getRealShapeType( selectedEntry )
+            if kwType == "GROUP_NO" and tGeo != studyManager.VERTEX:                
+                msgError = msgWarningGroupNoSelection
+            elif kwType == "GROUP_MA" and tGeo == studyManager.VERTEX:
+                name, msgError = '', msgErrorGroupMaSelection                
+                return name, msgError            
+                            
             if not self.mainShapeEntries.has_key( jdcID ):
                 self.mainShapeEntries[ jdcID ] = selectedMainShapeEntry
+                name = studyManager.palStudy.getName( selectedMainShapeEntry )
+                msgError = msgMainShapeSelection + name
             if selectedMainShapeEntry == self.mainShapeEntries[ jdcID ]:
                 name = studyManager.palStudy.getName( selectedEntry )
-                self.subShapes[ selectedEntry ] = name
-            else:
-                print 'CS_pbruno pas la même mainshape selectedEntry->',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 ]
+                msgError = msgSubShapeBadMainShape + self.mainShapeNames[ jdcID ]                
+        else:
+            name, msgError = '', msgErrorNeedSubShape
 
         return name, msgError 
         
         
         
-    def __selectMeshGroup( self, jdcID, selectedEntry ):
+    def __selectMeshGroup( self, jdcID, selectedEntry, kwType = None ):
         """
         sélection groupe de maille dans Salome:
         -test 1) si c'est un groupe de maille 
         -test 2) si le maillage fait référence à la géométrie principale 
-        """
-        print 'CS_pbruno __selectMeshGroup'
-        name, msgError = '',''
+        """        
+        name, msgError = '',''                
                 
         selectedMeshEntry = studyManager.palStudy.getMesh( selectedEntry )
                 
-        if selectedMeshEntry: # ok test 1)
-            print 'CS_pbruno __selectMeshGroup selectedMeshEntry',selectedMeshEntry
+        if selectedMeshEntry: # ok test 1)            
+            tGroup = studyManager.palStudy.getGroupType( selectedEntry )
+            if kwType == "GROUP_NO" and tGroup != studyManager.NodeGroups:                
+                msgError = msgWarningGroupNoSelection
+            elif kwType == "GROUP_MA" and tGroup == studyManager.NodeGroups:
+                name, msgError = '', msgErrorGroupMaSelection                
+                return name, msgError                        
+                        
             selectedMainShapeEntry = studyManager.palStudy.getShapeFromMesh( selectedMeshEntry )
             
-            if selectedMainShapeEntry: #test 2)
-                print 'CS_pbruno __selectMeshGroup selectedMainShapeEntry',selectedMainShapeEntry
+            if selectedMainShapeEntry: #test 2)                
                 if not self.mainShapeEntries.has_key( jdcID ):
                     self.mainShapeEntries[ jdcID ] = selectedMainShapeEntry
+                    name = studyManager.palStudy.getName( selectedMainShapeEntry )
+                    msgError = msgMainShapeSelection + name                    
                 if selectedMainShapeEntry == self.mainShapeEntries[ jdcID ]:
                     name = studyManager.palStudy.getName( selectedEntry  )  #ok test 2)
-                else:
-                    print 'CS_pbruno pas la même mainshape selectedEntry ->',selectedEntry
+                else:                    
                     if not self.mainShapeNames.has_key( jdcID ):
-                        self.mainShapeNames[ jdcID ] = studyManager.palStudy.getName( self.mainShapeEntries[ jdcID ] )
-                    msgError = msgMeshGroupBadMainShape + self.mainShapeNames[ jdcID ]                   
-                                
-        return name, msgError 
+                        self.mainShapeNames[ jdcID ] = studyManager.palStudy.getName(
+                                                            self.mainShapeEntries[ jdcID ] )
+                    msgError = msgMeshGroupBadMainShape + self.mainShapeNames[ jdcID ]
+            else:
+                # on authorise quand même les groupes de maillage ne faisant 
+                # pas référence à une géométrie principale (dixit CS_CBO )
+                name = studyManager.palStudy.getName( selectedEntry )
+                                          
+        return name, msgError
         
         
     
@@ -253,12 +356,12 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
         mise à jours de la liste self.subShapes à partir de la liste des noms de groupe fourni en entré
         """
         for name in groupeNames:
-            entries = studyManager.palStudy.getEntriesFromName( studyManager.SGeom, name )
+            entries = studyManager.palStudy.getEntriesFromName( studyManager.SGeom, name )            
             for entry in entries:
-                ok, msgError = self.__selectShape( jdcID, entry ) # filtre
-                if ok:
-                    self.subShapes[ entry ] = name
-                    
+                if not self.subShapes.has_key( entry ):                    
+                    ok, msgError = self.__selectShape( jdcID, entry ) # filtre
+                    if ok:
+                        self.subShapes[ entry ] = name                    
         
     def __getAllGroupeMa(self, item ):
         """
@@ -268,20 +371,18 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
         try:
             itemName  = item.get_nom()
             #print 'CS_pbruno itemName',itemName             
-            if itemName == 'GROUP_MA':
+            if 'GROUP_MA' in itemName:
                 itemValue = item.get_valeur()
-                print 'CS_pbruno trouvé! GROUP_MA->', itemValue
                 if type( itemValue ) == str:
                     groupMa += ( itemValue , )
                 elif type( itemValue ) == tuple:
                     groupMa += itemValue                
             else:
-                children = item.GetSubList()
+                children = item._GetSubList()
                 for child in children:            
                     groupMa +=  self.__getAllGroupeMa( child )
-        except: # à cause de GetSubList()...
-            pass
-        print 'CS_pbruno groupMa',groupMa
+        except:
+            pass        
         return groupMa                
         
    
@@ -291,25 +392,24 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
         """
         groupNo = ()                
         try:
-            itemName  = item.get_nom()
-            print 'CS_pbruno itemName',itemName            
-            if itemName == 'GROUP_NO':
-                itemValue = item.get_valeur()
-                print 'CS_pbruno trouvé! GROUP_NO->', itemValue
+            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
             else:
-                children = item.GetSubList()
+                children = item._GetSubList()
                 for child in children:            
                     groupNo += self.__getAllGroupeNo( child )
-        except: # à cause de GetSubList()...
+        except:
             pass 
         return groupNo
+
         
     #-----------------------  LISTE DES NOUVEAUX CAS D'UTILISATIONS -----------
-    def selectGroupFromSalome( self ):
+    def selectGroupFromSalome( self, kwType ):
         """
         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 )
@@ -317,7 +417,7 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
         Note: Appelé par EFICAS lorsqu'on clique sur le bouton ajouter à la liste du panel AFF_CHAR_MECA        
         """
         names, msg = [], ''
-        try:
+        try:            
             atLeastOneStudy = self.__studySync()
             if not atLeastOneStudy:
                 return names, msg
@@ -327,12 +427,13 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
             nbEntries = len( entries )
             if nbEntries >= 1:
                 print 'CS_pbruno len( entries ) >= 1:'
-                jdcID = self.bureau.nb.getcurselection()
+#                 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 )
+                        name, msg = self.__selectMeshGroup( jdcID, entry, kwType )
                     elif studyManager.palStudy.isShape( entry ): #sélection d'une sous-géométrie
-                        name, msg = self.__selectShape( jdcID, entry )
+                        name, msg = self.__selectShape( jdcID, entry, kwType )
                     else:
                         name, msg = '', msgUnAuthorizedSelecion
                     if name:
@@ -351,18 +452,39 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
         """
         Ajoute le Jeu De Commande ASTER ou HOMARD dans l'arbre d'étude Salome dans la rubrique EFICAS
         """
-        ok, msgError = False, ''        
-        try:
+        ok, msgError = False, msgErrorAddJdcInSalome
+        try:            
             atLeastOneStudy = self.__studySync()
             if not atLeastOneStudy:
                 return ok, msgError
-            if self.bureau.code == 'ASTER':
-                ok = studyManager.palStudy.addEficasItem( jdcPath, studyManager.FICHIER_EFICAS_ASTER )
-            elif self.bureau.code == 'HOMARD':
-                ok = studyManager.palStudy.addEficasItem( jdcPath, studyManager.FICHIER_EFICAS_HOMARD )
-                #ok = studyManager.palStudy.addEficasItem( jdcPath, studyManager.FICHIER_EFICAS_HOMARD_CONF ) CS_pbruno ?????
-            if not ok:
-                msgError = msgErrorAddJdcInSalome            
+                        
+            fileType = { 'ASTER':  studyManager.FICHIER_EFICAS_ASTER,
+                        'HOMARD': studyManager.FICHIER_EFICAS_HOMARD }
+                        
+            folderName = {  'ASTER':  'AsterFiles',
+                            'HOMARD': 'HomardFiles' }                                    
+                        
+            moduleEntry = studyManager.palStudy.addComponent(self.module)
+            itemName    = re.split("/",jdcPath)[-1]
+            
+            fatherEntry = studyManager.palStudy.addItem(
+                                    moduleEntry,
+                                    itemName = folderName[self.bureau.code],
+                                    itemIcon = "ICON_COMM_FOLDER",
+                                    itemType = studyManager.ASTER_FILE_FOLDER,
+                                    bDoublonCheck = True  )
+                                                                        
+            commEntry = studyManager.palStudy.addItem( fatherEntry ,
+                                                        itemName = itemName,
+                                                        itemType = fileType[ self.bureau.code ],
+                                                        itemValue = jdcPath,
+                                                        itemComment = str( jdcPath ),
+                                                        itemIcon    = "ICON_COMM_FILE",
+                                                        bDoublonCheck = True )
+            studyManager.palStudy.refresh()                                                       
+            print 'addJdcInSalome commEntry->', commEntry            
+            if commEntry:
+                ok, msgError = True, ''        
         except:                    
             logger.debug(50*'=')
         return ok, msgError        
@@ -378,36 +500,51 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
             if not atLeastOneStudy:
                 return
             
-            jdcID   = self.bureau.nb.getcurselection()
+#             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 )            
+            groupeNoNames = self.__getAllGroupeNo( self.bureau.JDCDisplay_courant.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
                         
             # mise à jours de la liste des sous-géométrie ( self.subShapes )
-            self.__updateSubShapes( jdcID, groupeMaNames )
-            self.__updateSubShapes( jdcID, groupeNoNames )
-            
-            
-            # recupération des identifiants( entries ) associés aux noms des groupes        
-            groupeMaEntries = []
-            groupeNoEntries = []                            
-            
-            for entry, name in self.subShapes.items():
-                if name in groupeMaNames:
-                    groupeMaEntries.append( entry )
-                if name in groupeNoNames:                
-                    groupeNoEntries.append( entry )
-                    
-            print 'CS_pbruno groupeMaEntries ->',groupeMaEntries 
-            print 'CS_pbruno groupeNoEntries ->',groupeNoEntries
-            if groupeMaEntries or groupeNoEntries:
-                print 'if groupeMaEntries or groupeNoEntries:'
-                diag = meshGui.MeshUpdateDialogImpl( self.mainShapeEntries[jdcID], groupeMaEntries, groupeNoEntries, studyManager.palStudy,
-                                                     self.parent )
-                diag.show()
+            if not self.mainShapeEntries.has_key( jdcID ):
+                # 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 )
+                
+            if groupeMaNames or groupeNoNames:                                                
+                print 'CS_pbruno createOrUpdateMesh groupeMaNames', groupeMaNames
+                print 'CS_pbruno createOrUpdateMesh groupeNoNames', groupeNoNames            
+                self.__updateSubShapes( jdcID, groupeMaNames + groupeNoNames )
+    
+                # recupération des identifiants( entries ) associés aux noms des groupes        
+                groupeMaEntries = []
+                groupeNoEntries = []                            
+                
+                for entry, name in self.subShapes.items():
+                    if name in groupeMaNames:
+                        groupeMaEntries.append( entry )
+                    if name in groupeNoNames:                
+                        groupeNoEntries.append( entry )    
+
+                if groupeMaEntries or groupeNoEntries:                    
+                    diag = meshGui.MeshUpdateDialogImpl(
+                                self.mainShapeEntries[jdcID],
+                                groupeMaEntries,
+                                groupeNoEntries,
+                                studyManager.palStudy,
+                                self.parent )
+                    diag.show()
+                
+            self.subShapes.clear()
+            self.mainShapeNames.clear()
+            self.mainShapeEntries.clear()                
         except:                    
             logger.debug(50*'=')
         
@@ -463,10 +600,10 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
 #-------------------------------------------------------------------------------------------------------        
 #           Point d'entré lancement EFICAS
 #
-def runEficas( code="ASTER", fichier=None ):
+def runEficas( code="ASTER", fichier=None, module = studyManager.SEficas ):
     global appli    
-    if not appli: #une seul instance possible!
-        appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier )
+    if not appli: #une seul instance possible!        
+        appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier, module = module )
         
         
  
@@ -502,38 +639,3 @@ logger=ExtLogger( "eficasSalome.py" )
 
 
 
-"""
-        #embedded.showMaximized()
-        #embedded.embed( appli.winfo_id() )        
-        
-        embedded.setWFlags( qt.Qt.WStyle_Customize | qt.Qt.WStyle_StaysOnTop )
-        embedded.setFocus()
-        
-        if embedded.hasFocus () :
-            print 'hasfocus'
-        else:
-            print 'pas  focus'
-            
-            
-        if embedded.isFocusEnabled():
-            print 'isFocusEnabled()'
-        else:
-            print 'not isFocusEnabled()'
-        
-        focusP = embedded.focusPolicy()
-        
-        if focusP == qt.QWidget.TabFocus:
-            print 'qt.QWidgetTabFocus' 
-        elif focusP == qt.QWidget.ClickFocus:
-            print 'qt.ClickFocus'
-        elif focusP == qt.QWidget.StrongFocus:
-            print 'qt.StrongFocus' 
-        elif focusP == qt.QWidget.WheelFocus:
-            print 'qt.WheelFocus'
-        elif focusP == qt.QWidget.NoFocus:
-            print 'qt.NoFocus'
-        else:
-            print 'bizarre'
-        
-        embedded.grabKeyboard()
-        """
\ No newline at end of file