Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1415:projekte_im_wintersemester_2014_15:mayavivoxels.py

mayavivoxels.py

import numpy as np
from mayavi.scripts import mayavi2
from tvtk.api import tvtk
 
class voxels(object):
 
        def __init__(self, positions):
            self.points = []
            self.polygons = []
            self.positions = positions
            self.mesh = None
 
        def createmesh(self, length):
            for i in self.positions:
                self.cube(i, length)
            points = np.asarray(self.points)
            polygons = np.asarray(self.polygons)
            mesh = tvtk.PolyData(points=points, polys=polygons)
            return(mesh)
 
 
        def cube(self, start, length):
            '''
            Fuegt der Liste der Punkte und der Liste der Dreiecke eine
            Pyramide um den Ursprung mit Grundlaenge length und hoehe height hinzu.
            '''
            a = len(self.points)
            self.points.append([start[0], start[1], start[2]])
            self.points.append([start[0]+length, start[1], start[2]])
            self.points.append([start[0], start[1]+length, start[2]])
            self.points.append([start[0], start[1], start[2]+length])
            self.points.append([start[0]+length, start[1]+length, start[2]])
            self.points.append([start[0], start[1]+length, start[2]+length])
            self.points.append([start[0]+length, start[1], start[2]+length])
            self.points.append([start[0]+length, start[1]+length, start[2]+length])
            self.polygons.append([a, a+1, a+2])
            self.polygons.append([a, a+2, a+3])
            self.polygons.append([a, a+1, a+3])
            self.polygons.append([a+5, a+2, a+3])
            self.polygons.append([a+2, a+4, a+5])
            self.polygons.append([a+3, a+5, a+6])
            self.polygons.append([a+1, a+2, a+4])
            self.polygons.append([a+4, a+5, a+7])
            self.polygons.append([a+6, a+4, a+7])
            self.polygons.append([a+5, a+6, a+7])
            self.polygons.append([a+1, a+4, a+6])
            self.polygons.append([a+1, a+3, a+6])
 
 
@mayavi2.standalone
def view(mesh):
    '''Stellt ein tvtk.Polydata mesh im mayavi2 Standalone dar.'''
    from mayavi.sources.vtk_data_source import VTKDataSource
    from mayavi.modules.surface import Surface
 
    mayavi.new_scene()
    src = VTKDataSource(data=mesh)
    mayavi.add_source(src)
    s = Surface()
    mayavi.add_module(s)
 
def main():
    '''Zeichnet eine Pyramide und 4 Kreise'''
    points, polygons = [], []
    cube((0, 0, 0), 10, points, polygons)
    points = np.asarray(points)
    polygons = np.asarray(polygons)
    mesh = tvtk.PolyData(points=points, polys=polygons)
    temperature = np.array([10., 20., 30., 40.])
    mesh.point_data.scalars = temperature
    view(mesh)
 
 
if __name__ == '__main__':
    positions = [(x, x, x) for x in range(10)]
    cube = voxels(positions)
    view(cube.createmesh(0.5))
ws1415/projekte_im_wintersemester_2014_15/mayavivoxels.py.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)