Statistiques
| Révision :

root / ase / visualize / vtk / volume.py @ 3

Historique | Voir | Annoter | Télécharger (2,33 ko)

1 1 tkerber
2 1 tkerber
import numpy as np
3 1 tkerber
4 1 tkerber
from vtk import vtkContourFilter, vtkDepthSortPolyData
5 1 tkerber
from ase.visualize.vtk.grid import vtkVolumeGrid
6 1 tkerber
from ase.visualize.vtk.module import vtkPolyDataModule
7 1 tkerber
from ase.visualize.vtk.pipeline import vtkSurfaceSmootherPipeline, \
8 1 tkerber
                                       vtkDepthSortPipeline
9 1 tkerber
10 1 tkerber
# -------------------------------------------------------------------
11 1 tkerber
12 1 tkerber
class vtkIsoSurfaceModule(vtkVolumeGrid, vtkPolyDataModule):
13 1 tkerber
    def __init__(self, data, cell, vtk_renderer, contours=1, depthsort=True):
14 1 tkerber
        #TODO don't require vtk_renderer... implement vtkScene
15 1 tkerber
        #TODO contour values from list or autocontours if int
16 1 tkerber
17 1 tkerber
        # Make sure data argument is a valid array
18 1 tkerber
        if not isinstance(data, np.ndarray):
19 1 tkerber
            data = np.array(data)
20 1 tkerber
21 1 tkerber
        vtkVolumeGrid.__init__(self, data.shape, cell)
22 1 tkerber
23 1 tkerber
        self.vtk_iso = vtkContourFilter() #vtkMarchingContourFilter?
24 1 tkerber
        self.vtk_iso.SetInput(self.get_structured_points()) #TODO non-orthogonal
25 1 tkerber
26 1 tkerber
        self.vtk_iso.SetValue(0, 0.25)
27 1 tkerber
        self.vtk_iso.SetValue(1, -0.25)
28 1 tkerber
29 1 tkerber
        self.smoothpipe = vtkSurfaceSmootherPipeline(self, vtk_iso)
30 1 tkerber
31 1 tkerber
        #TODO use vtkDepthSortPipeline - but vtkPolyDataModule isn't a pipeline
32 1 tkerber
33 1 tkerber
        self.depthsort = depthsort
34 1 tkerber
35 1 tkerber
        if self.depthsort:
36 1 tkerber
            # The depht sort object is set up to generate scalars representing
37 1 tkerber
            # the sort depth. A camera is assigned for the sorting. The camera
38 1 tkerber
            # defines the sort vector (position and focal point).
39 1 tkerber
            self.vtk_ds = vtkDepthSortPolyData()
40 1 tkerber
            self.vtk_ds.SetCamera(vtk_renderer.GetActiveCamera())
41 1 tkerber
            self.vtk_ds.SetInputConnection(self.vtk_iso.GetOutputPort())
42 1 tkerber
            self.vtk_ds.SetDirectionToBackToFront()
43 1 tkerber
            #vtk_ds.SetVector(1, 1, 1)
44 1 tkerber
            #vtk_ds.SortScalarsOn()
45 1 tkerber
            #vtk_ds.Update()
46 1 tkerber
47 1 tkerber
            vtk_renderer.ResetCamera()
48 1 tkerber
49 1 tkerber
            vtkPolyDataModule.__init__(self, self.vtk_ds)
50 1 tkerber
        else:
51 1 tkerber
            vtkPolyDataModule.__init__(self, self.vtk_iso)
52 1 tkerber
53 1 tkerber
        #TODO add color function
54 1 tkerber
        """
55 1 tkerber
        vtk_dmap = vtk.vtkPolyDataMapper()
56 1 tkerber
        vtk_dmap.ScalarVisibilityOn()
57 1 tkerber
        vtk_dmap.SetScalarRange(0, vtk_sda_x.GetMaxNorm()) #TODO GetMinNorm non-existing!
58 1 tkerber
        vtk_dmap.SetScalarModeToUsePointFieldData()
59 1 tkerber
        vtk_dmap.SelectColorArray("x")
60 1 tkerber
        #vtk_dmap.ColorByArrayComponent("x", 0)
61 1 tkerber
        """