"""
Wrappers for VTK actors.
"""
# Author: Oualid Benkarim <oualid.benkarim@mcgill.ca>
# License: BSD 3 clause
from .base import BSVTKObjectWrapper, wrap_vtk
from .property import BSProperty, BSProperty2D, BSTextProperty
from .algorithm import (BSPolyDataMapper, BSDataSetMapper,
BSLabeledContourMapper)
class BSProp(BSVTKObjectWrapper):
"""Wrapper for vtkProp."""
def __init__(self, vtkobject, **kwargs):
super().__init__(vtkobject=vtkobject, **kwargs)
class BSProp3D(BSProp):
"""Wrapper for vtkProp3D."""
def __init__(self, vtkobject=None, **kwargs):
super().__init__(vtkobject=vtkobject, **kwargs)
[docs]class BSActor2D(BSProp):
"""Wrapper for vtkActor2D.
Unresolved requests are forwarded to its 2D property.
"""
[docs] def __init__(self, vtkobject=None, **kwargs):
super().__init__(vtkobject=vtkobject, **kwargs)
self._property = BSProperty2D(vtkobject=self.VTKObject.GetProperty())
def _handle_call(self, key, name, args):
try:
return super()._handle_call(key, name, args)
except (AttributeError, KeyError):
return self._property._handle_call(key, name, args)
def __getattr__(self, name):
try:
return super().__getattr__(name)
except (AttributeError, KeyError):
return self._property.__getattr__(name)
def __setattr__(self, name, value):
try:
super().__setattr__(name, value)
except (AttributeError, KeyError):
self._property.__setattr__(name, value)
[docs] def GetProperty(self):
"""Get property.
Wraps the `GetProperty` method of `vtkActor2D` to return a wrapped
property.
Returns
-------
prop : BSProperty2D
Actor's property.
"""
return self._property
[docs]class BSScalarBarActor(BSActor2D):
"""Wrapper for vtkScalarBarActor.
Unresolved requests are forwarded to its 2D property.
"""
[docs] def SetTitleTextProperty(self, obj=None, **kwargs):
"""Set title text property.
Wraps the `SetTitleTextProperty` method of `vtkScalarBarActor` to
accept a `vtkTextProperty` or BSTextProperty.
Parameters
----------
obj : vtkTextProperty or BSTextProperty, optional
Title text property. If None, the property is created.
Default is None.
kwargs : optional keyword arguments
Arguments are use to set the property.
"""
if obj is None:
obj = self.VTKObject.GetTitleTextProperty()
obj = BSTextProperty(vtkobject=obj, **kwargs)
self.VTKObject.SetTitleTextProperty(obj.VTKObject)
return obj
[docs] def SetLabelTextProperty(self, obj=None, **kwargs):
"""Set label text property.
Wraps the `SetLabelTextProperty` method of `vtkScalarBarActor` to
accept a `vtkTextProperty` or BSTextProperty.
Parameters
----------
obj : vtkTextProperty or BSTextProperty, optional
Label text property. If None, the property is created.
Default is None.
kwargs : optional keyword arguments
Arguments are use to set the property.
"""
if obj is None:
obj = self.VTKObject.GetLabelTextProperty()
obj = BSTextProperty(vtkobject=obj, **kwargs)
self.VTKObject.SetLabelTextProperty(obj.VTKObject)
return obj
[docs] def SetAnnotationTextProperty(self, obj=None, **kwargs):
"""Set annotation text property.
Wraps the `SetAnnotationTextProperty` method of `vtkScalarBarActor` to
accept a `vtkTextProperty` or BSTextProperty.
Parameters
----------
obj : vtkTextProperty or BSTextProperty, optional
Annotation text property. If None, the property is created.
Default is None.
kwargs : optional keyword arguments
Arguments are use to set the property.
"""
if obj is None:
obj = self.VTKObject.GetAnnotationTextProperty()
obj = BSTextProperty(vtkobject=obj, **kwargs)
self.VTKObject.SetAnnotationTextProperty(obj.VTKObject)
return obj
[docs] def SetBackgroundProperty(self, obj=None, **kwargs):
"""Set background property.
Wraps the `SetBackgroundProperty` method of `vtkScalarBarActor` to
accept a `vtkProperty2D` or BSProperty2D.
Parameters
----------
obj : vtkProperty2D or BSProperty2D, optional
Background property. If None, the property is created.
Default is None.
kwargs : optional keyword arguments
Arguments are use to set the property.
"""
if obj is None:
obj = self.VTKObject.GetBackgroundProperty()
obj = BSProperty2D(vtkobject=obj, **kwargs)
self.VTKObject.SetBackgroundProperty(obj.VTKObject)
return obj
[docs] def SetFrameProperty(self, obj=None, **kwargs):
"""Set frame property.
Wraps the `SetFrameProperty` method of `vtkScalarBarActor` to
accept a `vtkProperty2D` or BSProperty2D.
Parameters
----------
obj : vtkProperty2D or BSProperty2D, optional
Frame property. If None, the property is created.
Default is None.
kwargs : optional keyword arguments
Arguments are use to set the property.
"""
if obj is None:
obj = self.VTKObject.GetFrameProperty()
obj = BSProperty2D(vtkobject=obj, **kwargs)
self.VTKObject.SetFrameProperty(obj.VTKObject)
return obj
[docs]class BSTexturedActor2D(BSActor2D):
"""Wrapper for vtkTexturedActor2D."""
pass
[docs]class BSTextActor(BSTexturedActor2D):
"""Wrapper for vtkTextActor."""
[docs] def SetTextProperty(self, obj=None, **kwargs):
"""Set text property.
Wraps the `SetTextProperty` method of `vtkTextActor` to
accept a `vtkTextProperty` or BSTextProperty.
Parameters
----------
obj : vtkTextProperty or BSTextProperty, optional
Label text property. If None, the property is created.
Default is None.
kwargs : optional keyword arguments
Arguments are use to set the property.
"""
if obj is None:
obj = self.VTKObject.GetTextProperty()
obj = BSTextProperty(vtkobject=obj, **kwargs)
self.VTKObject.SetTextProperty(obj.VTKObject)
return obj
[docs]class BSActor(BSProp3D):
"""Wrapper for vtkActor.
Unresolved requests are forwarded to its property.
Examples
--------
>>> from brainspace.vtk_interface.wrappers import BSActor
>>> a = BSActor()
>>> a.GetProperty().GetOpacity()
1.0
>>> a.GetOpacity() # It is forwarded to the property
1.0
>>> a.opacity = .5
>>> a.VTKObject.GetProperty().GetOpacity()
0.5
"""
[docs] def __init__(self, vtkobject=None, **kwargs):
super().__init__(vtkobject=vtkobject, **kwargs)
self._property = BSProperty(self.VTKObject.GetProperty())
def _handle_call(self, key, name, args):
try:
return super()._handle_call(key, name, args)
except (AttributeError, KeyError):
return self._property._handle_call(key, name, args)
def __getattr__(self, name):
try:
return super().__getattr__(name)
except (AttributeError, KeyError):
return self._property.__getattr__(name)
def __setattr__(self, name, value):
try:
super().__setattr__(name, value)
except (AttributeError, KeyError):
self._property.__setattr__(name, value)
[docs] def SetMapper(self, obj=None, **kwargs):
"""Set mapper.
Wraps the `SetMapper` method of `vtkActor` to accept a
`vtkMapper` or BSMapper.
Parameters
----------
obj : vtkMapper or BSMapper, optional
Mapper. If None, a PolyDataMapper is created. Default is None.
kwargs : optional keyword arguments
Arguments are used to set the mapper.
"""
if obj is None:
return self.SetPolyDataMapper(**kwargs)
obj = wrap_vtk(obj, **kwargs)
self.VTKObject.SetMapper(obj.VTKObject)
return obj
[docs] def SetPolyDataMapper(self, obj=None, **kwargs):
"""Set a PolyDataMapper.
Parameters
----------
obj : vtkMapper or BSMapper, optional
Mapper. If None, the mapper is created. Default is None.
kwargs : optional keyword arguments
Arguments are used to set the mapper.
"""
obj = BSPolyDataMapper(vtkobject=obj, **kwargs)
self.VTKObject.SetMapper(obj.VTKObject)
return obj
[docs] def SetDataSetMapper(self, obj=None, **kwargs):
"""Set DataSetMapper.
Parameters
----------
obj : vtkMapper or BSMapper, optional
Mapper. If None, the mapper is created. Default is None.
kwargs : optional keyword arguments
Arguments are used to set the mapper.
"""
obj = BSDataSetMapper(vtkobject=obj, **kwargs)
self.VTKObject.SetMapper(obj.VTKObject)
return obj
[docs] def SetLabeledContourMapper(self, obj=None, **kwargs):
"""Set LabeledContourMapper.
Parameters
----------
obj : vtkMapper or BSMapper, optional
Mapper. If None, the mapper is created. Default is None.
kwargs : optional keyword arguments
Arguments are used to set the mapper.
"""
obj = BSLabeledContourMapper(vtkobject=obj, **kwargs)
self.VTKObject.SetMapper(obj.VTKObject)
return obj
[docs] def GetProperty(self):
"""Get property.
Wraps the `GetProperty` method of `vtkActor` to return a wrapped
property.
Returns
-------
prop : BSProperty
Actor's property.
"""
return self._property