# -*- 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
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()
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:
return myObj
def ObjectToSObject(obj):
+ global myStudy
mySO = None
if obj is not None:
ior = orb.object_to_string(obj)
return ""
def IDToSObject(id):
+ global myStudy
mySO = myStudy.FindObjectID(id);
return mySO
#--------------------------------------------------------------------------
-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()
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
def GetTree(theSO):
# returns the document list tree (as list)
+ global myStudy
aResult = [theSO.GetID()]
anIter = myStudy.NewChildIterator(theSO)
while anIter.More():
#--------------------------------------------------------------------------
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, "<CanCopy> for "+theInfo+" returns false"
+ if not myStudy.CanCopy(theSO):
+ raise RuntimeError("<CanCopy> for "+theInfo+" returns false")
- if not myStudyManager.Copy(theSO):
- raise RuntimeError, "<Copy> for "+theInfo+" returns false"
+ if not myStudy.Copy(theSO):
+ raise RuntimeError("<Copy> for "+theInfo+" returns false")
- if not myStudyManager.CanPaste(theSO):
- raise RuntimeError, "<CanPaste> for "+theInfo+" returns false"
+ if not myStudy.CanPaste(theSO):
+ raise RuntimeError("<CanPaste> 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, "<Paste> for "+theInfo+" returns None object"
+ if myStudy.Paste(aSObj) == None:
+ raise RuntimeError("<Paste> for "+theInfo+" returns None object")
aNewTree = GetTree(aRoot)
aLen = len(aTree)
for a in range(0,aLen):
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?
#--------------------------------------------------------------------------
-salome_study_ID = -1
-
-def getActiveStudy(theStudyId=0):
- 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 theStudyId:
- aStudy=myStudyManager.GetStudyByID(theStudyId)
- if aStudy:
- if verbose(): print "connection to existing study ", theStudyId
- salome_study_ID = theStudyId
- 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 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
+ <URL> (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()
- 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(theStudyId=0):
+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
+ <URL> (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(theStudyId)
- 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 salome_study_initial, salome_study_ID
- salome_study_initial=1
- salome_study_ID=-1
- pass
+ global myStudy, myStudyName
+ myStudy, myStudyName = None, None