Source code for paraview.simple.catalyst
import paraview
from paraview import servermanager
from paraview.util import proxy as proxy_util
from paraview.simple.session import GetActiveSource
from paraview.simple import GetAnimationScene
# ==============================================================================
# Extracts and Extractors
# ==============================================================================
[docs]
def CreateExtractor(name, proxy=None, registrationName=None):
"""Creates a new extractor and returns it.
:param name: The type of the extractor to create.
:type name: `str`
:param proxy: The proxy to generate the extract from. If not specified
the active source is used.
:type proxy: :class:`paraview.servermanager.Proxy`, optional
:param registrationName: The registration name to use to register
the extractor with the ProxyManager. If not specified a unique name
will be generated.
:type name: `str`, optional
:return: The extractor created, on success, else None
:rtype: :class:`paraview.servermanager.Proxy` or `None`
"""
if proxy is None:
proxy = GetActiveSource()
if not proxy:
raise RuntimeError("Could determine input for extractor")
if proxy.Port > 0:
rawProxy = proxy.SMProxy.GetOutputPort(proxy.Port)
else:
rawProxy = proxy.SMProxy
controller = servermanager.vtkSMExtractsController()
# Special case of 'steering' extractors : add it to the steerable extractors list
# managed by the in situ helper class, not to the extracts controller, because
# they are not associated with a writer.
from paraview.catalyst.detail import IsInsitu, RegisterExtractor
if name == "steering" and IsInsitu():
rawExtractor = controller.CreateSteeringExtractor(rawProxy, registrationName)
extractor = servermanager._getPyProxy(rawExtractor)
UpdateSteerableParameters(extractor, registrationName)
else:
rawExtractor = controller.CreateExtractor(rawProxy, name, registrationName)
extractor = servermanager._getPyProxy(rawExtractor)
if IsInsitu():
# tag the extractor to know which pipeline this came from.
RegisterExtractor(extractor)
return extractor
[docs]
def GetExtractors(proxy=None):
"""Returns a list of extractors associated with the proxy.
:param proxy: The proxy to return the extractors associated with.
If not specified (or is None) then all extractors are returned.
:type proxy: :class:`paraview.servermanager.Proxy`, optional
:return: List of associated extractors if any. May return an empty list.
:rtype: list of :class:`paraview.servermanager.Proxy`
"""
controller = servermanager.vtkSMExtractsController()
pxm = servermanager.ProxyManager()
extractors = pxm.GetProxiesInGroup("extractors").values()
if proxy is None:
return list(extractors)
else:
return [
g for g in extractors if controller.IsExtractor(g.SMProxy, proxy.SMProxy)
]
[docs]
def FindExtractor(registrationName):
"""
Returns an extractor with a specific registrationName.
:param registrationName: Registration name for the extractor.
:type registrationName: `str`
:return: The extractor or None
:rtype: :class:`paraview.servermanager.Proxy` or `None`
"""
pxm = servermanager.ProxyManager()
return pxm.GetProxy("extractors", registrationName)
[docs]
def SaveExtractsUsingCatalystOptions(options):
"""Generate extracts using a :class:`CatalystOptions` object. This is intended for
use when a Catalyst analysis script is being run in batch mode.
:param options: Catalyst options proxy
:type options: :class:`CatalystOptions`
"""
# handle the case where options is CatalystOptions
return SaveExtracts(
ExtractsOutputDirectory=options.ExtractsOutputDirectory,
GenerateCinemaSpecification=options.GenerateCinemaSpecification,
)
[docs]
def SaveExtracts(**kwargs):
"""Generate extracts. Parameters are forwarded for 'SaveAnimationExtracts'
Currently, supported keyword parameters are:
:param ExtractsOutputDirectory: root directory for extracts. If the directory
does not exist, it will be created.
:type ExtractsOutputDirectory: `str`
:param GenerateCinemaSpecification: If set to `True`, enables generation of a
cinema specification.
:type GenerateCinemaSpecification: bool
:param FrameRate: The frame rate in frames-per-second if the extractor
supports it.
:type FrameRate: int
:param FrameStride: The number of timesteps to skip after a timestep is saved.
:type FrameStride: int
:param FrameWindow: The range of timesteps to extract.
:type FrameWindow: 2-element tuple or list of ints
"""
# currently, Python state files don't have anything about animation,
# however, we rely on animation to generate the extracts, so we ensure
# that the animation is updated based on timesteps in data by explicitly
# calling UpdateAnimationUsingDataTimeSteps.
scene = GetAnimationScene()
if not scene:
from paraview import print_warning
print_warning("This Edition does not support animations. Cannot save extracts.")
return False
scene.UpdateAnimationUsingDataTimeSteps()
controller = servermanager.ParaViewPipelineController()
proxy = servermanager.misc.SaveAnimationExtracts()
controller.PreInitializeProxy(proxy)
proxy.AnimationScene = scene
controller.PostInitializeProxy(proxy)
proxy_util.set(proxy, **kwargs)
return proxy.SaveExtracts()
[docs]
def CreateSteerableParameters(
steerable_proxy_type_name,
steerable_proxy_registration_name="SteeringParameters",
result_mesh_name="steerable",
):
"""Creates a steerable proxy for Catalyst use cases.
:param steerable_proxy_type_name: Name of the proxy type to create.
:type steerable_proxy_type_name: str
:param steerable_proxy_registration_name: Registration name of the proxy
created by this function. If not provided, defaults to "SteeringParameters".
:type steerable_proxy_registration_name: str
:param result_mesh_name: The name of the resulting mesh. If not provided,
defaults to "steerable".
:type result_mesh_name: str
:return: Proxy of the specified type.
:rtype: Steerable proxy."""
pxm = servermanager.ProxyManager()
steerable_proxy = pxm.NewProxy("sources", steerable_proxy_type_name)
pxm.RegisterProxy("sources", steerable_proxy_registration_name, steerable_proxy)
steerable_proxy_wrapper = servermanager._getPyProxy(steerable_proxy)
UpdateSteerableParameters(steerable_proxy_wrapper, result_mesh_name)
return steerable_proxy_wrapper
[docs]
def UpdateSteerableParameters(steerable_proxy, steerable_source_name):
"""Updates a steerable proxy of a provided source name.
:param steerable_proxy: The steerable proxy to update.
:type steerable_proxy: Source proxy.
:param steerable_source_name: The name of the steerable source proxy.
:type steerable_source_name: str"""
helper = paraview.modules.vtkPVInSitu.vtkInSituInitializationHelper
helper.UpdateSteerableParameters(steerable_proxy.SMProxy, steerable_source_name)