-# 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013 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.
#
+# 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
#--------------------------------------------------------------------------
-def DumpComponent(Study, SO, offset):
- it = Study.NewChildIterator(SO)
- Builder = Study.NewBuilder()
- while it.More():
- CSO = it.Value()
- it.Next()
- anAttr = Builder.FindOrCreateAttribute(CSO, "AttributeName")
- AtName = anAttr._narrow(SALOMEDS.AttributeName)
- t_name = AtName.Value()
- if t_name[0] == 1:
- ofs = 1
- a = ""
- while ofs <= offset:
- a = a + "--"
- ofs = ofs +1
- MESSAGE( a + ">" + str(CSO.GetID()) + " " + str(t_name[1]) )
- t_RefSO = CSO.ReferencedObject()
- if t_RefSO[0] == 1:
- RefSO = t_RefSO[1]
- ofs = 1
- a = ""
- while ofs <= offset:
- a = a + " "
- ofs = ofs +1
- MESSAGE( a + ">" + str(RefSO.GetID()) )
- DumpComponent(Study, CSO, offset+2)
+def DumpComponent(Study, SO, Builder,offset):
+ it = Study.NewChildIterator(SO)
+ while it.More():
+ CSO = it.Value()
+ a=offset*"--" + ">" + CSO.GetID()
+ find,AtName = Builder.FindAttribute(CSO, "AttributeName")
+ if find:
+ a=a+":"+AtName.Value()
+ find,AtIOR = Builder.FindAttribute(CSO, "AttributeIOR")
+ if find:
+ a=a+":"+AtIOR.Value()
+ find,RefSO = CSO.ReferencedObject()
+ if find:
+ a=a+":"+RefSO.GetID()
+ print a
+ DumpComponent(Study, CSO, Builder,offset+2)
+ it.Next()
- #--------------------------------------------------------------------------
+#--------------------------------------------------------------------------
def DumpStudy(Study):
+ """
+ Dump a study, given the ior
+ """
itcomp = Study.NewComponentIterator()
+ Builder = Study.NewBuilder()
while itcomp.More():
- SC = itcomp.Value()
- itcomp.Next()
- name = SC.ComponentDataType()
- MESSAGE( "-> ComponentDataType is " + name )
- DumpComponent(Study, SC, 1)
-
+ SC = itcomp.Value()
+ name = SC.ComponentDataType()
+ print "-> ComponentDataType is " + name
+ DumpComponent(Study, 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):
myObj = None
#--------------------------------------------------------------------------
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 GetComponentVersion(theComponent, all_versions = False):
+ # returns the document list tree (as list)
+ 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
+
+ #--------------------------------------------------------------------------
+
def FindFileInDataDir(filename):
import os
datadir = os.getenv("DATA_DIR")
def getActiveStudy(theStudyId=0):
global salome_study_ID
-
- print "getActiveStudy"
+
+ if verbose(): print "getActiveStudy"
if salome_study_ID == -1:
if salome_iapp.hasDesktop():
- print "---in gui"
+ if verbose(): print "---in gui"
salome_study_ID = salome_iapp.sg.getActiveStudyId()
else:
- print "---outside gui"
+ if verbose(): print "---outside gui"
if theStudyId:
aStudy=myStudyManager.GetStudyByID(theStudyId)
if aStudy:
- print "connection to existing study ", theStudyId
+ if verbose(): print "connection to existing study ", theStudyId
salome_study_ID = theStudyId
if salome_study_ID == -1:
salome_study_ID = createNewStudy()
- print"--- Study Id ", salome_study_ID
+ if verbose(): print"--- Study Id ", salome_study_ID
return salome_study_ID
-
+
+ #--------------------------------------------------------------------------
+
+def setCurrentStudy(theStudy):
+ """
+ Change current study : an existing one given by a study object.
+
+ :param theStudy: the study CORBA object to set as current study
+ """
+ global myStudyId, myStudy, myStudyName
+ global salome_study_ID
+ myStudy=theStudy
+ myStudyId=theStudy._get_StudyId()
+ myStudyName=theStudy._get_Name()
+ return myStudyId, myStudy, myStudyName
+
+ #--------------------------------------------------------------------------
+
+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()
+
+ return myStudyId, myStudy, myStudyName
+
#--------------------------------------------------------------------------
def createNewStudy():
n (>0) : try connection to study with Id = n, or create a new one
if study not found.
"""
-
+
global salome_study_initial
global myStudyManager, myStudyId, 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
- print "looking for studyManager ..."
+ if verbose(): print "looking for studyManager ..."
obj = naming_service.Resolve('myStudyManager')
myStudyManager = obj._narrow(SALOMEDS.StudyManager)
- print "studyManager found"
+ if verbose(): print "studyManager found"
# get active study Id, ref and name
myStudyId = getActiveStudy(theStudyId)
- print "myStudyId",myStudyId
+ if verbose(): print "myStudyId",myStudyId
myStudy = myStudyManager.GetStudyByID(myStudyId)
myStudyName = myStudy._get_Name()