From 38b9d3007cc88f6715d1a5a0bf88a255b224b31e Mon Sep 17 00:00:00 2001 From: pbruno <> Date: Mon, 16 Apr 2007 12:58:38 +0000 Subject: [PATCH] CS_pbruno add: visualisation groupe de maille --- src/EFICASGUI/Makefile.in | 1 + src/EFICASGUI/SelectMeshDiag_ui.ui | 146 +++++++++++++++++++++++++++++ src/EFICASGUI/eficasSalome.py | 132 +++++++++++++++++++++++--- 3 files changed, 267 insertions(+), 12 deletions(-) create mode 100644 src/EFICASGUI/SelectMeshDiag_ui.ui diff --git a/src/EFICASGUI/Makefile.in b/src/EFICASGUI/Makefile.in index 5ba540e3..e86289f1 100644 --- a/src/EFICASGUI/Makefile.in +++ b/src/EFICASGUI/Makefile.in @@ -33,6 +33,7 @@ PO_FILES = EFICAS_msg_en.po EFICAS_icons.po EXPORT_PYSCRIPTS = \ cabri.py\ +SelectMeshDiag_ui.py\ SelectMainShapeDiag_ui.py\ EFICASGUI.py \ eficasSalome.py \ diff --git a/src/EFICASGUI/SelectMeshDiag_ui.ui b/src/EFICASGUI/SelectMeshDiag_ui.ui new file mode 100644 index 00000000..d50d57be --- /dev/null +++ b/src/EFICASGUI/SelectMeshDiag_ui.ui @@ -0,0 +1,146 @@ + +SelectMeshDiag + + + SelectMeshDiag + + + + 0 + 0 + 400 + 392 + + + + SALOME - Mesh Selection + + + true + + + + unnamed + + + + textLabel2 + + + Select the mesh you want to work on + + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + buttonHelp + + + &Help + + + F1 + + + true + + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + &OK + + + + + + true + + + true + + + + + buttonCancel + + + &Cancel + + + + + + true + + + + + + + cbAgain + + + Don't ask again + + + + + + New Item + + + + lbMeshes + + + + + + + buttonOk + clicked() + SelectMeshDiag + accept() + + + buttonCancel + clicked() + SelectMeshDiag + reject() + + + + diff --git a/src/EFICASGUI/eficasSalome.py b/src/EFICASGUI/eficasSalome.py index c303be4a..367875e8 100644 --- a/src/EFICASGUI/eficasSalome.py +++ b/src/EFICASGUI/eficasSalome.py @@ -51,6 +51,7 @@ import studyManager import SalomePyQt from SelectMainShapeDiag_ui import SelectMainShapeDiag +from SelectMeshDiag_ui import SelectMeshDiag @@ -63,6 +64,7 @@ msgIncompleteSelection = "Tous les 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" +msgErrorDisplayMeshGroup = "Erreur dans l'affichage du groupe de maillage sélectionné" msgErrorNeedSubShape = "Sélection d'un élément sous géométrique seulement" @@ -116,7 +118,37 @@ class SelectMainShapeDiagImpl( SelectMainShapeDiag ): break return mainShapeEntry - + + +class SelectMeshDiagImpl( SelectMeshDiag ): + def __init__( self, meshGroupEntries, parent = None,name = None,modal = 1,fl = 0 ): + SelectMeshDiag.__init__( self,parent,name,modal,fl ) + + self.meshes = {} # ( entry, value ) + + for meshGroupEntry in meshGroupEntries: + meshEntry = studyManager.palStudy.getMesh(meshGroupEntry) + meshName = studyManager.palStudy.getName(meshEntry) + self.meshes[meshEntry] = meshName + + self.lbMeshes.clear() + for entry,name in self.meshes .items(): + self.lbMeshes.insertItem( name ) + self.lbMeshes.setCurrentItem( 0 ) + + def getUserSelection( self ): + selMeshEntry, keep = None, False + + item = self.lbMeshes.selectedItem() + meshName = str( item.text() ) + for entry, name in self.meshes.items(): + if meshName == name: + selMeshEntry = entry + break + + keep = self.cbAgain.isChecked() + + return selMeshEntry, keep #class MyEficas( Tkinter.Toplevel, eficas.EFICAS, QXEmbed ): @@ -192,6 +224,9 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ): self.subShapes = {} #dictionnaire des sous-géométrie de la géométrie principale ( clé = entry, valeur = name ) #---------------------------------------------------------------------- + # visualisation groupes de mailles + self.workingMesh = {} #dictionnaire clé = identifiant JDC / valeur = entry Mesh + #---------------------------------------------------------------------- self.icolor = 0 # compteur pour mémoriser la couleur courante @@ -223,7 +258,17 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ): studyManager.palStudy.setCurrentStudyID( activeStudyId ) return True - + + def __selectWorkingMesh( self, meshGroupEntries ): + """ + Sélection intéractive 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 ): """ @@ -549,27 +594,90 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ): logger.debug(50*'=') + def displayMeshGroups(self, meshGroupName): + """ + visualisation group de maille de nom meshGroupName dans salome + """ + ok, msgError = False, '' + try: + sg = salome.ImportComponentGUI('SMESH') + currentjdcID = self.bureau.nb.getcurselection() + meshGroupEntries = [] + selMeshEntry = None + selMeshGroupEntry = None + + # liste des groupes de maille de nom meshGroupName + listSO = studyManager.palStudy._myStudy.FindObjectByName(meshGroupName, "SMESH") + for SObjet in listSO: + groupEntry = SObjet.GetID() + meshGroupEntries += [groupEntry] + + # choix d'un maillage + if not self.workingMesh.has_key(currentjdcID): # aucun maillage de défini par défaut 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: # déja un de défini par défaut + 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 + + # si oui, on l'affiche ds la vue VTK + if selMeshGroupEntry: + #CS_pbruno: marche QUE si le module SMESH est activé + myComponent = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") + SCom = studyManager.palStudy._myStudy.FindComponent("SMESH") + studyManager.palStudy._myBuilder.LoadWith( SCom , myComponent ) + sg.CreateAndDisplayActor(selMeshGroupEntry) + salome.sg.DisplayOnly(selMeshGroupEntry) + salome.sg.FitAll() + ok = True + except: + msgError = msgErrorDisplayMeshGroup + logger.debug(50*'=') + return ok, msgError + + def displayShape( self, shapeName ): """ visualisation géométrie 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 = self.__studySync() if not atLeastOneStudy: - return ok, msgError - + return ok, msgError #salome.sg.EraseAll() - print 'displayShapestrGeomShape shapeName -> ', shapeName - current_color = COLORS[ self.icolor % LEN_COLORS ] - ok = studyManager.palStudy.displayShapeByName( shapeName, current_color ) - self.icolor = self.icolor + 1 + print 'displayShapestrGeomShape shapeName -> ', shapeName - if not ok: - msgError = msgErrorDisplayShape - except: - logger.debug(50*'=') + 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 ] + 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 -- 2.39.2