[Paraview] Lookmarks with Python

Jacques Papper jacques.papper at gmail.com
Thu Nov 27 19:08:24 EST 2008


All,

I modified a script that Robert Maynard posted back in 2007 for saving and
loading states.
I haven't thoroughly tested it yet, but it seems to work fine for me.
Basically it saves only the properties of the RenderView but not the
Representations property.
This has for effect that you only save the camera / lightings etc settings
without having to worry about what sources your viewing or representations
are associated to your view.
I find it very useful to automate post-processing were you use a standard
set of cam positions.

Also for those who have problems with cPickle, just use pickle instead...

Thought I'd give this back to the community - let me know if you are using
it, I will probably build some more on top of this.


#!/usr/bin/env python

from paraview.servermanager import *
import cPickle as pickle
import re

class CamState:

    def __init__(self):
        #storage for a list of view objects
        self.view = list()

    def loadState(self,file):
        try:
            self.view = pickle.load(open(file))
        except IOError:
            print "file not found"

    def saveState(self,file):
        pickle.dump(self.view,open(file,'w'))

    def deleteView(self,name):
        for item in self.view:
            if(item.name == name):
                del item
                return True
        return False

    def deleteAllViews(self):
        del self.view
        self.view = list()

    def addView(self,name):
        newView = view(name, self.__getProperties())
        self.view.append(newView)

    def loadView(self,name):
        for v in self.view:
            if (v.name == name):
                self.__load(v.properties)

    def __getProperties(self):
        repreg = re.compile("Representations")
        properties = list()
        view = servermanager.GetRenderView()
        for property in view:
            propertyName =
property.Proxy.GetPropertyName(property.SMProperty)

            if repreg.search(propertyName):
                print "Not copying Representations"
            else:
                try:
                    value = property.GetData()
                    float(value)

except(IndexError,TypeError,ValueError,AttributeError,SyntaxError):
                    try:
                        float(value[0])

except(IndexError,TypeError,ValueError,AttributeError,SyntaxError):
                        pass
                    else:
                        properties.append((propertyName,value))
                else:
                    properties.append((propertyName,value))
        return properties

    def __load(self,properties):
        view = servermanager.GetRenderView()
        for i in properties:
            print i[0],i[1]
            view.SetPropertyWithName(i[0],i[1])
        view.UpdateVTKObjects()
        view.StillRender()

class view:
    def __init__(self,name,properties):
        self.name = name
        self.properties = properties

    def __getstate__(self):
        pickleDict = dict()
        pickleDict['name']=self.name
        pickleDict['properties']=self.properties
        return pickleDict

    def __setstate__(self,dict):
        self.name = dict['name']
        self.name = dict['properties']
        self.__dict__.update(dict)








2008/11/27 Jacques Papper <jacques.papper at gmail.com>

> Hi everyone,
>
> I'm trying to figure out a way of driving my post-processing through a
> python script.
> What I want to do is have a standard set of views that I can load through
> python (without having to reload the data every time) and output pictures
> for each of them.
>  - different camera positions
>  - different scalars plotted (and different scalar bars)
> Is using the lookmarks the best way ?
> If it is, how do I load lookmarks through python ?
>
> Jacques
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20081128/275096d4/attachment.htm>


More information about the ParaView mailing list