root / ase / visualize / vtk / volume.py @ 1
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 | """
|