129 lines
3.4 KiB
Python
129 lines
3.4 KiB
Python
"""PyVista volume module."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from pyvista._deprecate_positional_args import _deprecate_positional_args
|
|
|
|
from . import _vtk
|
|
from .prop3d import Prop3D
|
|
|
|
if TYPE_CHECKING:
|
|
from typing_extensions import Self
|
|
|
|
from .mapper import _BaseMapper
|
|
from .volume_property import VolumeProperty
|
|
|
|
|
|
class Volume(Prop3D, _vtk.vtkVolume):
|
|
"""Wrapper class for VTK volume.
|
|
|
|
This class represents a volume in a rendered scene. It inherits
|
|
functions related to the volume's position, orientation and origin
|
|
from Prop3D.
|
|
|
|
"""
|
|
|
|
def __init__(self):
|
|
"""Initialize volume."""
|
|
super().__init__()
|
|
|
|
@property
|
|
def mapper(self) -> _BaseMapper: # numpydoc ignore=RT01
|
|
"""Return or set the mapper of the volume.
|
|
|
|
Examples
|
|
--------
|
|
Add a volume to a :class:`pyvista.Plotter` and get its mapper.
|
|
|
|
>>> import pyvista as pv
|
|
>>> vol = pv.ImageData(dimensions=(10, 10, 10))
|
|
>>> vol['scalars'] = 255 - vol.z * 25
|
|
>>> pl = pv.Plotter()
|
|
>>> actor = pl.add_volume(vol)
|
|
>>> actor.mapper.bounds
|
|
BoundsTuple(x_min = 0.0,
|
|
x_max = 9.0,
|
|
y_min = 0.0,
|
|
y_max = 9.0,
|
|
z_min = 0.0,
|
|
z_max = 9.0)
|
|
|
|
"""
|
|
return self.GetMapper() # type: ignore[return-value]
|
|
|
|
@mapper.setter
|
|
def mapper(self, obj):
|
|
self.SetMapper(obj)
|
|
|
|
@property
|
|
def prop(self): # numpydoc ignore=RT01
|
|
"""Return or set the property of this actor.
|
|
|
|
Examples
|
|
--------
|
|
Create an volume and get its properties.
|
|
|
|
>>> import pyvista as pv
|
|
>>> vol = pv.ImageData(dimensions=(10, 10, 10))
|
|
>>> vol['scalars'] = 255 - vol.z * 25
|
|
>>> pl = pv.Plotter()
|
|
>>> actor = pl.add_volume(vol)
|
|
>>> actor.prop.GetShade()
|
|
0
|
|
|
|
"""
|
|
return self.GetProperty()
|
|
|
|
@prop.setter
|
|
def prop(self, obj: VolumeProperty):
|
|
self.SetProperty(obj)
|
|
|
|
@_deprecate_positional_args
|
|
def copy(self: Self, deep: bool = True) -> Self: # noqa: FBT001, FBT002
|
|
"""Create a copy of this volume.
|
|
|
|
Parameters
|
|
----------
|
|
deep : bool, default: True
|
|
Create a shallow or deep copy of the volume. A deep copy will have a
|
|
new property and mapper, while a shallow copy will use the mapper
|
|
and property of this volume.
|
|
|
|
Returns
|
|
-------
|
|
Volume
|
|
Deep or shallow copy of this volume.
|
|
|
|
Examples
|
|
--------
|
|
Create a volume of by adding it to a :class:`~pyvista.Plotter`
|
|
and then copy the volume.
|
|
|
|
>>> import pyvista as pv
|
|
>>> mesh = pv.Wavelet()
|
|
>>> pl = pv.Plotter()
|
|
>>> volume = pl.add_volume(mesh, diffuse=0.5)
|
|
>>> new_volume = volume.copy()
|
|
|
|
Change the copy's properties. A deep copy is made by default, so the original
|
|
volume is not affected.
|
|
|
|
>>> new_volume.prop.diffuse = 1.0
|
|
>>> new_volume.prop.diffuse
|
|
1.0
|
|
|
|
>>> volume.prop.diffuse
|
|
0.5
|
|
|
|
"""
|
|
new_actor = type(self)()
|
|
if deep:
|
|
if self.mapper is not None:
|
|
new_actor.mapper = self.mapper.copy()
|
|
new_actor.prop = self.prop.copy()
|
|
else:
|
|
new_actor.ShallowCopy(self)
|
|
return new_actor
|