| tadd function to visualize particles directly from python module - sphere - GPU… | |
| git clone git://src.adamsgaard.dk/sphere | |
| Log | |
| Files | |
| Refs | |
| LICENSE | |
| --- | |
| commit 5d2500342b74ad102c08fcea14092dcea82d466e | |
| parent 43a754c8d75b526c6c6a23f5a860afd125c23c2e | |
| Author: Anders Damsgaard <[email protected]> | |
| Date: Fri, 20 Feb 2015 14:19:58 +0100 | |
| add function to visualize particles directly from python module | |
| Diffstat: | |
| M python/sphere.py | 82 +++++++++++++++++++++++++++++… | |
| 1 file changed, 80 insertions(+), 2 deletions(-) | |
| --- | |
| diff --git a/python/sphere.py b/python/sphere.py | |
| t@@ -1840,10 +1840,12 @@ class sim: | |
| polydata.SetPoints(points) | |
| polydata.SetLines(lines) | |
| #polydata.GetCellData().SetScalars(colors) | |
| + #polydata.GetCellData().SetScalars(forces) # default scalar | |
| polydata.GetCellData().SetScalars(forces) # default scalar | |
| #polydata.GetCellData().AddArray(forces) | |
| - polydata.GetCellData().AddArray(stresses) | |
| - polydata.GetPointData().AddArray(stresses) | |
| + #polydata.GetCellData().AddArray(stresses) | |
| + #polydata.GetPointData().AddArray(stresses) | |
| + polydata.GetPointData().SetScalars(stresses) # default scalar | |
| # write VTK XML image data file | |
| writer = vtk.vtkXMLPolyDataWriter() | |
| t@@ -2038,6 +2040,82 @@ class sim: | |
| if verbose: | |
| print('Output file: ' + filename) | |
| + def show(self, coloring=numpy.array([]), resolution=6): | |
| + ''' | |
| + Show a rendering of all particles in a window. | |
| + | |
| + :param coloring: Color the particles from red to white to blue accordi… | |
| + to the values in this array. | |
| + :type coloring: numpy.array | |
| + :param resolution: The resolution of the rendered spheres. Larger valu… | |
| + increase the performance requirements. | |
| + :type resolution: int | |
| + ''' | |
| + | |
| + if py_vtk == False: | |
| + print('Error: vtk module not found, cannot show scene.') | |
| + return | |
| + | |
| + # create a rendering window and renderer | |
| + ren = vtk.vtkRenderer() | |
| + renWin = vtk.vtkRenderWindow() | |
| + renWin.AddRenderer(ren) | |
| + | |
| + # create a renderwindowinteractor | |
| + iren = vtk.vtkRenderWindowInteractor() | |
| + iren.SetRenderWindow(renWin) | |
| + | |
| + if coloring.any(): | |
| + #min_value = numpy.min(coloring) | |
| + max_value = numpy.max(coloring) | |
| + #min_rgb = numpy.array([50, 50, 50]) | |
| + #max_rgb = numpy.array([255, 255, 255]) | |
| + #def color(value): | |
| + #return (max_rgb - min_rgb) * (value - min_value) | |
| + | |
| + def red(ratio): | |
| + return numpy.fmin(1.0, 0.209*ratio**3. - 2.49*ratio**2. | |
| + + 3.0*ratio + 0.0109) | |
| + def green(ratio): | |
| + return numpy.fmin(1.0, -2.44*ratio**2. + 2.15*ratio + 0.369) | |
| + def blue(ratio): | |
| + return numpy.fmin(1.0, -2.21*ratio**2. + 1.61*ratio + 0.573) | |
| + | |
| + for i in numpy.arange(self.np): | |
| + | |
| + # create source | |
| + source = vtk.vtkSphereSource() | |
| + source.SetCenter(self.x[i,:]) | |
| + source.SetRadius(self.radius[i]) | |
| + source.SetThetaResolution(resolution) | |
| + source.SetPhiResolution(resolution) | |
| + | |
| + # mapper | |
| + mapper = vtk.vtkPolyDataMapper() | |
| + if vtk.VTK_MAJOR_VERSION <= 5: | |
| + mapper.SetInput(source.GetOutput()) | |
| + else: | |
| + mapper.SetInputConnection(source.GetOutputPort()) | |
| + | |
| + # actor | |
| + actor = vtk.vtkActor() | |
| + actor.SetMapper(mapper) | |
| + | |
| + # color | |
| + if coloring.any(): | |
| + ratio = coloring[i]/max_value | |
| + r,g,b = red(ratio), green(ratio), blue(ratio) | |
| + actor.GetProperty().SetColor(r,g,b) | |
| + | |
| + # assign actor to the renderer | |
| + ren.AddActor(actor) | |
| + | |
| + ren.SetBackground(0.3, 0.3, 0.3) | |
| + | |
| + # enable user interface interactor | |
| + iren.Initialize() | |
| + renWin.Render() | |
| + iren.Start() | |
| def readfirst(self, verbose=True): | |
| ''' |