Statistiques
| Révision :

root / ase / visualize / vtk / sources.py @ 1

Historique | Voir | Annoter | Télécharger (3,84 ko)

1 1 tkerber
2 1 tkerber
import numpy as np
3 1 tkerber
4 1 tkerber
from vtk import vtkProperty, vtkSphereSource, vtkArrowSource, vtkConeSource
5 1 tkerber
6 1 tkerber
from ase.data import atomic_numbers
7 1 tkerber
from ase.data import covalent_radii as atomic_radii
8 1 tkerber
from ase.data.colors import jmol_colors as atomic_colors
9 1 tkerber
#from ase.data.colors import cpk_colors as atomic_colors
10 1 tkerber
11 1 tkerber
avg_radius = np.mean(atomic_radii[np.isfinite(atomic_radii)])
12 1 tkerber
13 1 tkerber
# -------------------------------------------------------------------
14 1 tkerber
15 1 tkerber
class vtkCustomGlyphSource:
16 1 tkerber
    def __init__(self, scale, vtk_glyph_source):
17 1 tkerber
        self.scale = scale
18 1 tkerber
        self.vtk_glyph_source = vtk_glyph_source
19 1 tkerber
        self.vtk_property = vtkProperty()
20 1 tkerber
21 1 tkerber
    def get_scale(self):
22 1 tkerber
        return self.scale
23 1 tkerber
24 1 tkerber
    def get_property(self):
25 1 tkerber
        return self.vtk_property
26 1 tkerber
27 1 tkerber
    def get_output(self):
28 1 tkerber
        return self.vtk_glyph_source.GetOutput()
29 1 tkerber
30 1 tkerber
class vtkAtomSource(vtkCustomGlyphSource):
31 1 tkerber
    def __init__(self, name, scale=1, fraction=0.25):
32 1 tkerber
        vtkCustomGlyphSource.__init__(self, scale, vtkSphereSource())
33 1 tkerber
34 1 tkerber
        self.number = atomic_numbers[name]
35 1 tkerber
        self.radius = atomic_radii[self.number]
36 1 tkerber
        self.color = atomic_colors[self.number]
37 1 tkerber
38 1 tkerber
        self.vtk_property.SetColor(self.color[0],self.color[1],self.color[2])
39 1 tkerber
        self.vtk_property.SetInterpolationToPhong()
40 1 tkerber
        self.vtk_property.SetDiffuse(0.7)
41 1 tkerber
        self.vtk_property.SetSpecular(0.4)
42 1 tkerber
        self.vtk_property.SetSpecularPower(20)
43 1 tkerber
44 1 tkerber
        self.vtk_glyph_source.SetPhiResolution(16)
45 1 tkerber
        self.vtk_glyph_source.SetThetaResolution(16)
46 1 tkerber
        self.vtk_glyph_source.SetRadius(fraction*self.radius)
47 1 tkerber
48 1 tkerber
# -------------------------------------------------------------------
49 1 tkerber
50 1 tkerber
class vtkClampedGlyphSource(vtkCustomGlyphSource):
51 1 tkerber
    def __init__(self, scale, vtk_glyph_source, range_min, range_max):
52 1 tkerber
        vtkCustomGlyphSource.__init__(self, scale, vtk_glyph_source)
53 1 tkerber
        self.range = (range_min, range_max,)
54 1 tkerber
55 1 tkerber
    def get_range(self):
56 1 tkerber
        return self.range
57 1 tkerber
58 1 tkerber
class vtkForceSource(vtkClampedGlyphSource):
59 1 tkerber
    def __init__(self, maxnorm, scale=1):
60 1 tkerber
        vtkClampedGlyphSource.__init__(self, scale, vtkArrowSource(),
61 1 tkerber
                                       range_min=0.0, range_max=maxnorm)
62 1 tkerber
63 1 tkerber
        self.vtk_property.SetColor(1.0, 0.25, 0.25) # forces are red
64 1 tkerber
        self.vtk_property.SetInterpolationToPhong()
65 1 tkerber
        self.vtk_property.SetDiffuse(0.7)
66 1 tkerber
        self.vtk_property.SetSpecular(0.4)
67 1 tkerber
        self.vtk_property.SetSpecularPower(20)
68 1 tkerber
69 1 tkerber
        self.vtk_glyph_source.SetShaftResolution(12)
70 1 tkerber
        self.vtk_glyph_source.SetShaftRadius(0.03*avg_radius) #default 0.03
71 1 tkerber
        self.vtk_glyph_source.SetTipResolution(20)
72 1 tkerber
        self.vtk_glyph_source.SetTipLength(0.3*avg_radius) #default 0.35
73 1 tkerber
        self.vtk_glyph_source.SetTipRadius(0.1*avg_radius) #default 0.1
74 1 tkerber
75 1 tkerber
class vtkVelocitySource(vtkClampedGlyphSource):
76 1 tkerber
    def __init__(self, maxnorm, scale=1):
77 1 tkerber
        vtkClampedGlyphSource.__init__(self, scale, vtkConeSource(),
78 1 tkerber
                                       range_min=0.0, range_max=maxnorm)
79 1 tkerber
80 1 tkerber
        self.vtk_property.SetColor(0.25, 0.25, 1.0) # velocities blue
81 1 tkerber
        self.vtk_property.SetInterpolationToPhong()
82 1 tkerber
        self.vtk_property.SetDiffuse(0.9)
83 1 tkerber
        self.vtk_property.SetSpecular(1.0)
84 1 tkerber
        self.vtk_property.SetSpecularPower(50)
85 1 tkerber
86 1 tkerber
        self.vtk_glyph_source.SetAngle(6)
87 1 tkerber
        self.vtk_glyph_source.SetHeight(avg_radius)
88 1 tkerber
        self.vtk_glyph_source.SetResolution(16)
89 1 tkerber
        self.vtk_glyph_source.SetCenter(0.05*avg_radius, 0.0, 0.0)
90 1 tkerber
91 1 tkerber
# -------------------------------------------------------------------
92 1 tkerber
93 1 tkerber
class vtkBondSource(vtkCustomGlyphSource):
94 1 tkerber
    def __init__(self, width, scale=1):
95 1 tkerber
        vtkCustomGlyphSource.__init__(self, scale, vtkCylinderSource())
96 1 tkerber
97 1 tkerber
        self.width = width
98 1 tkerber
99 1 tkerber
        self.vtk_property.SetColor(0.25, 1.0, 0.25) # bonds are green
100 1 tkerber
                                                    # (and so are you)
101 1 tkerber
102 1 tkerber
        self.vtk_glyph_source.SetRadius(self.scale*self.width)
103 1 tkerber
        self.vtk_glyph_source.SetResolution(16)