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)
49 class MyEficas( qtEficas.Appli ):
51 Classe de lancement du logiciel EFICAS dans SALOME
52 Cette classe specialise le logiciel Eficas par l'ajout de:
53 a)la creation de groupes de mailles dans le composant SMESH de SALOME
54 b)la visualisation d'elements geometrique dans le coposant GEOM de SALOME par selection dans EFICAS
56 def __init__( self, parent, code = "ASTER", fichier = None, module = "EFICAS",
57 version = None, componentName = "Eficas",multi=False):
61 @param parent: widget Qt parent
63 @param code: catalogue a lancer ( ASTER, HOMARD OPENTURNS ). optionnel ( defaut = ASTER ).
65 @param fichier: chemin absolu du fichier eficas a ouvrir a das le lancement. optionnel
68 dictPathCode={'ASTER':'Aster','OPENTURNS_STUDY':'Openturns_Study','CARMEL3D':'Carmel3D',
69 'OPENTURNS_WRAPPER':'Openturns_Wrapper','MAP':'MAP','SEP':'Sep', 'ZCRACKS':'ZCracks'}
70 if code in dictPathCode.keys():
71 pathCode=dictPathCode[code]
72 sys.path[:0]=[os.path.join(eficasConfig.eficasPath,pathCode)]
74 if Editeur.__dict__.has_key( 'session' ):
75 from Editeur import session
79 eficasArg += [ fichier ]
81 eficasArg += [ "-c", version ]
84 session.parse( eficasArg )
86 self.editor = getStudyEditor() # Editeur de l'arbre d'etude
88 qtEficas.Appli.__init__( self,code=code,salome=1,parent=parent,multi=multi,langue=langue)
90 #--------------- specialisation EFICAS dans SALOME -------------------
92 self.salome = True #active les parties de code specifique dans Salome( pour le logiciel Eficas )
93 self.module = module #indique sous quel module dans l'arbre d'etude ajouter le JDC.
94 self.componentName = componentName
96 # donnee pour la creation de groupe de maille
97 self.mainShapeNames = {} #dictionnaire pour gerer les multiples fichiers possibles ouverts par
98 #eficas ( cle = identifiant du JDC ), une mainshape par fichier ouvert.
99 #dictionnaire des sous-geometrie de la geometrie principale ( cle = entry, valeur = name )
100 #----------------------------------------------------------------------
102 self.icolor = 0 # compteur pour memoriser la couleur courante
106 def closeEvent(self,event):
111 if hasattr(self,'readercata') :
118 # ___________________________ Methodes de l ex Pal __________________________________
120 #----------------------------------------------------------------
121 def getCORBAObjectInComponent( self, entry, composant ):
122 #----------------------------------------------------------------
124 mySO = self.editor.study.FindObjectID(entry)
126 object = mySO.GetObject()
128 myComponent = salome.lcc.FindOrLoadComponent("FactoryServer", composant)
129 SCom = self.editor.study.FindComponent( composant )
130 print myComponent , SCom
131 self.editor.builder.LoadWith( SCom , myComponent )
132 object = mySO.GetObject()
134 logger.debug("selectedEntry: An error occurs")
138 #----------------------------------------------
139 def giveMeshGroups( self,entry,label1,typeMesh):
140 #----------------------------------------------
145 monMaillage =self.getCORBAObjectInComponent(entry,"SMESH")
146 if monMaillage != None : # selection d'un groupe de SMESH
147 if monMaillage._narrow(SMESH.SMESH_Mesh):
148 mailSO = self.editor.study.FindObjectID(entry)
149 if mailSO == None : return names, msg
152 subIt = self.editor.study.NewChildIterator(mailSO)
154 subSO = subIt.Value()
157 if (subSO.GetName()[0:9]!=label1) : continue
158 subSSMeshit=self.editor.study.NewChildIterator(subSO)
159 while subSSMeshit.More():
160 subSSMeshSO = subSSMeshit.Value()
162 if subSSMeshSO.GetObject()._narrow(typeMesh):
163 names.append(subSSMeshSO.GetName())
165 msg=entry + self.tr(" n est pas un maillage")
167 logger.debug(' giveMeshGroups pb avec ( entry = %s ) ' %entry )
168 msg=' giveMeshGroup pb avec ( entry = %s ) '+ entry
171 #-------------------------------------
172 def isMeshGroup( self,entry):
173 #-------------------------------------
177 monObjet =self.getCORBAObjectInComponent(entry,"SMESH")
178 if monObjet != None : # selection d'un groupe de SMESH
179 if monObjet._narrow(SMESH.SMESH_GroupBase):
182 logger.debug(' isMeshGroup pb avec ( entry = %s ) ' %entry )
185 #-------------------------------------
186 def isMesh( self,entry):
187 #-------------------------------------
191 monObjet =self.getCORBAObjectInComponent(entry,"SMESH")
192 if monObjet != None : # selection d'un groupe de SMESH
193 if monObjet._narrow(SMESH.SMESH_Mesh):
196 logger.debug(' isMesh pb avec ( entry = %s ) ' %entry )
199 #-------------------------------------
200 def getMesh( self,entry):
201 #-------------------------------------
206 monObjet =self.getCORBAObjectInComponent(entry,"SMESH")
207 if monObjet != None : # selection d'un groupe de SMESH
208 meshObject=monObjet._narrow(SMESH.SMESH_Mesh)
210 # logger.debug(' pb avec ( entry = %s ) ' %entry )
213 #-------------------------------------
215 #-------------------------------------
216 def isShape( self,entry):
217 #-------------------------------------
221 monObjet =self.getCORBAObjectInComponent(entry,"GEOM")
222 if monObjet != None : # selection d'un objet GEOM
223 if monObjet._narrow(GEOM.GEOM_Object ):
226 logger.debug(' isShape pb avec ( entry = %s ) ' %entry )
229 #-----------------------------------------------------------------
230 def getMainShapeEntry(self,entry):
231 #-----------------------------------------------------------------
234 mainShapeEntry = entry.split(':')[:4]
235 if len(mainShapeEntry) == 4:
236 strMainShapeEntry = '%s:%s:%s:%s'%tuple(mainShapeEntry)
237 if self.isMainShape(strMainShapeEntry):
238 result = strMainShapeEntry
240 logger.debug( 'Erreur pour SalomeStudy.getMainShapeEntry( entry = %s ) ' %entry )
244 #-----------------------------------------------------------------
245 def isMainShape(self,entry):
246 #-----------------------------------------------------------------
249 monObjet =self.getCORBAObjectInComponent(entry,"GEOM")
251 shape = monObjet._narrow( GEOM.GEOM_Object )
252 if shape.IsMainShape():
255 logger.debug( 'Errreur pour SalomeStudy.isMainShape( entry = %s ) ' %entry )
260 #-----------------------------------------------------------------
261 def ChercheType( self, shape ):
262 #-----------------------------------------------------------------
263 tgeo = shape.GetShapeType()
264 geomEngine = salome.lcc.FindOrLoadComponent( "FactoryServer", "GEOM" )
265 #print dir(self.editor.study)
266 groupIMeasureOp = geomEngine.GetIMeasureOperations(self.editor.study._get_StudyId())
267 if tgeo != "COMPOUND" : return tgeo
269 strInfo = groupIMeasureOp.WhatIs( shape )
271 l = strInfo.split('\n')
274 nom, valeur = couple.split(':')
275 dictInfo[ nom.strip() ] = valeur.strip()
277 ordre = [ "COMPSOLID", "SOLID", "SHELL", "FACE", "WIRE", "EDGE", "VERTEX" ]
279 if dictInfo[ t ] != '0':
285 #-----------------------------------------------------------------
286 def selectShape( self, editor, entry, kwType = None ):
287 #-----------------------------------------------------------------
289 selection sous-geometrie dans Salome:
290 -test1) si c'est un element sous-geometrique .
291 -test2) si appartient a la geometrie principale.
293 name, msgError = '',''
294 mySO = self.editor.study.FindObjectID(entry)
296 return name, msgError
297 object = mySO.GetObject()
299 return name, msgError
302 shape = object._narrow( GEOM.GEOM_Object )
304 return name, msgError
306 tGeo=self.ChercheType(shape)
308 return name, msgError
309 #if kwType == "GROUP_NO" and str(tGeo) != "VERTEX":
310 # name,msgError = '',"la selection n est pas un Vertex"
311 # return name, msgError
312 if kwType == "GROUP_MA" and str(tGeo) == "VERTEX":
313 name, msgError = '', "la selection n est pas un groupe de maille"
314 return name, msgError
316 mainShapeEntry = self.getMainShapeEntry( entry )
317 if self.mainShapeNames.has_key( editor ):
318 #print "------------- self.mainShapeNames[editor]" , self.mainShapeNames[editor]
319 if self.mainShapeNames[editor] == mainShapeEntry:
322 msgError="Le groupe reference la geometrie " + mainShapeEntry + " et non " + self.mainShapeNames[editor]
324 self.mainShapeNames[editor] = mainShapeEntry
327 return name, msgError
330 #-----------------------------------------------------------------
331 def selectMeshGroup( self, editor, selectedEntry, kwType = None ):
332 #-----------------------------------------------------------------
334 selection groupe de maille dans Salome:
335 -test 1) si c'est un groupe de maille
336 -test 2) si le maillage fait reference a la geometrie principale
338 name, msgError = '',''
340 mySO=self.editor.study.FindObjectID(selectedEntry )
341 from salome.smesh.smeshstudytools import SMeshStudyTools
342 monSMeshStudyTools=SMeshStudyTools(self.editor)
343 meshSO = monSMeshStudyTools.getMeshFromGroup(mySO)
344 if meshSO == None : return name, msgError
346 # on verifie que l entree selectionnee a le bon type (NODE ou EDGE...)
348 groupObject = self.getCORBAObjectInComponent(selectedEntry,"SMESH")
350 logger.debug("selectedMeshEntry: An error occurs")
353 aGroup = groupObject._narrow( SMESH.SMESH_GroupBase )
354 if aGroup: tGroup = aGroup.GetType()
356 if kwType == "GROUP_NO" and tGroup != SMESH.NODE:
357 msgError = self.tr("GROUP_NO attend un groupe de noeud")
358 return name, msgError
359 elif kwType == "GROUP_MA" and tGroup == SMESH.NODE:
360 msgError = self.tr("GROUP_MA attend un point goupe de maille")
361 return name, msgError
363 # on cherche la shape associee
364 #PN PN mesh_Object est un SOject
365 meshObject = meshSO.GetObject()
366 mesh = meshObject._narrow( SMESH.SMESH_Mesh )
367 if mesh: #c'est bien un objet maillage
368 shape = mesh.GetShapeToMesh()
370 ior = salome.orb.object_to_string( shape )
372 sObject = self.editor.study.FindObjectIOR( ior )
373 mainShapeID = sObject.GetID()
377 return name, self.tr("Type d objet non permis")
379 # on cherche si la shape associee est la bonne
380 #print "------------- mainShapeID" , mainShapeID
381 if self.mainShapeNames.has_key( editor ):
382 #print "------------- self.mainShapeNames[editor]" , self.mainShapeNames[editor]
383 if self.mainShapeNames[editor] == mainShapeID:
386 msgError=self.tr("Le groupe reference la geometrie ") + mainShapeID + self.tr(" et non ") + self.mainShapeNames[editor]
388 self.mainShapeNames[editor] = mainShapeID
391 #print "------------------------------ name :", name
392 #print "------------------------------ name :", name
393 #print "------------------------------ name :", name
397 def displayMeshGroups(self, meshGroupName):
399 visualisation group de maille de nom meshGroupName dans salome
401 ok, msgError = False, ''
404 sg = salome.ImportComponentGUI('SMESH')
405 meshGroupEntries = []
407 selMeshGroupEntry = None
409 # liste des groupes de maille de nom meshGroupName
410 listSO = self.editor.study.FindObjectByName(meshGroupName, "SMESH")
412 #print "liste des groupes de maille de nom %s: "%(meshGroupName), listSO
415 return 0,self.tr('Plusieurs objets portent ce nom')
417 return 0,self.tr('Aucun objet ne porte ce nom')
419 groupEntry = SObjet.GetID()
420 myComponent = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
421 SCom = self.editor.study.FindComponent("SMESH")
422 myBuilder = self.editor.study.NewBuilder()
423 myBuilder.LoadWith( SCom , myComponent )
424 sg.CreateAndDisplayActor(groupEntry)
425 #color = COLORS[ self.icolor % LEN_COLORS ]
426 #self.icolor = self.icolor + 1
427 #sg.SetColor(groupEntry, color[0], color[1], color[2])
428 salome.sg.Display(groupEntry)
434 msgError = self.tr("Impossible d afficher ")+shapeName
438 # ___________________________ Methodes appelees par EFICAS __________________________________
439 #----------------------------------------------------------------
440 def selectGroupFromSalome( self, kwType = None, editor=None):
441 #----------------------------------------------------------------
443 Selection d'element(s) d'une geometrie ( sub-shape ) ou d'element(s) de maillage ( groupe de maille) partir de l'arbre salome
444 retourne ( la liste des noms des groupes, message d'erreur )
446 Note: Appele par EFICAS lorsqu'on clique sur le bouton ajouter la liste du panel GROUPMA
450 atLeastOneStudy = self.editor.study
451 if not atLeastOneStudy:
454 # recupere toutes les selections de l'utilsateur dans l'arbre Salome
455 entries = salome.sg.getAllSelected()
456 nbEntries = len( entries )
458 for entry in entries:
459 if self.isMeshGroup(entry): # selection d 'un sous maillage
460 name, msg = self.selectMeshGroup( editor, entry, kwType )
461 elif self.isShape(entry): # selection d'une sous-geometrie
462 name, msg = self.selectShape( editor, entry, kwType )
464 name, msg = None,self.tr("Selection SALOME non autorisee.")
469 logger.debug("selectGroupFromSalome: An error occurs")
470 #print "=================== selectGroupFromSalome ", names, msg
471 #print "=================== selectGroupFromSalome ", names, msg
472 #print "=================== selectGroupFromSalome ", names, msg
475 #----------------------------------------------------------------
476 def selectMeshFile( self, editor=None):
477 #----------------------------------------------------------------
481 atLeastOneStudy = self.editor.study
482 if not atLeastOneStudy: return "", 'Pas d etude'
484 # recupere toutes les selections de l'utilsateur dans l'arbre Salome
485 entries = salome.sg.getAllSelected()
486 nbEntries = len( entries )
487 if nbEntries != 1 : return "", 'select a Mesh'
489 if not self.isMesh(entry): return "", 'select a Mesh'
490 mySO=self.editor.study.FindObjectID(entry)
492 ok, anAttr = mySO.FindAttribute("AttributeName")
493 if not ok : return "" ,'Pb de nommage'
494 meshFile="/tmp/"+str(anAttr.Value())+'.med'
495 myMesh=self.getMesh(entry)
496 if myMesh==None : return "" ,'Pb dans la selection '
497 myMesh.ExportMED( meshFile, 0)
500 return "", "Pb dans la selection "
502 #----------------------------------------------------------------
503 def selectEntryFromSalome( self, kwType = None, editor=None):
504 #----------------------------------------------------------------
506 Selection d'element a partir de l'arbre salome
507 Ne verifie que l unicite de la selection
508 retourne ( la liste avec le nom du groupe, message d'erreur )
510 retourne une liste pour etre coherent avec selectGroupFromSalome
511 Note: Appele par EFICAS lorsqu'on clique sur le bouton ajouter la liste du panel SalomeEntry
514 if self.editor.study._non_existent():
515 raise Exception(self.tr(u"L'étude Salome n'existe plus"))
516 entries = salome.sg.getAllSelected()
517 nbEntries = len( entries )
519 raise Exception(self.tr(u"Veuillez sélectionner une entrée de l'arbre d'étude de Salome"))
521 raise Exception(self.tr(u"Une seule entrée doit être sélectionnée dans l'arbre d'étude de Salome"))
523 value = kwType.get_selected_value(entries[0], self.editor)
524 msg = self.tr(u"L'entrée de l'arbre d'étude de Salome a été sélectionnée")
527 QMessageBox.information(self, self.tr(u"Sélection depuis Salome"), unicode(e))
528 return [], unicode(e)
531 #---------------------------------------------
532 def addJdcInSalome( self, jdcPath ):
533 #---------------------------------------------
535 Ajoute le Jeu De Commande dans l'arbre d'etude Salome dans la rubrique EFICAS
538 msgError = "Erreur dans l'export du fichier de commande dans l'arbre d'etude Salome"
541 atLeastOneStudy = self.editor.study
542 if not atLeastOneStudy:
545 fileType = { 'ASTER' : "FICHIER_EFICAS_ASTER",
546 'SEP' : "FICHIER_EFICAS_SEP",
547 'MAP' : "FICHIER_EFICAS_MAP",
548 'OPENTURNS': "FICHIER_EFICAS_OPENTURNS",
549 'OPENTURNS_STUDY': "FICHIER_EFICAS_OPENTURNS_STUDY",
550 'OPENTURNS_WRAPPER': "FICHIER_EFICAS_OPENTURNS_WRAPPER",
551 'CARMEL3D': "FICHIER_EFICAS_CARMEL3D",
554 folderName = { 'ASTER' : 'AsterFiles',
556 'CARMEL3D' : 'CARMEL3DFiles' ,
558 'OPENTURNS_STUDY': 'OpenturnsFiles',
559 'OPENTURNS_WRAPPER': 'OpenturnsFiles'}
561 folderType = { 'ASTER': "ASTER_FILE_FOLDER",
562 'SEP': "SEP_FILE_FOLDER",
563 'MAP': "MAP_FILE_FOLDER",
564 'CARMEL3D': "CARMEL3D_FILE_FOLDER",
565 'OPENTURNS_STUDY':"OPENTURNS_FILE_FOLDER",
566 'OPENTURNS_WRAPPER': "OPENTURNS_FILE_FOLDER"}
569 moduleEntry = self.editor.findOrCreateComponent(self.module, self.componentName)
570 itemName = re.split("/",jdcPath)[-1]
572 if folderName.has_key(self.code) :
573 monFolderName=folderName[ self.code ]
575 monFolderName=str(self.code)+"Files"
577 if folderType.has_key(self.code) :
578 monFolderType=fileType[ self.code ]
580 monFolderType=str(self.code)+"_FILE_FOLDER"
582 if fileType.has_key(self.code) :
583 monFileType=fileType[ self.code ]
585 monFileType="FICHIER_EFICAS_"+str(self.code)
587 fatherEntry = self.editor.findOrCreateItem(
589 name = monFolderName,
590 #icon = "ICON_COMM_FOLDER",
591 fileType = monFolderType)
593 commEntry = self.editor.findOrCreateItem( fatherEntry ,
595 fileType = monFileType,
597 #icon = "ICON_COMM_FILE",
598 comment = str( jdcPath ))
600 salome.sg.updateObjBrowser(1)
602 #print 'addJdcInSalome commEntry->', commEntry
604 ok, msgError = True, ''
605 except Exception, exc:
606 msgError = "Can't add Eficas file to Salome study tree"
607 logger.debug(msgError, exc_info = True)
608 QMessageBox.warning(self, self.tr("Warning"),
609 self.tr("%s. Raison:\n%s\n\n Voir la log pour plus de détails " % (msgError, exc)))
613 #---------------------------------------
614 def displayShape( self, shapeName ):
615 #---------------------------------------
617 visualisation de nom shapeName dans salome
619 ok, msgError = False, ''
623 sgPyQt = SalomePyQt.SalomePyQt()
624 myActiveView=sgPyQt.getActiveView()
625 if myActiveView < 0 :
626 return ok, 'pas de vue courante'
628 currentViewType=sgPyQt.getViewType(myActiveView)
629 if str(currentViewType) != "OCCViewer" : # maillage
630 ok, msgError = self.displayMeshGroups(shapeName)
632 current_color = COLORS[ self.icolor % LEN_COLORS ]
633 from salome.geom.geomtools import GeomStudyTools
634 myGeomTools=GeomStudyTools(self.editor)
635 ok = myGeomTools.displayShapeByName( shapeName, current_color )
637 self.icolor = self.icolor + 1
639 msgError =self.tr("Impossible d afficher ")+shapeName
645 #---------------------------------------
646 def ChercheGrpMeshInSalome(self):
647 #---------------------------------------
648 #print "je passe par la"
652 entries = salome.sg.getAllSelected()
653 nbEntries = len( entries )
654 names, msg = None, self.tr("Selection SALOME non autorisee.")
656 for entry in entries:
657 names,msg=self.giveMeshGroups(entry,"SubMeshes",SMESH.SMESH_subMesh)
662 #---------------------------------------
663 def ChercheGrpMailleInSalome(self):
664 #---------------------------------------
669 entries = salome.sg.getAllSelected()
670 nbEntries = len( entries )
671 names, msg = None, self.tr("Selection SALOME non autorisee.")
673 for entry in entries:
675 names,msg=self.giveMeshGroups(entry,"Groups of",SMESH.SMESH_GroupBase)
686 #-------------------------------------------------------------------------------------------------------
687 # Pilotage de la Visu des elements de structures
691 def envoievisu(self,liste_commandes):
693 from salome.geom.structelem import StructuralElementManager, InvalidParameterError
695 QMessageBox.critical(self, self.tr("Error"),
696 self.tr("Impossible d'afficher les elements de structure: "
697 "module GEOM n est pas installe."))
700 atLeastOneStudy = self.editor.study
701 if not atLeastOneStudy:
703 logger.debug(10*'#'+":envoievisu: creating a StructuralElementManager instance")
704 structElemManager = StructuralElementManager()
705 elem = structElemManager.createElement(liste_commandes)
707 salome.sg.updateObjBrowser(True)
708 except InvalidParameterError, err:
709 trStr = self.tr("Invalid parameter for group %(group)s: %(expr)s must be "
710 "greater than %(minval)g (actual value is %(value)g)")
711 msg = str(trStr) % {"group": err.groupName, "expr": err.expression,
712 "minval": err.minValue, "value": err.value}
713 QMessageBox.warning(self, self.tr("Error"), msg)
715 traceback.print_exc()
716 logger.debug(10*'#'+":pb dans envoievisu")
721 This class replaces the class Accas.SalomeEntry (defined in EFICAS tool)
722 when Eficas is launched in Salome context. It handles the objects that can
723 be selected from Salome object browser.
724 By default, the selected value is the entry of the selected item in the
725 object browser. This class can be subclassed to provide more advanced
729 help_message = u"Une entrée de l'arbre d'étude de Salome est attendue"
731 def __init__(self, entryStr):
732 self._entry = entryStr
735 def __convert__(entryStr):
736 return SalomeEntry(entryStr)
739 def get_selected_value(selected_entry, study_editor):
740 return selected_entry
743 #-------------------------------------------------------------------------------------------------------
744 # Point d'entree lancement EFICAS
746 def runEficas( code=None, fichier=None, module = "EFICAS", version=None, componentName = "Eficas",multi=False):
747 logger.debug(10*'#'+":runEficas: START")
749 logger.debug(10*'#'+":runEficas: code="+str(code))
750 logger.debug(10*'#'+":runEficas: fichier="+str(fichier))
751 logger.debug(10*'#'+":runEficas: module="+str(module))
752 logger.debug(10*'#'+":runEficas: version="+str(version))
754 #if not appli: #une seul instance possible!
755 appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier,
756 module = module, version = version, componentName = componentName,multi=multi )
757 #if not appli: #une seul instance possible!
758 # appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier,
759 # module = module, componentName = componentName, version=version )
760 logger.debug(10*'#'+":runEficas: END")