Introduce PipelineBuilder microservice
This Merge Request continues building on the idea of "microservices" and introduces two such services.
vtkPTSPipelineBuilder
vtkPTSPipelineBuilder
A class to create pipeline elements such as sources, filters, readers and representations.
vtkPTSPipelineBuilder
uses internally vtkParaViewPipelineController
/vtkParaViewPipelineControllerWithRendering
and takes care of pre/post initialization of a proxy as well as registration with the proxymanager. Its API consists mainly of single-value observables returning the created proxy or an error where applicable.
parat.pipelineBuilder
is a new Python class that acts as a thin-wrapper for vtkPTSPipelineBuilder
. Its provides as more pythonic API, converts observable-based API to async
functions and allows to extra keyword-based arguments to be used as property values:
from parat.pipelineBuilder import *
App = PythonApplication()
session = await App.initialize()
builder = PipelineBuilder(session)
sphere = await builder.CreateSource("sources", "SphereSource", ThetaResolution=80, Radius=2)
Properties are set using a new microservice vtkPTSPropertyManager
.
vtkPTSPropertyManager
vtkPTSPropertyManager
provides a minimal API for setting any property of a proxy:
std::vector<vtkVariant> GetPropertyValue(vtkSMProxy* proxy, const std::string& name);
void SetPropertyValue(vtkSMProxy* proxy, const std::string& name, const std::vector<vtkVariant>& value);
void SetPropertyValue(vtkSMProxy* proxy, const std::string& name, const vtkVariant& value); // convenience method
It is mainly used as a base for parat.propertyManager
that allows to set proxy properties using native Python objects or even change-sets in the form of a dictionary:
...
sphere = await builder.CreateSource("sources", "SphereSource", ThetaResolution=80, Radius=2)
pmanager = PropertyManager()
pmanager.SetPropertyValue(sphere, "Radius", 5)
pmanager.SetPropertyValue(sphere, "Center", [1, 2, 3])
pmanager.SetPropertyValue(sphere, "Center", (3, 4, 5))
pmanager.SetProperties(sphere, {"StartPhi":10, "EndPhi": 90, "PhiResolution": 80 })
assert pmanager.GetPropertyValue(sphere, "Center") == [3,4,5]
assert pmanager.GetPropertyValue(sphere, "StartPhi") == 10
parat.propertyManager
includes also API for calling methods of proxies that return observables :
...
view = await builder.CreateView("views", "RenderView")
await pmanager.Update(view) # C++ API: rxcpp::observable<bool> vtkSMViewProxy::Update()
as well as the ability to switch the visibility of a representation.
representation = await builder.CreateRepresentation(shrink, 0, view, "GeometryRepresentation")
pmanager.SetVisibility(representation, view, False)
this is merely to keep all "set"/"get" methods of a proxy to a single microservice.
I am not sure that the last two cases belong to propertyManager
but I don't know where else they could live. So, we leave them here for now and they may be moved to a separate microservice later.