1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
#!/usr/bin/env python
from vtkmodules.vtkCommonCore import (
vtkLookupTable,
vtkMath,
)
from vtkmodules.vtkCommonDataModel import (
vtkImageData,
vtkSphere,
)
from vtkmodules.vtkFiltersGeneral import vtkDiscreteFlyingEdges3D
from vtkmodules.vtkImagingCore import vtkImageThreshold
from vtkmodules.vtkImagingHybrid import vtkSampleFunction
from vtkmodules.vtkImagingMath import vtkImageMathematics
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer,
)
import vtkmodules.vtkInteractionStyle
import vtkmodules.vtkRenderingFreeType
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()
# Create the RenderWindow, Renderer and both Actors
#
ren1 = vtkRenderer()
renWin = vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
math = vtkMath()
# Generate some random colors
def MakeColors (lut, n):
lut.SetNumberOfColors(n)
lut.SetTableRange(0, n - 1)
lut.SetScaleToLinear()
lut.Build()
lut.SetTableValue(0, 0, 0, 0, 1)
math.RandomSeed(5071)
i = 1
while i < n:
lut.SetTableValue(i, math.Random(.2, 1),
math.Random(.2, 1), math.Random(.2, 1), 1)
i += 1
lut = vtkLookupTable()
MakeColors(lut, 256)
n = 20
radius = 10
# This has been moved outside the loop so that the code can be correctly
# translated to python
blobImage = vtkImageData()
i = 0
while i < n:
sphere = vtkSphere()
sphere.SetRadius(radius)
max = 50 - radius
sphere.SetCenter(int(math.Random(-max, max)),
int(math.Random(-max, max)), int(math.Random(-max, max)))
sampler = vtkSampleFunction()
sampler.SetImplicitFunction(sphere)
sampler.SetOutputScalarTypeToFloat()
sampler.SetSampleDimensions(51, 51, 51)
sampler.SetModelBounds(-50, 50, -50, 50, -50, 50)
thres = vtkImageThreshold()
thres.SetInputConnection(sampler.GetOutputPort())
thres.ThresholdByLower(radius * radius)
thres.ReplaceInOn()
thres.ReplaceOutOn()
thres.SetInValue(i + 1)
thres.SetOutValue(0)
thres.Update()
if (i == 0):
blobImage.DeepCopy(thres.GetOutput())
maxValue = vtkImageMathematics()
maxValue.SetInputData(0, blobImage)
maxValue.SetInputData(1, thres.GetOutput())
maxValue.SetOperationToMax()
maxValue.Modified()
maxValue.Update()
blobImage.DeepCopy(maxValue.GetOutput())
i += 1
discrete = vtkDiscreteFlyingEdges3D()
discrete.SetInputData(blobImage)
discrete.GenerateValues(n, 1, n)
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(discrete.GetOutputPort())
mapper.SetLookupTable(lut)
mapper.SetScalarRange(0, lut.GetNumberOfColors())
actor = vtkActor()
actor.SetMapper(mapper)
ren1.AddActor(actor)
renWin.Render()
iren.Start()
|