-# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+# -*- coding: iso-8859-1 -*-
+# 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
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+
# File : salome_study.py
# Author : Paul RASCLE, EDF
# Module : SALOME
# $Header$
-
+#
import salome_kernel
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()
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 generateName(prefix = None):
- import whrandom;
- int = whrandom.randint(1,1000);
+ import random;
+ int = random.randint(1,1000);
if prefix is None:
return "Study" + str(int)
else :
#--------------------------------------------------------------------------
-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?
+ if theComponent in stored_components:
+ if all_versions:
+ version = props.GetComponentVersions(theComponent)
+ for i in range(len(version)):
+ if not version[i]: version[i] = "unknown"
+ pass
+ pass
+ else:
+ version = props.GetComponentVersion(theComponent)
+ if not version: version = "unknown"
+ pass
+ pass
+ return version
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
-salome_study_ID = -1
+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 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:
- salome_study_ID = createNewStudy()
- if verbose(): print"--- Study Id ", salome_study_ID
- return salome_study_ID
-
#--------------------------------------------------------------------------
-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
+def salome_study_init_without_session(theStudyPath=None):
+ """
+ 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 myStudy, myStudyName
+ global orb, lcc, naming_service, cm
- #--------------------------------------------------------------------------
+ if verbose(): print("theStudyPath:", theStudyPath)
+ if not myStudy:
+ import CORBA
+ orb = CORBA.ORB_init([''])
+
+ # get Study reference
+ if verbose(): print("looking for study...")
+ import KernelDS
+ myStudy = KernelDS.myStudy()
+ if verbose(): print("Study found")
+ pass
+
+ 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()
-salome_study_initial = 1
+ return myStudy, myStudyName
-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
-
- orb, lcc, naming_service, cm = salome_kernel.salome_kernel_init()
-
- # 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"
- # get active study Id, ref and name
- myStudyId = getActiveStudy(theStudyId)
- if verbose(): print "myStudyId",myStudyId
- myStudy = myStudyManager.GetStudyByID(myStudyId)
- myStudyName = myStudy._get_Name()
+ if verbose(): print("theStudyPath:", theStudyPath)
+ if not myStudy:
+ 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
+
+ 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()
- return myStudyManager, myStudyId, myStudy, myStudyName
+ return myStudy, myStudyName
+def salome_study_close():
+ global myStudy, myStudyName
+ myStudy, myStudyName = None, None