X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FKERNEL_PY%2Fsalome_study.py;h=c8fab2542b9bcece546963276dd4be76e91c5c91;hb=513b8629ac55467ab7f604cd1733b542f7e9a40a;hp=d408d051471f51c345b5e4b92068ae8c96a7f38b;hpb=48d150b078ab63d77fbed4de1f8dbd7d3a8767da;p=modules%2Fkernel.git diff --git a/src/KERNEL_PY/salome_study.py b/src/KERNEL_PY/salome_study.py index d408d0514..c8fab2542 100644 --- a/src/KERNEL_PY/salome_study.py +++ b/src/KERNEL_PY/salome_study.py @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE # # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -31,10 +31,14 @@ import SALOMEDS import salome_iapp from launchConfigureParser import verbose +myStudy = None +myStudyName = None + #-------------------------------------------------------------------------- -def DumpComponent(Study, SO, Builder,offset): - it = Study.NewChildIterator(SO) +def DumpComponent(SO, Builder,offset): + global myStudy + it = myStudy.NewChildIterator(SO) while it.More(): CSO = it.Value() a=offset*"--" + ">" + CSO.GetID() @@ -47,38 +51,30 @@ def DumpComponent(Study, SO, Builder,offset): find,RefSO = CSO.ReferencedObject() if find: a=a+":"+RefSO.GetID() - print a - DumpComponent(Study, CSO, Builder,offset+2) + print(a) + DumpComponent(CSO, Builder,offset+2) it.Next() #-------------------------------------------------------------------------- -def DumpStudy(Study): +def DumpStudy(): """ Dump a study, given the ior """ - itcomp = Study.NewComponentIterator() - Builder = Study.NewBuilder() + global myStudy + itcomp = myStudy.NewComponentIterator() + Builder = myStudy.NewBuilder() while itcomp.More(): SC = itcomp.Value() name = SC.ComponentDataType() - print "-> ComponentDataType is " + name - DumpComponent(Study, SC,Builder, 1) + print("-> ComponentDataType is " + name) + DumpComponent(SC,Builder, 1) itcomp.Next() -def DumpStudies(): - """ - Dump all studies in a StudyManager - """ - for name in myStudyManager.GetOpenStudies(): - s=myStudyManager.GetStudyByName(name) - print "study:",name, s._get_StudyId() - DumpStudy(s) - - #-------------------------------------------------------------------------- def IDToObject(id): + global myStudy myObj = None mySO = myStudy.FindObjectID(id); if mySO is not None: @@ -90,6 +86,7 @@ def IDToObject(id): return myObj def ObjectToSObject(obj): + global myStudy mySO = None if obj is not None: ior = orb.object_to_string(obj) @@ -104,6 +101,7 @@ def ObjectToID(obj): return "" def IDToSObject(id): + global myStudy mySO = myStudy.FindObjectID(id); return mySO @@ -119,7 +117,8 @@ def generateName(prefix = None): #-------------------------------------------------------------------------- -def PersistentPresentation(theStudy, theSO, theWithID): +def PersistentPresentation(theSO, theWithID): + global myStudy # put the sobject's content (with subchildren) to the string aResult = "" attrs = theSO.GetAllAttributes() @@ -168,9 +167,9 @@ def PersistentPresentation(theStudy, theSO, theWithID): aResult = "sobject: " + theSO.GetID() + " nbattrs: " + str(aLen - anUncopied) + aResult + '\n' else: aResult = " nbattrs: " + str(aLen - anUncopied) + aResult + '\n' - anIter = theStudy.NewChildIterator(theSO) + anIter = myStudy.NewChildIterator(theSO) while anIter.More(): - aResult += PersistentPresentation(theStudy, anIter.Value(), theWithID) + aResult += PersistentPresentation(anIter.Value(), theWithID) anIter.Next() return aResult @@ -178,6 +177,7 @@ def PersistentPresentation(theStudy, theSO, theWithID): def GetTree(theSO): # returns the document list tree (as list) + global myStudy aResult = [theSO.GetID()] anIter = myStudy.NewChildIterator(theSO) while anIter.More(): @@ -188,32 +188,34 @@ def GetTree(theSO): #-------------------------------------------------------------------------- def CheckCopyPaste(theSO, theInfo ,theComponentPaste): + global myStudy + aRoot = theSO while aRoot.GetID() != "0:": aRoot = aRoot.GetFather() aTree = GetTree(aRoot) - aStudyPersist = PersistentPresentation(myStudy, aRoot, 1) + aStudyPersist = PersistentPresentation(aRoot, 1) - if not myStudyManager.CanCopy(theSO): - raise RuntimeError, " for "+theInfo+" returns false" + if not myStudy.CanCopy(theSO): + raise RuntimeError(" for "+theInfo+" returns false") - if not myStudyManager.Copy(theSO): - raise RuntimeError, " for "+theInfo+" returns false" + if not myStudy.Copy(theSO): + raise RuntimeError(" for "+theInfo+" returns false") - if not myStudyManager.CanPaste(theSO): - raise RuntimeError, " for "+theInfo+" returns false" + if not myStudy.CanPaste(theSO): + raise RuntimeError(" for "+theInfo+" returns false") # check: before paste study is not changed check - if aStudyPersist != PersistentPresentation(myStudy, aRoot, 1): - raise RuntimeError, "Study is changed before Paste calling for "+theInfo + if aStudyPersist != PersistentPresentation(aRoot, 1): + raise RuntimeError("Study is changed before Paste calling for "+theInfo) aSObj = theSO if theComponentPaste: aSObj = theSO.GetFatherComponent() theInfo = theInfo + "(paste for component)" - if myStudyManager.Paste(aSObj) == None: - raise RuntimeError, " for "+theInfo+" returns None object" + if myStudy.Paste(aSObj) == None: + raise RuntimeError(" for "+theInfo+" returns None object") aNewTree = GetTree(aRoot) aLen = len(aTree) for a in range(0,aLen): @@ -223,12 +225,13 @@ def CheckCopyPaste(theSO, theInfo ,theComponentPaste): if aLen < len(aNewTree): return myStudy.FindObjectID(aNewTree[aLen]) - raise RuntimeError, "After Copy calling the tree is not changed" + raise RuntimeError("After Copy calling the tree is not changed") #-------------------------------------------------------------------------- def GetComponentVersion(theComponent, all_versions = False): # returns the document list tree (as list) + global myStudy props = myStudy.GetProperties() stored_components = props.GetStoredComponents() version = "no component data" # vsr: better raise an exception in this case? @@ -267,128 +270,86 @@ def FindFileInDataDir(filename): #-------------------------------------------------------------------------- -salome_study_ID = -1 - -def getActiveStudy(): - global salome_study_ID - - if verbose(): print "getActiveStudy" - if salome_study_ID == -1: - if salome_iapp.hasDesktop(): - if verbose(): print "---in gui" - salome_study_ID = salome_iapp.sg.getActiveStudyId() - else: - if verbose(): print "---outside gui" - if salome_study_ID == -1: - listOpenStudies = myStudyManager.GetOpenStudies() - if len(listOpenStudies) == 0: - salome_study_ID = createNewStudy() - else: - s = myStudyManager.GetStudyByName(listOpenStudies[0]) - salome_study_ID = s._get_StudyId() - else: - pass - #if theStudyId: - #aStudy=myStudyManager.GetStudyByID(theStudyId) - #if aStudy: - #if verbose(): print "connection to existing study ", theStudyId - #salome_study_ID = theStudyId - if verbose(): print"--- Study Id ", salome_study_ID - return salome_study_ID +def openStudy(theStudyPath): + if verbose(): print("openStudy (begin)") + global myStudy, myStudyName + myStudy.Open(theStudyPath) + myStudyName = myStudy._get_Name() + if verbose(): print("openStudy (end):", theStudyPath, myStudy._get_Name()) #-------------------------------------------------------------------------- -def setCurrentStudy(theStudy): +def salome_study_init_without_session(theStudyPath=None): """ - Change current study : an existing one given by a study object. - - :param theStudy: the study CORBA object to set as current study + Performs only once study creation or connection. + optional argument : theStudyPath + None : attach to the currently active single study; + create new empty study if there is active study + (str) : open study with the given file name """ - global myStudyId, myStudy, myStudyName - global salome_study_ID - myStudy=theStudy - myStudyId=theStudy._get_StudyId() - myStudyName=theStudy._get_Name() - return myStudyId, myStudy, myStudyName + global myStudy, myStudyName + global orb, lcc, naming_service, cm - #-------------------------------------------------------------------------- + if verbose(): print("theStudyPath:", theStudyPath) + if not myStudy: + import CORBA + orb = CORBA.ORB_init(['']) -def setCurrentStudyId(theStudyId=0): - """ - Change current study : an existing or new one. - optional argument : theStudyId - 0 : create a new study (default). - n (>0) : try connection to study with Id = n, or create a new one - if study not found. - """ - global myStudyId, myStudy, myStudyName - global salome_study_ID - salome_study_ID = -1 - myStudyId = getActiveStudy(theStudyId) - if verbose(): print "myStudyId",myStudyId - myStudy = myStudyManager.GetStudyByID(myStudyId) - myStudyName = myStudy._get_Name() + # get Study reference + if verbose(): print("looking for study...") + import KernelDS + myStudy = KernelDS.myStudy() + if verbose(): print("Study found") + pass - return myStudyId, myStudy, myStudyName + import types + if theStudyPath and isinstance(theStudyPath, (str, bytes)): + if isinstance(theStudyPath, bytes): + theStudyPath = str(theStudyPath, 'UTF8') + openStudy(theStudyPath) + else: + myStudy.Init() - #-------------------------------------------------------------------------- + myStudyName = myStudy._get_Name() -def createNewStudy(): - print "createNewStudy" - i=1 - aStudyName = "noName" - nameAlreadyInUse = 1 - listOfOpenStudies = myStudyManager.GetOpenStudies() - if len(listOfOpenStudies) != 0: - raise ValueError("There is already an opened study: %s" % listOfOpenStudies[0]) - print listOfOpenStudies - while nameAlreadyInUse: - aStudyName = "extStudy_%d"%i - if aStudyName not in listOfOpenStudies: - nameAlreadyInUse=0 - else: - i = i+1 - - theStudy = myStudyManager.NewStudy(aStudyName) - theStudyId = theStudy._get_StudyId() - print aStudyName, theStudyId - return theStudyId + return myStudy, myStudyName #-------------------------------------------------------------------------- -salome_study_initial = 1 - -def salome_study_init(): +def salome_study_init(theStudyPath=None): """ Performs only once study creation or connection. - optional argument : theStudyId - When in embedded interpreter inside IAPP, theStudyId is not used - When used without GUI (external interpreter) - 0 : create a new study (default). - n (>0) : try connection to study with Id = n, or create a new one - if study not found. + optional argument : theStudyPath + None : attach to the currently active single study; + create new empty study if there is active study + (str) : open study with the given file name """ - - global salome_study_initial - global myStudyManager, myStudyId, myStudy, myStudyName + global myStudy, myStudyName global orb, lcc, naming_service, cm - if salome_study_initial: - salome_study_initial = 0 + if verbose(): print("theStudyPath:", theStudyPath) + if not myStudy: + orb, lcc, naming_service, cm, _, _, _ = salome_kernel.salome_kernel_init() - orb, lcc, naming_service, cm = salome_kernel.salome_kernel_init() + # get Study reference + if verbose(): print("looking for study...") + obj = naming_service.Resolve('/Study') + myStudy = obj._narrow(SALOMEDS.Study) + if verbose(): print("Study found") + pass - # get Study Manager reference - if verbose(): print "looking for studyManager ..." - obj = naming_service.Resolve('myStudyManager') - myStudyManager = obj._narrow(SALOMEDS.StudyManager) - if verbose(): print "studyManager found" + import types + if theStudyPath and isinstance(theStudyPath, (str, bytes)): + if isinstance(theStudyPath, bytes): + theStudyPath = str(theStudyPath, 'UTF8') + openStudy(theStudyPath) + else: + myStudy.Init() - # get active study Id, ref and name - myStudyId = getActiveStudy() - if verbose(): print "myStudyId",myStudyId - myStudy = myStudyManager.GetStudyByID(myStudyId) - myStudyName = myStudy._get_Name() + myStudyName = myStudy._get_Name() - return myStudyManager, myStudyId, myStudy, myStudyName + return myStudy, myStudyName +def salome_study_close(): + global myStudy, myStudyName + myStudy, myStudyName = None, None