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 importMedFile( self,fileName, editor=None):
504 #----------------------------------------------------------------
506 theStudy = self.editor.study
507 if not theStudy: return (0, 'Pas d etude')
508 from salome.smesh import smeshBuilder
509 smesh = smeshBuilder.New(theStudy)
510 aMesh,aResult = smesh.CreateMeshesFromMED(fileName)
511 salome.sg.updateObjBrowser(1)
514 return (O,"Pb a l import")
516 #----------------------------------------------------------------
517 def selectEntryFromSalome( self, kwType = None, editor=None):
518 #----------------------------------------------------------------
520 Selection d'element a partir de l'arbre salome
521 Ne verifie que l unicite de la selection
522 retourne ( la liste avec le nom du groupe, message d'erreur )
524 retourne une liste pour etre coherent avec selectGroupFromSalome
525 Note: Appele par EFICAS lorsqu'on clique sur le bouton ajouter la liste du panel SalomeEntry
528 if self.editor.study._non_existent():
529 raise Exception(self.tr(u"L'étude Salome n'existe plus"))
530 entries = salome.sg.getAllSelected()
531 nbEntries = len( entries )
533 raise Exception(self.tr(u"Veuillez sélectionner une entrée de l'arbre d'étude de Salome"))
535 raise Exception(self.tr(u"Une seule entrée doit être sélectionnée dans l'arbre d'étude de Salome"))
537 value = kwType.get_selected_value(entries[0], self.editor)
538 msg = self.tr(u"L'entrée de l'arbre d'étude de Salome a été sélectionnée")
541 QMessageBox.information(self, self.tr(u"Sélection depuis Salome"), unicode(e))
542 return [], unicode(e)
545 #---------------------------------------------
546 def addJdcInSalome( self, jdcPath ):
547 #---------------------------------------------
549 Ajoute le Jeu De Commande dans l'arbre d'etude Salome dans la rubrique EFICAS
552 msgError = "Erreur dans l'export du fichier de commande dans l'arbre d'etude Salome"
555 atLeastOneStudy = self.editor.study
556 if not atLeastOneStudy:
559 fileType = { 'ASTER' : "FICHIER_EFICAS_ASTER",
560 'SEP' : "FICHIER_EFICAS_SEP",
561 'MAP' : "FICHIER_EFICAS_MAP",
562 'OPENTURNS': "FICHIER_EFICAS_OPENTURNS",
563 'OPENTURNS_STUDY': "FICHIER_EFICAS_OPENTURNS_STUDY",
564 'OPENTURNS_WRAPPER': "FICHIER_EFICAS_OPENTURNS_WRAPPER",
565 'CARMEL3D': "FICHIER_EFICAS_CARMEL3D",
568 folderName = { 'ASTER' : 'AsterFiles',
570 'CARMEL3D' : 'CARMEL3DFiles' ,
572 'OPENTURNS_STUDY': 'OpenturnsFiles',
573 'OPENTURNS_WRAPPER': 'OpenturnsFiles'}
575 folderType = { 'ASTER': "ASTER_FILE_FOLDER",
576 'SEP': "SEP_FILE_FOLDER",
577 'MAP': "MAP_FILE_FOLDER",
578 'CARMEL3D': "CARMEL3D_FILE_FOLDER",
579 'OPENTURNS_STUDY':"OPENTURNS_FILE_FOLDER",
580 'OPENTURNS_WRAPPER': "OPENTURNS_FILE_FOLDER"}
583 moduleEntry = self.editor.findOrCreateComponent(self.module, self.componentName)
584 itemName = re.split("/",jdcPath)[-1]
586 if folderName.has_key(self.code) :
587 monFolderName=folderName[ self.code ]
589 monFolderName=str(self.code)+"Files"
591 if folderType.has_key(self.code) :
592 monFolderType=fileType[ self.code ]
594 monFolderType=str(self.code)+"_FILE_FOLDER"
596 if fileType.has_key(self.code) :
597 monFileType=fileType[ self.code ]
599 monFileType="FICHIER_EFICAS_"+str(self.code)
601 fatherEntry = self.editor.findOrCreateItem(
603 name = monFolderName,
604 #icon = "ICON_COMM_FOLDER",
605 fileType = monFolderType)
607 commEntry = self.editor.findOrCreateItem( fatherEntry ,
609 fileType = monFileType,
611 #icon = "ICON_COMM_FILE",
612 comment = str( jdcPath ))
614 salome.sg.updateObjBrowser(1)
616 #print 'addJdcInSalome commEntry->', commEntry
618 ok, msgError = True, ''
619 except Exception, exc:
620 msgError = "Can't add Eficas file to Salome study tree"
621 logger.debug(msgError, exc_info = True)
622 QMessageBox.warning(self, self.tr("Warning"),
623 self.tr("%s. Raison:\n%s\n\n Voir la log pour plus de détails " % (msgError, exc)))
627 #---------------------------------------
628 def displayShape( self, shapeName ):
629 #---------------------------------------
631 visualisation de nom shapeName dans salome
633 ok, msgError = False, ''
637 sgPyQt = SalomePyQt.SalomePyQt()
638 myActiveView=sgPyQt.getActiveView()
639 if myActiveView < 0 :
640 return ok, 'pas de vue courante'
642 currentViewType=sgPyQt.getViewType(myActiveView)
643 if str(currentViewType) != "OCCViewer" : # maillage
644 ok, msgError = self.displayMeshGroups(shapeName)
646 current_color = COLORS[ self.icolor % LEN_COLORS ]
647 from salome.geom.geomtools import GeomStudyTools
648 myGeomTools=GeomStudyTools(self.editor)
649 ok = myGeomTools.displayShapeByName( shapeName, current_color )
651 self.icolor = self.icolor + 1
653 msgError =self.tr("Impossible d afficher ")+shapeName
659 #---------------------------------------
660 def ChercheGrpMeshInSalome(self):
661 #---------------------------------------
662 print "je passe par la"
667 entries = salome.sg.getAllSelected()
668 nbEntries = len( entries )
669 names, msg = None, self.tr("Selection SALOME non autorisee.")
671 for entry in entries:
672 names,msg=self.giveMeshGroups(entry,"SubMeshes",SMESH.SMESH_subMesh)
678 #---------------------------------------
679 def ChercheGrpMailleInSalome(self):
680 #---------------------------------------
685 entries = salome.sg.getAllSelected()
686 nbEntries = len( entries )
687 names, msg = None, self.tr("Selection SALOME non autorisee.")
689 for entry in entries:
691 names,msg=self.giveMeshGroups(entry,"Groups of",SMESH.SMESH_GroupBase)
702 #-------------------------------------------------------------------------------------------------------
703 # Pilotage de la Visu des elements de structures
707 def envoievisu(self,liste_commandes):
709 from salome.geom.structelem import StructuralElementManager, InvalidParameterError
711 QMessageBox.critical(self, self.tr("Error"),
712 self.tr("Impossible d'afficher les elements de structure: "
713 "module GEOM n est pas installe."))
716 atLeastOneStudy = self.editor.study
717 if not atLeastOneStudy:
719 logger.debug(10*'#'+":envoievisu: creating a StructuralElementManager instance")
720 structElemManager = StructuralElementManager()
721 elem = structElemManager.createElement(liste_commandes)
723 salome.sg.updateObjBrowser(True)
724 except InvalidParameterError, err:
725 trStr = self.tr("Invalid parameter for group %(group)s: %(expr)s must be "
726 "greater than %(minval)g (actual value is %(value)g)")
727 msg = str(trStr) % {"group": err.groupName, "expr": err.expression,
728 "minval": err.minValue, "value": err.value}
729 QMessageBox.warning(self, self.tr("Error"), msg)
731 traceback.print_exc()
732 logger.debug(10*'#'+":pb dans envoievisu")
737 This class replaces the class Accas.SalomeEntry (defined in EFICAS tool)
738 when Eficas is launched in Salome context. It handles the objects that can
739 be selected from Salome object browser.
740 By default, the selected value is the entry of the selected item in the
741 object browser. This class can be subclassed to provide more advanced
745 help_message = u"Une entrée de l'arbre d'étude de Salome est attendue"
747 def __init__(self, entryStr):
748 self._entry = entryStr
751 def __convert__(entryStr):
752 return SalomeEntry(entryStr)
755 def get_selected_value(selected_entry, study_editor):
756 return selected_entry
759 #-------------------------------------------------------------------------------------------------------
760 # Point d'entree lancement EFICAS
762 def runEficas( code=None, fichier=None, module = "EFICAS", version=None, componentName = "Eficas",multi=False):
763 logger.debug(10*'#'+":runEficas: START")
765 logger.debug(10*'#'+":runEficas: code="+str(code))
766 logger.debug(10*'#'+":runEficas: fichier="+str(fichier))
767 logger.debug(10*'#'+":runEficas: module="+str(module))
768 logger.debug(10*'#'+":runEficas: version="+str(version))
770 #if not appli: #une seul instance possible!
771 appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier,
772 module = module, version = version, componentName = componentName,multi=multi )
773 #if not appli: #une seul instance possible!
774 # appli = MyEficas( SalomePyQt.SalomePyQt().getDesktop(), code = code, fichier = fichier,
775 # module = module, componentName = componentName, version=version )
776 logger.debug(10*'#'+":runEficas: END")