1 # -*- coding: utf-8 -*-
2 #_____________________________________
4 import sys, os, re,types
6 from PyQt4.QtGui import QMessageBox
7 from PyQt4.QtGui import QApplication
9 from salome.kernel.logger import Logger
10 logger = Logger( "EFICAS_SRC.EFICASGUI.eficasSalome.py" )
13 # eficasConfig definit le EFICAS_ROOT
14 # lignes de path ajoutees pour acceder aux packages python du
15 # logiciel Eficas. Le package Aster est ajoute explicitement pour
16 # acceder au module prefs.py. A
17 # ajout de InterfaceQT4 pour permettre l acces a la fenetre Option
18 sys.path[:0]=[eficasConfig.eficasPath,
19 os.path.join( eficasConfig.eficasPath,'Editeur'),
20 os.path.join( eficasConfig.eficasPath,'UiQT4'),
21 os.path.join( eficasConfig.eficasPath,'InterfaceQT4'),
22 #os.path.join( eficasConfig.eficasPath,'Extensions'),
23 eficasConfig.eficasPath,
28 from InterfaceQT4 import qtEficas
32 sgPyQt = SalomePyQt.SalomePyQt()
33 langue=str(sgPyQt.stringSetting("language","language"))
36 from salome.kernel.studyedit import getStudyEditor
39 # couleur pour visualisation des geometries
41 COLORS = colors.ListeColors
42 LEN_COLORS = len( COLORS )
44 from Extensions import localisation
45 localisation.localise(None,langue)
48 class MyEficas( qtEficas.Appli ):
50 Classe de lancement du logiciel EFICAS dans SALOME
51 Cette classe specialise le logiciel Eficas par l'ajout de:
52 a)la creation de groupes de mailles dans le composant SMESH de SALOME
53 b)la visualisation d'elements geometrique dans le coposant GEOM de SALOME par selection dans EFICAS
55 def __init__( self, parent, code = "ASTER", fichier = None, module = "EFICAS",
56 version = None, componentName = "Eficas",multi=False):
60 @param parent: widget Qt parent
62 @param code: catalogue a lancer ( ASTER, HOMARD OPENTURNS ). optionnel ( defaut = ASTER ).
64 @param fichier: chemin absolu du fichier eficas a ouvrir a das le lancement. optionnel
67 dictPathCode={'ASTER':'Aster','OPENTURNS_STUDY':'Openturns_Study','CARMEL3D':'Carmel3D', 'CARMELCND':'CarmelCND',
68 'OPENTURNS_WRAPPER':'Openturns_Wrapper','MAP':'MAP','SEP':'Sep', 'ZCRACKS':'ZCracks'}
69 if code in dictPathCode.keys():
70 pathCode=dictPathCode[code]
71 sys.path[:0]=[os.path.join(eficasConfig.eficasPath,pathCode)]
73 if Editeur.__dict__.has_key( 'session' ):
74 from Editeur import session
78 eficasArg += [ fichier ]
80 eficasArg += [ "-c", version ]
83 session.parse( eficasArg )
85 self.editor = getStudyEditor() # Editeur de l'arbre d'etude
87 qtEficas.Appli.__init__( self,code=code,salome=1,parent=parent,multi=multi,langue=langue)
89 #--------------- specialisation EFICAS dans SALOME -------------------
91 self.salome = True #active les parties de code specifique dans Salome( pour le logiciel Eficas )
92 self.module = module #indique sous quel module dans l'arbre d'etude ajouter le JDC.
93 self.componentName = componentName
95 # donnee pour la creation de groupe de maille
96 self.mainShapeNames = {} #dictionnaire pour gerer les multiples fichiers possibles ouverts par
97 #eficas ( cle = identifiant du JDC ), une mainshape par fichier ouvert.
98 #dictionnaire des sous-geometrie de la geometrie principale ( cle = entry, valeur = name )
99 #----------------------------------------------------------------------
101 self.icolor = 0 # compteur pour memoriser la couleur courante
105 def closeEvent(self,event):
110 if hasattr(self,'readercata') :
119 from Extensions.param2 import originalMath
120 Numeric.cos=originalMath.numeric_ncos
121 Numeric.sin=originalMath.numeric_nsin
122 Numeric.array=originalMath.numeric_narray
123 math.sin=originalMath.sin
124 math.cos=originalMath.cos
125 math.sqrt=originalMath.sqrt
126 math.ceil=originalMath.ceil
127 math.pi=originalMath.pi
134 # ___________________________ Methodes de l ex Pal __________________________________
136 #----------------------------------------------------------------
137 def getCORBAObjectInComponent( self, entry, composant ):
138 #----------------------------------------------------------------
140 mySO = self.editor.study.FindObjectID(entry)
142 object = mySO.GetObject()
144 myComponent = salome.lcc.FindOrLoadComponent("FactoryServer", composant)
145 SCom = self.editor.study.FindComponent( composant )
146 print myComponent , SCom
147 self.editor.builder.LoadWith( SCom , myComponent )
148 object = mySO.GetObject()
150 logger.debug("selectedEntry: An error occurs")
154 #----------------------------------------------
155 def giveMeshGroups( self,entry,label1,typeMesh):
156 #----------------------------------------------
161 monMaillage =self.getCORBAObjectInComponent(entry,"SMESH")
162 if monMaillage != None : # selection d'un groupe de SMESH
163 if monMaillage._narrow(SMESH.SMESH_Mesh):
164 mailSO = self.editor.study.FindObjectID(entry)
165 if mailSO == None : return names, msg
168 subIt = self.editor.study.NewChildIterator(mailSO)
170 subSO = subIt.Value()
173 if (subSO.GetName()[0:9]!=label1) : continue
174 subSSMeshit=self.editor.study.NewChildIterator(subSO)
175 while subSSMeshit.More():
176 subSSMeshSO = subSSMeshit.Value()
178 if subSSMeshSO.GetObject()._narrow(typeMesh):
179 names.append(subSSMeshSO.GetName())
181 msg=entry + self.tr(" n est pas un maillage")
183 logger.debug(' giveMeshGroups pb avec ( entry = %s ) ' %entry )
184 msg=' giveMeshGroup pb avec ( entry = %s ) '+ entry
187 #-------------------------------------
188 def isMeshGroup( self,entry):
189 #-------------------------------------
193 monObjet =self.getCORBAObjectInComponent(entry,"SMESH")
194 if monObjet != None : # selection d'un groupe de SMESH
195 if monObjet._narrow(SMESH.SMESH_GroupBase):
198 logger.debug(' isMeshGroup pb avec ( entry = %s ) ' %entry )
201 #-------------------------------------
202 def isMesh( self,entry):
203 #-------------------------------------
207 monObjet =self.getCORBAObjectInComponent(entry,"SMESH")
208 if monObjet != None : # selection d'un groupe de SMESH
209 if monObjet._narrow(SMESH.SMESH_Mesh):
212 logger.debug(' isMesh pb avec ( entry = %s ) ' %entry )
215 #-------------------------------------
216 def getMesh( self,entry):
217 #-------------------------------------
222 monObjet =self.getCORBAObjectInComponent(entry,"SMESH")
223 if monObjet != None : # selection d'un groupe de SMESH
224 meshObject=monObjet._narrow(SMESH.SMESH_Mesh)
226 logger.debug(' pb avec ( entry = %s ) ' %entry )
229 #-------------------------------------
231 #-------------------------------------
232 def isShape( self,entry):
233 #-------------------------------------
237 monObjet =self.getCORBAObjectInComponent(entry,"GEOM")
238 if monObjet != None : # selection d'un objet GEOM
239 if monObjet._narrow(GEOM.GEOM_Object ):
242 logger.debug(' isShape pb avec ( entry = %s ) ' %entry )
245 #-----------------------------------------------------------------
246 def getMainShapeEntry(self,entry):
247 #-----------------------------------------------------------------
250 mainShapeEntry = entry.split(':')[:4]
251 if len(mainShapeEntry) == 4:
252 strMainShapeEntry = '%s:%s:%s:%s'%tuple(mainShapeEntry)
253 if self.isMainShape(strMainShapeEntry):
254 result = strMainShapeEntry
256 logger.debug( 'Erreur pour SalomeStudy.getMainShapeEntry( entry = %s ) ' %entry )
260 #-----------------------------------------------------------------
261 def isMainShape(self,entry):
262 #-----------------------------------------------------------------
265 monObjet =self.getCORBAObjectInComponent(entry,"GEOM")
267 shape = monObjet._narrow( GEOM.GEOM_Object )
268 if shape.IsMainShape():
271 logger.debug( 'Errreur pour SalomeStudy.isMainShape( entry = %s ) ' %entry )
276 #-----------------------------------------------------------------
277 def ChercheType( self, shape ):
278 #-----------------------------------------------------------------
279 tgeo = shape.GetShapeType()
280 geomEngine = salome.lcc.FindOrLoadComponent( "FactoryServer", "GEOM" )
281 #print dir(self.editor.study)
282 groupIMeasureOp = geomEngine.GetIMeasureOperations(self.editor.study._get_StudyId())
283 if tgeo != "COMPOUND" : return tgeo
285 strInfo = groupIMeasureOp.WhatIs( shape )
287 l = strInfo.split('\n')
290 nom, valeur = couple.split(':')
291 dictInfo[ nom.strip() ] = valeur.strip()
293 ordre = [ "COMPSOLID", "SOLID", "SHELL", "FACE", "WIRE", "EDGE", "VERTEX" ]
295 if dictInfo[ t ] != '0':
301 #-----------------------------------------------------------------
302 def selectShape( self, editor, entry, kwType = None ):
303 #-----------------------------------------------------------------
305 selection sous-geometrie dans Salome:
306 -test1) si c'est un element sous-geometrique .
307 -test2) si appartient a la geometrie principale.
309 name, msgError = '',''
310 mySO = self.editor.study.FindObjectID(entry)
312 return name, msgError
313 object = mySO.GetObject()
315 return name, msgError
318 shape = object._narrow( GEOM.GEOM_Object )
320 return name, msgError
322 tGeo=self.ChercheType(shape)
324 return name, msgError
325 #if kwType == "GROUP_NO" and str(tGeo) != "VERTEX":
326 # name,msgError = '',"la selection n est pas un Vertex"
327 # return name, msgError
328 if kwType == "GROUP_MA" and str(tGeo) == "VERTEX":
329 name, msgError = '', "la selection n est pas un groupe de maille"
330 return name, msgError
332 mainShapeEntry = self.getMainShapeEntry( entry )
333 if self.mainShapeNames.has_key( editor ):
334 #print "------------- self.mainShapeNames[editor]" , self.mainShapeNames[editor]
335 if self.mainShapeNames[editor] == mainShapeEntry:
338 msgError="Le groupe reference la geometrie " + mainShapeEntry + " et non " + self.mainShapeNames[editor]
340 self.mainShapeNames[editor] = mainShapeEntry
343 return name, msgError
346 #-----------------------------------------------------------------
347 def selectMeshGroup( self, editor, selectedEntry, kwType = None ):
348 #-----------------------------------------------------------------
350 selection groupe de maille dans Salome:
351 -test 1) si c'est un groupe de maille
352 -test 2) si le maillage fait reference a la geometrie principale
354 name, msgError = '',''
356 mySO=self.editor.study.FindObjectID(selectedEntry )
357 from salome.smesh.smeshstudytools import SMeshStudyTools
358 monSMeshStudyTools=SMeshStudyTools(self.editor)
359 meshSO = monSMeshStudyTools.getMeshFromGroup(mySO)
360 if meshSO == None : return name, msgError
362 # on verifie que l entree selectionnee a le bon type (NODE ou EDGE...)
364 groupObject = self.getCORBAObjectInComponent(selectedEntry,"SMESH")
366 logger.debug("selectedMeshEntry: An error occurs")
369 aGroup = groupObject._narrow( SMESH.SMESH_GroupBase )
370 if aGroup: tGroup = aGroup.GetType()
372 if kwType == "GROUP_NO" and tGroup != SMESH.NODE:
373 msgError = self.tr("GROUP_NO attend un groupe de noeud")
374 return name, msgError
375 elif kwType == "GROUP_MA" and tGroup == SMESH.NODE:
376 msgError = self.tr("GROUP_MA attend un point goupe de maille")
377 return name, msgError
379 # on cherche la shape associee
380 #PN PN mesh_Object est un SOject
381 meshObject = meshSO.GetObject()
382 mesh = meshObject._narrow( SMESH.SMESH_Mesh )
383 if mesh: #c'est bien un objet maillage
384 shape = mesh.GetShapeToMesh()
386 ior = salome.orb.object_to_string( shape )
388 sObject = self.editor.study.FindObjectIOR( ior )
389 mainShapeID = sObject.GetID()
393 return name, self.tr("Type d objet non permis")
395 # on cherche si la shape associee est la bonne
396 #print "------------- mainShapeID" , mainShapeID
397 if self.mainShapeNames.has_key( editor ):
398 #print "------------- self.mainShapeNames[editor]" , self.mainShapeNames[editor]
399 if self.mainShapeNames[editor] == mainShapeID:
402 msgError=self.tr("Le groupe reference la geometrie ") + mainShapeID + self.tr(" et non ") + self.mainShapeNames[editor]
404 self.mainShapeNames[editor] = mainShapeID
407 #print "------------------------------ name :", name
408 #print "------------------------------ name :", name
409 #print "------------------------------ name :", name
413 def displayMeshGroups(self, meshGroupName):
415 visualisation group de maille de nom meshGroupName dans salome
417 ok, msgError = False, ''
420 sg = salome.ImportComponentGUI('SMESH')
421 meshGroupEntries = []
423 selMeshGroupEntry = None
425 # liste des groupes de maille de nom meshGroupName
426 listSO = self.editor.study.FindObjectByName(meshGroupName, "SMESH")
428 #print "liste des groupes de maille de nom %s: "%(meshGroupName), listSO
431 return 0,self.tr('Plusieurs objets portent ce nom')
433 return 0,self.tr('Aucun objet ne porte ce nom')
435 groupEntry = SObjet.GetID()
436 myComponent = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
437 SCom = self.editor.study.FindComponent("SMESH")
438 myBuilder = self.editor.study.NewBuilder()
439 myBuilder.LoadWith( SCom , myComponent )
440 sg.CreateAndDisplayActor(groupEntry)
441 #color = COLORS[ self.icolor % LEN_COLORS ]
442 #self.icolor = self.icolor + 1
443 #sg.SetColor(groupEntry, color[0], color[1], color[2])
444 salome.sg.Display(groupEntry)
450 msgError = self.tr("Impossible d afficher ")+shapeName
454 # ___________________________ Methodes appelees par EFICAS __________________________________
455 #----------------------------------------------------------------
456 def selectGroupFromSalome( self, kwType = None, editor=None):
457 #----------------------------------------------------------------
459 Selection d'element(s) d'une geometrie ( sub-shape ) ou d'element(s) de maillage ( groupe de maille) partir de l'arbre salome
460 retourne ( la liste des noms des groupes, message d'erreur )
462 Note: Appele par EFICAS lorsqu'on clique sur le bouton ajouter la liste du panel GROUPMA
466 atLeastOneStudy = self.editor.study
467 if not atLeastOneStudy:
470 # recupere toutes les selections de l'utilsateur dans l'arbre Salome
471 entries = salome.sg.getAllSelected()
472 nbEntries = len( entries )
474 for entry in entries:
475 if self.isMeshGroup(entry): # selection d 'un sous maillage
476 name, msg = self.selectMeshGroup( editor, entry, kwType )
477 elif self.isShape(entry): # selection d'une sous-geometrie
478 name, msg = self.selectShape( editor, entry, kwType )
480 name, msg = None,self.tr("Selection SALOME non autorisee.")
485 logger.debug("selectGroupFromSalome: An error occurs")
486 #print "=================== selectGroupFromSalome ", names, msg
487 #print "=================== selectGroupFromSalome ", names, msg
488 #print "=================== selectGroupFromSalome ", names, msg
491 #----------------------------------------------------------------
492 def selectMeshFile( self, editor=None):
493 #----------------------------------------------------------------
497 atLeastOneStudy = self.editor.study
498 if not atLeastOneStudy: return "", 'Pas d etude'
500 # recupere toutes les selections de l'utilsateur dans l'arbre Salome
501 entries = salome.sg.getAllSelected()
502 nbEntries = len( entries )
503 if nbEntries != 1 : return "", 'select a Mesh'
505 if not self.isMesh(entry): return "", 'select a Mesh'
506 mySO=self.editor.study.FindObjectID(entry)
508 ok, anAttr = mySO.FindAttribute("AttributeName")
509 if not ok : return "" ,'Pb de nommage'
510 meshFile="/tmp/"+str(anAttr.Value())+'.med'
511 myMesh=self.getMesh(entry)
512 if myMesh==None : return "" ,'Pb dans la selection '
513 myMesh.ExportMED( meshFile, 0)
516 return "", "Pb dans la selection "
518 #----------------------------------------------------------------
519 def importMedFile( self,fileName, editor=None):
520 #----------------------------------------------------------------
522 theStudy = self.editor.study
523 if not theStudy: return (0, 'Pas d etude')
524 from salome.smesh import smeshBuilder
525 smesh = smeshBuilder.New(theStudy)
526 aMesh,aResult = smesh.CreateMeshesFromMED(fileName)
527 salome.sg.updateObjBrowser(1)
530 return (O,"Pb a l import")
532 #----------------------------------------------------------------
533 def selectEntryFromSalome( self, kwType = None, editor=None):
534 #----------------------------------------------------------------
536 Selection d'element a partir de l'arbre salome
537 Ne verifie que l unicite de la selection
538 retourne ( la liste avec le nom du groupe, message d'erreur )
540 retourne une liste pour etre coherent avec selectGroupFromSalome
541 Note: Appele par EFICAS lorsqu'on clique sur le bouton ajouter la liste du panel SalomeEntry
544 if self.editor.study._non_existent():
545 raise Exception(self.tr(u"L'étude Salome n'existe plus"))
546 entries = salome.sg.getAllSelected()
547 nbEntries = len( entries )
549 raise Exception(self.tr(u"Veuillez sélectionner une entrée de l'arbre d'étude de Salome"))
551 raise Exception(self.tr(u"Une seule entrée doit être sélectionnée dans l'arbre d'étude de Salome"))
553 value = kwType.get_selected_value(entries[0], self.editor)
554 msg = self.tr(u"L'entrée de l'arbre d'étude de Salome a été sélectionnée")
557 QMessageBox.information(self, self.tr(u"Sélection depuis Salome"), unicode(e))
558 return [], unicode(e)
561 #---------------------------------------------
562 def addJdcInSalome( self, jdcPath ):
563 #---------------------------------------------
565 Ajoute le Jeu De Commande dans l'arbre d'etude Salome dans la rubrique EFICAS
568 msgError = "Erreur dans l'export du fichier de commande dans l'arbre d'etude Salome"
571 atLeastOneStudy = self.editor.study
572 if not atLeastOneStudy:
575 fileType = { 'ASTER' : "FICHIER_EFICAS_ASTER",
576 'SEP' : "FICHIER_EFICAS_SEP",
577 'MAP' : "FICHIER_EFICAS_MAP",
578 'OPENTURNS': "FICHIER_EFICAS_OPENTURNS",
579 'OPENTURNS_STUDY': "FICHIER_EFICAS_OPENTURNS_STUDY",
580 'OPENTURNS_WRAPPER': "FICHIER_EFICAS_OPENTURNS_WRAPPER",
581 'CARMEL3D': "FICHIER_EFICAS_CARMEL3D",
582 'CARMELCND': "FICHIER_EFICAS_CARMELCND",
585 folderName = { 'ASTER' : 'AsterFiles',
587 'CARMEL3D' : 'CARMEL3DFiles' ,
588 'CARMELCND' : 'CARMELCNDFiles' ,
590 'OPENTURNS_STUDY': 'OpenturnsFiles',
591 'OPENTURNS_WRAPPER': 'OpenturnsFiles'}
593 folderType = { 'ASTER': "ASTER_FILE_FOLDER",
594 'SEP': "SEP_FILE_FOLDER",
595 'MAP': "MAP_FILE_FOLDER",
596 'CARMEL3D': "CARMEL3D_FILE_FOLDER",
597 'CARMELCND': "CARMELCND_FILE_FOLDER",
598 'OPENTURNS_STUDY':"OPENTURNS_FILE_FOLDER",
599 'OPENTURNS_WRAPPER': "OPENTURNS_FILE_FOLDER"}
602 moduleEntry = self.editor.findOrCreateComponent(self.module, self.componentName)
603 itemName = re.split("/",jdcPath)[-1]
605 if folderName.has_key(self.code) :
606 monFolderName=folderName[ self.code ]
608 monFolderName=str(self.code)+"Files"
610 if folderType.has_key(self.code) :
611 monFolderType=fileType[ self.code ]
613 monFolderType=str(self.code)+"_FILE_FOLDER"
615 if fileType.has_key(self.code) :
616 monFileType=fileType[ self.code ]
618 monFileType="FICHIER_EFICAS_"+str(self.code)
620 fatherEntry = self.editor.findOrCreateItem(
622 name = monFolderName,
623 #icon = "ICON_COMM_FOLDER",
624 fileType = monFolderType)
626 commEntry = self.editor.findOrCreateItem( fatherEntry ,
628 fileType = monFileType,
630 #icon = "ICON_COMM_FILE",
631 comment = str( jdcPath ))
633 salome.sg.updateObjBrowser(1)
635 #print 'addJdcInSalome commEntry->', commEntry
637 ok, msgError = True, ''
638 except Exception, exc:
639 msgError = "Can't add Eficas file to Salome study tree"
640 logger.debug(msgError, exc_info = True)
641 QMessageBox.warning(self, self.tr("Warning"),
642 self.tr("%s. Raison:\n%s\n\n Voir la log pour plus de détails " % (msgError, exc)))
646 #---------------------------------------
647 def displayShape( self, shapeName ):
648 #---------------------------------------
650 visualisation de nom shapeName dans salome
652 ok, msgError = False, ''
656 sgPyQt = SalomePyQt.SalomePyQt()
657 myActiveView=sgPyQt.getActiveView()
658 if myActiveView < 0 :
659 return ok, 'pas de vue courante'
661 currentViewType=sgPyQt.getViewType(myActiveView)
662 if str(currentViewType) != "OCCViewer" : # maillage
663 ok, msgError = self.displayMeshGroups(shapeName)
665 current_color = COLORS[ self.icolor % LEN_COLORS ]
666 from salome.geom.geomtools import GeomStudyTools
667 myGeomTools=GeomStudyTools(self.editor)
668 ok = myGeomTools.displayShapeByName( shapeName, current_color )
670 self.icolor = self.icolor + 1
672 msgError =self.tr("Impossible d afficher ")+shapeName
678 #---------------------------------------
679 def ChercheGrpMeshInSalome(self):
680 #---------------------------------------
681 print "je passe par la"
686 entries = salome.sg.getAllSelected()
687 nbEntries = len( entries )
688 names, msg = None, self.tr("Selection SALOME non autorisee.")
690 for entry in entries:
691 names,msg=self.giveMeshGroups(entry,"SubMeshes",SMESH.SMESH_subMesh)
697 #---------------------------------------
698 def ChercheGrpMailleInSalome(self):
699 #---------------------------------------
704 entries = salome.sg.getAllSelected()
705 nbEntries = len( entries )
706 names, msg = None, self.tr("Selection SALOME non autorisee.")
708 for entry in entries:
710 names,msg=self.giveMeshGroups(entry,"Groups of",SMESH.SMESH_GroupBase)
721 #-------------------------------------------------------------------------------------------------------
722 # Pilotage de la Visu des elements de structures
726 def envoievisu(self,liste_commandes):
728 from salome.geom.structelem import StructuralElementManager, InvalidParameterError
730 QMessageBox.critical(self, self.tr("Error"),
731 self.tr("Impossible d'afficher les elements de structure: "
732 "module GEOM n est pas installe."))
735 atLeastOneStudy = self.editor.study
736 if not atLeastOneStudy:
738 logger.debug(10*'#'+":envoievisu: creating a StructuralElementManager instance")
739 structElemManager = StructuralElementManager()
740 elem = structElemManager.createElement(liste_commandes)
742 salome.sg.updateObjBrowser(True)
743 except InvalidParameterError, err:
744 trStr = self.tr("Invalid parameter for group %(group)s: %(expr)s must be "
745 "greater than %(minval)g (actual value is %(value)g)")
746 msg = str(trStr) % {"group": err.groupName, "expr": err.expression,
747 "minval": err.minValue, "value": err.value}
748 QMessageBox.warning(self, self.tr("Error"), msg)
750 traceback.print_exc()
751 logger.debug(10*'#'+":pb dans envoievisu")
756 This class replaces the class Accas.SalomeEntry (defined in EFICAS tool)
757 when Eficas is launched in Salome context. It handles the objects that can
758 be selected from Salome object browser.
759 By default, the selected value is the entry of the selected item in the
760 object browser. This class can be subclassed to provide more advanced
764 help_message = u"Une entrée de l'arbre d'étude de Salome est attendue"
766 def __init__(self, entryStr):
767 self._entry = entryStr
770 def __convert__(entryStr):
771 return SalomeEntry(entryStr)
774 def get_selected_value(selected_entry, study_editor):
775 return selected_entry
778 #-------------------------------------------------------------------------------------------------------
779 # Point d'entree lancement EFICAS
781 def runEficas( code=None, fichier=None, module = "EFICAS", version=None, componentName = "Eficas",multi=False):
782 logger.debug(10*'#'+":runEficas: START")
784 logger.debug(10*'#'+":runEficas: code="+str(code))
785 logger.debug(10*'#'+":runEficas: fichier="+str(fichier))
786 logger.debug(10*'#'+":runEficas: module="+str(module))
787 logger.debug(10*'#'+":runEficas: version="+str(version))
789 #if not appli: #une seul instance possible!
790 appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier,
791 module = module, version = version, componentName = componentName,multi=multi )
792 #if not appli: #une seul instance possible!
793 # appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier,
794 # module = module, componentName = componentName, version=version )
795 logger.debug(10*'#'+":runEficas: END")