From d32ecec948191fe51860b0309b2fcf9223fa4e8f Mon Sep 17 00:00:00 2001 From: Pascale Noyret Date: Thu, 15 Oct 2009 15:17:48 +0000 Subject: [PATCH] *** empty log message *** --- src/EFICASGUI/colors.py | 23 +- src/EFICASGUI/eficasSalome.py | 778 ++++++++++------------------------ 2 files changed, 246 insertions(+), 555 deletions(-) diff --git a/src/EFICASGUI/colors.py b/src/EFICASGUI/colors.py index 8ff63917..7a2eccdd 100644 --- a/src/EFICASGUI/colors.py +++ b/src/EFICASGUI/colors.py @@ -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 diff --git a/src/EFICASGUI/eficasSalome.py b/src/EFICASGUI/eficasSalome.py index b4f19c5b..bd6df7e6 100644 --- a/src/EFICASGUI/eficasSalome.py +++ b/src/EFICASGUI/eficasSalome.py @@ -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 - - - -- 2.39.2