Esempio n. 1
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(
         self, module_manager,
         vtk.vtkPNMReader(), 'Reading vtkPNM.',
         (), ('vtkPNM',),
         replaceDoc=True,
         inputFunctions=None, outputFunctions=None)
Esempio n. 2
0
def main():
    colors = vtk.vtkNamedColors()

    fileName = get_program_parameters()

    # Now create the RenderWindow, Renderer and Interactor.
    #
    ren1 = vtk.vtkRenderer()
    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(ren1)
    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)

    imageIn = vtk.vtkPNMReader()
    imageIn.SetFileName(fileName)

    gaussian = vtk.vtkImageGaussianSmooth()
    gaussian.SetStandardDeviations(2, 2)
    gaussian.SetDimensionality(2)
    gaussian.SetRadiusFactors(1, 1)
    gaussian.SetInputConnection(imageIn.GetOutputPort())

    geometry = vtk.vtkImageDataGeometryFilter()
    geometry.SetInputConnection(gaussian.GetOutputPort())

    aClipper = vtk.vtkClipPolyData()
    aClipper.SetInputConnection(geometry.GetOutputPort())
    aClipper.SetValue(127.5)
    aClipper.GenerateClipScalarsOff()
    aClipper.InsideOutOn()
    aClipper.GetOutput().GetPointData().CopyScalarsOff()
    aClipper.Update()

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputConnection(aClipper.GetOutputPort())
    mapper.ScalarVisibilityOff()

    letter = vtk.vtkActor()
    letter.SetMapper(mapper)

    ren1.AddActor(letter)
    letter.GetProperty().SetDiffuseColor(colors.GetColor3d("LampBlack"))
    letter.GetProperty().SetRepresentationToWireframe()

    ren1.SetBackground(colors.GetColor3d("WhiteSmoke"))
    ren1.ResetCamera()
    ren1.GetActiveCamera().Dolly(1.2)
    ren1.ResetCameraClippingRange()

    renWin.SetSize(640, 480)
    renWin.SetWindowName('CreateBFont')

    # Render the image.
    #
    renWin.Render()
    iren.Start()
Esempio n. 3
0
def Earth(pos=(0, 0, 0), r=1, lw=1):
    """Build a textured actor representing the Earth.

    .. hint:: |geodesic| |geodesic.py|_
    """
    import os

    tss = vtk.vtkTexturedSphereSource()
    tss.SetRadius(r)
    tss.SetThetaResolution(72)
    tss.SetPhiResolution(36)
    earthMapper = vtk.vtkPolyDataMapper()
    earthMapper.SetInputConnection(tss.GetOutputPort())
    earthActor = Actor(c="w")
    earthActor.SetMapper(earthMapper)
    atext = vtk.vtkTexture()
    pnmReader = vtk.vtkPNMReader()
    cdir = os.path.dirname(__file__)
    if cdir == "":
        cdir = "."
    fn = settings.textures_path + "earth.ppm"
    pnmReader.SetFileName(fn)
    atext.SetInputConnection(pnmReader.GetOutputPort())
    atext.InterpolateOn()
    earthActor.SetTexture(atext)
    if not lw:
        earthActor.SetPosition(pos)
        return earthActor
    es = vtk.vtkEarthSource()
    es.SetRadius(r / 0.995)
    earth2Mapper = vtk.vtkPolyDataMapper()
    earth2Mapper.SetInputConnection(es.GetOutputPort())
    earth2Actor = Actor()  # vtk.vtkActor()
    earth2Actor.SetMapper(earth2Mapper)
    earth2Mapper.ScalarVisibilityOff()
    earth2Actor.GetProperty().SetLineWidth(lw)
    ass = Assembly([earthActor, earth2Actor])
    ass.SetPosition(pos)
    settings.collectable_actors.append(ass)
    return ass
Esempio n. 4
0
def earth(pos=[0, 0, 0], r=1, lw=1):
    '''Build a textured actor representing the Earth.

    .. hint:: Example: `earth.py <https://github.com/marcomusy/vtkplotter/blob/master/examples/basic/earth.py>`_
    
        .. image:: https://user-images.githubusercontent.com/32848391/51031592-5a448700-159d-11e9-9b66-bee6abb18679.png
    '''
    import os
    tss = vtk.vtkTexturedSphereSource()
    tss.SetRadius(r)
    tss.SetThetaResolution(72)
    tss.SetPhiResolution(36)
    earthMapper = vtk.vtkPolyDataMapper()
    earthMapper.SetInputConnection(tss.GetOutputPort())
    earthActor = Actor()  #vtk.vtkActor()
    earthActor.SetMapper(earthMapper)
    atext = vtk.vtkTexture()
    pnmReader = vtk.vtkPNMReader()
    cdir = os.path.dirname(__file__)
    if cdir == '':
        cdir = '.'
    fn = cdir + '/textures/earth.ppm'
    pnmReader.SetFileName(fn)
    atext.SetInputConnection(pnmReader.GetOutputPort())
    atext.InterpolateOn()
    earthActor.SetTexture(atext)
    if not lw:
        earthActor.SetPosition(pos)
        return earthActor
    es = vtk.vtkEarthSource()
    es.SetRadius(r / .995)
    earth2Mapper = vtk.vtkPolyDataMapper()
    earth2Mapper.SetInputConnection(es.GetOutputPort())
    earth2Actor = Actor()  # vtk.vtkActor()
    earth2Actor.SetMapper(earth2Mapper)
    earth2Actor.GetProperty().SetLineWidth(lw)
    ass = Assembly([earthActor, earth2Actor])
    ass.SetPosition(pos)
    return ass
Esempio n. 5
0
def earth(pos=[0, 0, 0], r=1, lw=1):
    '''Build a textured actor representing the Earth.        

    [**Example**](https://github.com/marcomusy/vtkplotter/blob/master/examples/basic/earth.py)    
    '''
    import os
    tss = vtk.vtkTexturedSphereSource()
    tss.SetRadius(r)
    tss.SetThetaResolution(72)
    tss.SetPhiResolution(36)
    earthMapper = vtk.vtkPolyDataMapper()
    earthMapper.SetInputConnection(tss.GetOutputPort())
    earthActor = Actor()  #vtk.vtkActor()
    earthActor.SetMapper(earthMapper)
    atext = vtk.vtkTexture()
    pnmReader = vtk.vtkPNMReader()
    cdir = os.path.dirname(__file__)
    if cdir == '':
        cdir = '.'
    fn = cdir + '/textures/earth.ppm'
    pnmReader.SetFileName(fn)
    atext.SetInputConnection(pnmReader.GetOutputPort())
    atext.InterpolateOn()
    earthActor.SetTexture(atext)
    if not lw:
        earthActor.SetPosition(pos)
        return earthActor
    es = vtk.vtkEarthSource()
    es.SetRadius(r / .995)
    earth2Mapper = vtk.vtkPolyDataMapper()
    earth2Mapper.SetInputConnection(es.GetOutputPort())
    earth2Actor = Actor()  # vtk.vtkActor()
    earth2Actor.SetMapper(earth2Mapper)
    earth2Actor.GetProperty().SetLineWidth(lw)
    ass = Assembly([earthActor, earth2Actor])
    ass.SetPosition(pos)
    return ass
Esempio n. 6
0
def main():
    # The main window
    window = gtk.Window()
    window.set_title("A GtkGLExtVTKRenderWindow Demo!")
    window.connect("destroy", gtk.mainquit)
    window.connect("delete_event", gtk.mainquit)
    window.set_border_width(10)

    vtkda = GtkGLExtVTKRenderWindow()
    vtkda.show()

    vbox = gtk.VBox(spacing=3)
    vbox.show()
    vbox.pack_start(vtkda)

    button = gtk.Button('My Button')
    button.show()
    vbox.pack_start(button)
    window.add(vbox)

    # if one of the cones from above is not commented out, shows only
    # the cone on a mac, otherwise, it shows
    reader = vtk.vtkPNMReader()
    reader.SetFilePattern("mini/checkerboard%i.pgm")
    size = 5

    reader.SetDataExtent(0, size, 0, size, 0, size)
    reader.SetDataSpacing(1, 1, 1)
    reader.SetDataScalarTypeToUnsignedChar()
    image = reader.GetOutput()
    image.Update()

    mapper = vtk.vtkFixedPointVolumeRayCastMapper()
    mapper.SetInput(image)
    if size < 20:
        mapper.SetSampleDistance(float(size) / 1000)
        mapper.SetInteractiveSampleDistance(float(size) / 500)
    volproperty = vtk.vtkVolumeProperty()
    color = vtk.vtkPiecewiseFunction()
    color.AddSegment(0, 0, 255, 1)
    volproperty.SetColor(0, color)
    volume = vtk.vtkVolume()
    volume.SetMapper(mapper)
    volume.SetProperty(volproperty)

    window.set_size_request(400, 400)

    # The VTK stuff.
    cone = vtk.vtkConeSource()
    cone.SetResolution(80)
    coneMapper = vtk.vtkPolyDataMapper()
    coneMapper.SetInput(cone.GetOutput())
    #coneActor = vtk.vtkLODActor()
    coneActor = vtk.vtkActor()
    coneActor.SetMapper(coneMapper)
    coneActor.GetProperty().SetColor(0.5, 0.5, 1.0)
    ren = vtk.vtkRenderer()
    vtkda.GetRenderWindow().AddRenderer(ren)
    ren.AddActor(coneActor)
    ren.AddActor(volume)

    # show the main window and start event processing.
    window.show()
    gtk.mainloop()
Esempio n. 7
0
#!/usr/bin/env python
import vtk
from vtk.test import Testing
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

# do alpha-blending of two images, but also clip with stencil
reader1 = vtk.vtkBMPReader()
reader1.SetFileName(VTK_DATA_ROOT + "/Data/masonry.bmp")

reader2 = vtk.vtkPNMReader()
reader2.SetFileName(VTK_DATA_ROOT + "/Data/B.pgm")

table = vtk.vtkLookupTable()
table.SetTableRange(0, 127)
table.SetValueRange(0.0, 1.0)
table.SetSaturationRange(0.0, 0.0)
table.SetHueRange(0.0, 0.0)
table.SetAlphaRange(0.9, 0.0)
table.Build()

translate = vtk.vtkImageTranslateExtent()
translate.SetInputConnection(reader2.GetOutputPort())
translate.SetTranslation(60, 60, 0)

sphere = vtk.vtkSphere()
sphere.SetCenter(121, 131, 0)
sphere.SetRadius(70)

functionToStencil = vtk.vtkImplicitFunctionToImageStencil()
functionToStencil.SetInput(sphere)
Esempio n. 8
0
def main(argv):
    if len(argv) < 2:
        print "usage: ", argv[0], " <data>"
        exit(1)
    data_fn = argv[1]

    mapper = vtk.vtkPolyDataMapper()
    if data_fn.find('.vtk') != -1:
        reader = vtk.vtkPolyDataReader()
        reader.SetFileName(data_fn)
        reader.Update()
        data = reader.GetOutput()
        trianglize = vtk.vtkDelaunay2D()
        trianglize.SetInput(data)
        trianglize.Update()
        mapper.SetInputConnection(trianglize.GetOutputPort())
    elif data_fn.find('.pgm') != -1:
        reader = vtk.vtkPNMReader()
        reader.SetFileName(data_fn)
        reader.Update()
        data = reader.GetOutput()
        trianglize = vtk.vtkImageDataGeometryFilter()
        trianglize.SetInput(data)
        trianglize.Update()
        warp = vtk.vtkWarpScalar()
        warp.SetScaleFactor(0.2)  # arbitrary choice
        warp.SetInputConnection(trianglize.GetOutputPort())
        warp.Update()
        mapper.SetInputConnection(warp.GetOutputPort())
    elif data_fn.find('.dcm') != -1:
        reader = vtk.vtkDICOMImageReader()
        reader.SetFileName(data_fn)
        reader.Update()
        data = reader.GetOutput()
        trianglize = vtk.vtkImageDataGeometryFilter()
        trianglize.SetInput(data)
        trianglize.Update()
        warp = vtk.vtkWarpScalar()
        #warp.SetScaleFactor(0.2) # arbitrary choice
        warp.SetInputConnection(trianglize.GetOutputPort())
        warp.Update()
        mapper.SetInputConnection(warp.GetOutputPort())
    else:
        print "unrecognized data file:", data_fn
        exit(1)

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    renderer = vtk.vtkRenderer()
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.SetSize(700, 700)
    renderWindow.AddRenderer(renderer)
    renderWindow.SetWindowName("heightfield")

    renderer.AddActor(actor)
    renderer.SetBackground(0.4, 0.3, 0.2)

    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(renderWindow)

    renderWindow.Render()
    interactor.Start()
    def SetUp(self):
        '''
        Set up squadViewer
        '''
        def OnClosing():
            self.root.quit()

        def SetPhi(squad, win, phi):
            squad.SetPhiRoundness(float(phi))
            win.Render()

        def SetTheta(squad, win, theta):
            squad.SetThetaRoundness(float(theta))
            win.Render()

        def SetThickness(squad, win, thickness):
            squad.SetThickness(float(thickness))
            win.Render()

        def SetTexture(actor, texture, win):
            if doTexture.get():
                actor.SetTexture(texture)
            else:
                actor.SetTexture(None)
            win.Render()

        def SetToroid(squad, scale, win):
            squad.SetToroidal(toroid.get())
            if toroid.get():
                scale.config(state=NORMAL, fg='black')
            else:
                scale.config(state=DISABLED, fg='gray')
            win.Render()

        self.root = tkinter.Tk()
        self.root.title("superquadric viewer")
        # Define what to do when the user explicitly closes a window.
        self.root.protocol("WM_DELETE_WINDOW", OnClosing)

        # Create render window
        self.tkrw = vtkTkRenderWidget(self.root, width=550, height=450)
        self.tkrw.BindTkRenderWidget()
        renWin = self.tkrw.GetRenderWindow()

        # Create parameter sliders
        #
        prs = tkinter.Scale(self.root, from_=0, to=3.5, res=0.1,
                             orient=HORIZONTAL, label="phi roundness")
        trs = tkinter.Scale(self.root, from_=0, to=3.5, res=0.1,
                             orient=HORIZONTAL, label="theta roundness")
        thicks = tkinter.Scale(self.root, from_=0.01, to=1.0, res=0.01,
                             orient=HORIZONTAL, label="thickness")

        # Create check buttons
        #
        toroid = tkinter.IntVar()
        toroid.set(0)
        doTexture = tkinter.IntVar()
        doTexture.set(0)

        rframe = tkinter.Frame(self.root)
        torbut = tkinter.Checkbutton(rframe, text="Toroid", variable=toroid)
        texbut = tkinter.Checkbutton(rframe, text="Texture", variable=doTexture)

        # Put it all together
        #
        torbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S)
        texbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S)

        self.tkrw.grid(sticky=N+E+W+S, columnspan=2)
        rframe.grid(sticky=N+E+W+S)
        thicks.grid(sticky=N+S+E+W, padx=10, ipady=5, row=1, column=1)
        prs.grid(sticky=N+E+W+S, padx=10, ipady=5, row = 2, column = 0)
        trs.grid(sticky=N+E+W+S, padx=10, ipady=5, row = 2, column = 1)
        tkinter.Pack.propagate(rframe,NO)

        prs.set(1.0)
        trs.set(0.7)
        thicks.set(0.3)
        toroid.set(1)
        doTexture.set(0)

        # Create pipeline
        #
        squad = vtk.vtkSuperquadricSource()
        squad.SetPhiResolution(20)
        squad.SetThetaResolution(25)

        pnmReader = vtk.vtkPNMReader()
        pnmReader.SetFileName(VTK_DATA_ROOT + "/Data/earth.ppm")
        atext = vtk.vtkTexture()
        atext.SetInputConnection(pnmReader.GetOutputPort())
        atext.InterpolateOn()

        appendSquads = vtk.vtkAppendPolyData()
        appendSquads.AddInputConnection(squad.GetOutputPort())

        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(squad.GetOutputPort())
        mapper.ScalarVisibilityOff()
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        actor.SetTexture(atext)
        actor.GetProperty().SetDiffuseColor(0.5, 0.8, 0.8)
        actor.GetProperty().SetAmbient(0.2)
        actor.GetProperty().SetAmbientColor(0.2, 0.2, 0.2)

        squad.SetPhiRoundness(prs.get())
        squad.SetThetaRoundness(trs.get())
        squad.SetToroidal(toroid.get())
        squad.SetThickness(thicks.get())
        squad.SetScale(1, 1, 1)
        SetTexture(actor, atext, renWin)

        # Create renderer stuff
        #
        ren = vtk.vtkRenderer()
        ren.SetAmbient(1.0, 1.0, 1.0)
        renWin.AddRenderer(ren)


        # Add the actors to the renderer, set the background and size
        #
        ren.AddActor(actor)
        ren.SetBackground(0.25, 0.2, 0.2)
        ren.ResetCamera()
        ren.GetActiveCamera().Zoom(1.2)
        ren.GetActiveCamera().Elevation(40)
        ren.GetActiveCamera().Azimuth(-20)

        # Associate the functions with the sliders and check buttons.
        #
        prs.config(command=partial(SetPhi, squad, self.tkrw))
        trs.config(command=partial(SetTheta, squad, self.tkrw))
        thicks.config(command=partial(SetThickness,squad, self.tkrw))
        torbut.config(command=partial(SetToroid, squad, thicks, self.tkrw))
        texbut.config(command=partial(SetTexture, actor, atext, self.tkrw))
Esempio n. 10
0
#!/usr/bin/env python
import vtk
from vtk.test import Testing
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

# A script to test the stencil filter by using one image
# to stencil another
# Image pipeline
reader1 = vtk.vtkBMPReader()
reader1.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/masonry.bmp")
reader2 = vtk.vtkPNMReader()
reader2.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/B.pgm")
translate = vtk.vtkImageTranslateExtent()
translate.SetInputConnection(reader2.GetOutputPort())
translate.SetTranslation(60,60,0)
imageToStencil = vtk.vtkImageToImageStencil()
imageToStencil.SetInputConnection(translate.GetOutputPort())
imageToStencil.ThresholdBetween(0,127)
# silly stuff to increase coverage
imageToStencil.SetUpperThreshold(imageToStencil.GetUpperThreshold())
imageToStencil.SetLowerThreshold(imageToStencil.GetLowerThreshold())
stencil = vtk.vtkImageStencil()
stencil.SetInputConnection(reader1.GetOutputPort())
stencil.SetBackgroundValue(0)
stencil.ReverseStencilOn()
stencil.SetStencilConnection(imageToStencil.GetOutputPort())
viewer = vtk.vtkImageViewer()
viewer.SetInputConnection(stencil.GetOutputPort())
viewer.SetColorWindow(255.0)
viewer.SetColorLevel(127.5)
Esempio n. 11
0
def main(argv):
  if len(argv) < 2:
    print "usage: ",argv[0]," <data> [flat]"
    exit(1)
  data_fn = argv[1]
  flat = False
  if len(argv) > 2:
    flat = True
  
  mapper = vtk.vtkPolyDataMapper()
  if data_fn.find('.vtk') != -1:
    reader = vtk.vtkPolyDataReader()
    reader.SetFileName(data_fn)
    reader.Update()
    data = reader.GetOutput()
    trianglize = vtk.vtkDelaunay2D()
    trianglize.SetInput(data)
    trianglize.Update()
    mapper.SetInputConnection(trianglize.GetOutputPort())
  elif data_fn.find('.pgm') != -1:
    reader = vtk.vtkPNMReader()
    reader.SetFileName(data_fn)
    reader.Update()
    data = reader.GetOutput()
    geometry = vtk.vtkImageDataGeometryFilter()
    geometry.SetInputConnection(reader.GetOutputPort())
    geometry.Update()
    if flat:
      merge = vtk.vtkMergeFilter()
      merge.SetGeometry(geometry.GetOutput())
      merge.SetScalars(data)
      mapper.SetInputConnection(merge.GetOutputPort())
    else:
      warp = vtk.vtkWarpScalar()
      warp.SetInputConnection(geometry.GetOutputPort())
      warp.SetScaleFactor(0.3) # looked good
      warp.Update()
      merge = vtk.vtkMergeFilter()
      merge.SetGeometry(warp.GetOutput())
      merge.SetScalars(data)
      mapper.SetInputConnection(merge.GetOutputPort())
  elif data_fn.find('.dcm') != -1:
    reader =vtk.vtkDICOMImageReader()
    reader.SetFileName(data_fn)
    reader.Update()
    data = reader.GetOutput()
    geometry = vtk.vtkImageDataGeometryFilter()
    geometry.SetInput(data)
    geometry.Update()
    if flat:
      mapper.SetInputConnection(geometry.GetOutputPort())
    else:
      warp = vtk.vtkWarpScalar()
      warp.SetInputConnection(geometry.GetOutputPort())
      warp.Update()
      mapper.SetInputConnection(warp.GetOutputPort())
  else:
    print "unrecognized data file:",data_fn
    exit(1)
  
  lut = vtk.vtkLookupTable()
  lut.SetNumberOfColors(10)
  lut.SetHueRange(0.5,0.3)
  lut.SetSaturationRange(0.6,0.5)
  lut.SetValueRange(1.0,0.5)
  lut.Build()

  mapper.ImmediateModeRenderingOff()
  mapper.SetLookupTable(lut)
 
  actor = vtk.vtkActor()
  actor.SetMapper(mapper)
  
  renderer = vtk.vtkRenderer()
  renderWindow = vtk.vtkRenderWindow()
  renderWindow.SetSize(700,700)
  renderWindow.AddRenderer(renderer)
 
  renderer.AddActor(actor)
  renderer.SetBackground(0.4,0.3,0.2)

  interactor = vtk.vtkRenderWindowInteractor()
  interactor.SetRenderWindow(renderWindow)
  
  renderWindow.Render()
  interactor.Start()
Esempio n. 12
0
def read_png(png_file):
    png_reader = vtk.vtkPNMReader()
    png_reader.SetFileName(png_file)
    return png_reader
Esempio n. 13
0
def main():
    # colors = vtk.vtkNamedColors()

    fileName1 = "C:\\Users\\chenjiaxing\\Desktop\\VTKTextBook\\Data\\Frog\\frog"
    fileName2 = "C:\\Users\\chenjiaxing\\Desktop\\VTKTextBook\\Data\\Frog\\frogTissue"
    rows = 500
    columns = 470
    sliceNumber = 33
    start_slice = 1
    end_slice = 138
    pixel_size = 1
    spacing = 1.5
    endX = rows - 1
    endY = columns - 1
    endZ = end_slice - 1

    sliceOrder = SliceOrder()

    # Now create the RenderWindow, Renderer and Interactor
    #
    ren1 = vtk.vtkRenderer()
    ren2 = vtk.vtkRenderer()
    ren3 = vtk.vtkRenderer()
    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(ren1)
    renWin.AddRenderer(ren2)
    renWin.AddRenderer(ren3)

    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)

    #greyReader = vtk.vtkMetaImageReader()
    #greyReader.SetFileName(fileName1)
    #greyReader.Update()
    greyReader = vtk.vtkPNMReader()
    greyReader.SetFilePrefix(fileName1)
    greyReader.SetDataSpacing(pixel_size, pixel_size, spacing)
    greyReader.SetDataVOI(0, endX, 0, endY, sliceNumber, sliceNumber)
    greyReader.SetDataExtent(0, endX, 0, endY, sliceNumber, sliceNumber)
    greyReader.DebugOn()

    greyPadder = vtk.vtkImageConstantPad()
    greyPadder.SetInputConnection(greyReader.GetOutputPort())
    greyPadder.SetOutputWholeExtent(0, 511, 0, 511, 0, 0)
    greyPadder.SetConstant(0)

    greyPlane = vtk.vtkPlaneSource()

    greyTransform = vtk.vtkTransformPolyDataFilter()
    greyTransform.SetTransform(sliceOrder["hfsi"])
    greyTransform.SetInputConnection(greyPlane.GetOutputPort())

    greyNormals = vtk.vtkPolyDataNormals()
    greyNormals.SetInputConnection(greyTransform.GetOutputPort())
    greyNormals.FlipNormalsOff()

    wllut = vtk.vtkWindowLevelLookupTable()
    wllut.SetWindow(255)
    wllut.SetLevel(128)
    wllut.SetTableRange(0, 255)
    wllut.Build()

    greyMapper = vtk.vtkPolyDataMapper()
    greyMapper.SetInputConnection(greyPlane.GetOutputPort())

    greyTexture = vtk.vtkTexture()
    greyTexture.SetInputConnection(greyPadder.GetOutputPort())
    greyTexture.SetLookupTable(wllut)
    greyTexture.SetColorModeToMapScalars()
    greyTexture.InterpolateOn()

    greyActor = vtk.vtkActor()
    greyActor.SetMapper(greyMapper)
    greyActor.SetTexture(greyTexture)

    segmentReader = vtk.vtkPNMReader()
    segmentReader.SetFilePrefix(fileName2)
    segmentReader.SetDataSpacing(pixel_size, pixel_size, spacing)
    segmentReader.SetDataVOI(0, endX, 0, endY, sliceNumber, sliceNumber)
    segmentReader.SetDataExtent(0, endX, 0, endY, sliceNumber, sliceNumber)

    segmentReader.Update()

    segmentPadder = vtk.vtkImageConstantPad()
    segmentPadder.SetInputConnection(segmentReader.GetOutputPort())
    segmentPadder.SetOutputWholeExtent(0, 511, 0, 511, 0, 0)
    segmentPadder.SetConstant(0)

    segmentPlane = vtk.vtkPlaneSource()

    segmentTransform = vtk.vtkTransformPolyDataFilter()
    segmentTransform.SetTransform(sliceOrder["hfsi"])
    segmentTransform.SetInputConnection(segmentPlane.GetOutputPort())

    segmentNormals = vtk.vtkPolyDataNormals()
    segmentNormals.SetInputConnection(segmentTransform.GetOutputPort())
    segmentNormals.FlipNormalsOn()

    colorLut = CreateFrogLut()

    segmentMapper = vtk.vtkPolyDataMapper()
    segmentMapper.SetInputConnection(segmentPlane.GetOutputPort())

    segmentTexture = vtk.vtkTexture()
    segmentTexture.SetInputConnection(segmentPadder.GetOutputPort())
    segmentTexture.SetLookupTable(colorLut)
    segmentTexture.SetColorModeToMapScalars()
    segmentTexture.InterpolateOff()

    segmentActor = vtk.vtkActor()
    segmentActor.SetMapper(segmentMapper)
    segmentActor.SetTexture(segmentTexture)

    segmentOverlayActor = vtk.vtkActor()
    segmentOverlayActor.SetMapper(segmentMapper)
    segmentOverlayActor.SetTexture(segmentTexture)

    segmentOverlayActor.GetProperty().SetOpacity(.5)
    ren1.SetBackground(0, 0, 0)
    ren1.SetViewport(0, .5, .5, 1)
    renWin.SetSize(640, 480)
    ren1.AddActor(greyActor)

    ren2.SetBackground(0, 0, 0)
    ren2.SetViewport(.5, .5, 1, 1)
    ren2.AddActor(segmentActor)

    cam1 = vtk.vtkCamera()
    cam1.SetViewUp(0, -1, 0)
    cam1.SetPosition(0, 0, -1)
    ren1.SetActiveCamera(cam1)
    ren1.ResetCamera()
    cam1.SetViewUp(0, -1, 0)
    cam1.SetPosition(0.0554068, -0.0596001, -0.491383)
    cam1.SetFocalPoint(0.0554068, -0.0596001, 0)
    ren1.ResetCameraClippingRange()

    ren3.AddActor(greyActor)
    ren3.AddActor(segmentOverlayActor)
    segmentOverlayActor.SetPosition(0, 0, -.01)

    ren3.SetBackground(0, 0, 0)
    ren3.SetViewport(0, 0, 1, .5)

    ren2.SetActiveCamera(ren1.GetActiveCamera())
    ren3.SetActiveCamera(ren1.GetActiveCamera())

    renWin.Render()
    iren.Start()
 def __init__(self):
     vtkImageReaderBase.vtkImageReaderBase.__init__(self)
     self.SetImageReader(vtk.vtkPNMReader())
Esempio n. 15
0
START_SLICE = 1
END_SLICE = 138
PIXEL_SIZE = 1
SPACING = 1.5
centerX = (COLUMNS / 2)
centerY = (ROWS / 2)
centerZ = (END_SLICE - START_SLICE) / 2
endX = (COLUMNS - 1)
endY = (ROWS - 1)
endZ = (END_SLICE - 1)
originX = (COLUMNS / 2.0) * PIXEL_SIZE * -1.0
originY = (ROWS / 2.0) * PIXEL_SIZE * -1.0
SLICE_ORDER = "hfsi"

greyReader = vtk.vtkPNMReader()
greyReader.SetFilePrefix(GREYSTUDY)
greyReader.SetDataSpacing(PIXEL_SIZE, PIXEL_SIZE, SPACING)
greyReader.SetDataVOI(0, endX, 0, endY, sliceNumber, sliceNumber)
greyReader.SetDataExtent(0, endX, 0, endY, sliceNumber, sliceNumber)
greyReader.DebugOn()

greyPadder = vtk.vtkImageConstantPad()
greyPadder.SetInputConnection(greyReader.GetOutputPort())
greyPadder.SetOutputWholeExtent(0, 511, 0, 511, 0, 0)
greyPadder.SetConstant(0)

greyPlane = vtk.vtkPlaneSource()

greyTransform = vtk.vtkTransformPolyDataFilter()
if SLICE_ORDER == "si":
## begin main 

# check that the required number of parameters were passed
if len(sys.argv) < 6:
    print "usage: PNM2StructuredPoints.py <PNM basename> <image width> <image height> <number of images> <vtkStructuredPoints file>"
    sys.exit(1)

# get the args
PNMbase = sys.argv[1]
imgW = string.atoi(sys.argv[2])
imgH = string.atoi(sys.argv[3])
numImg = string.atoi(sys.argv[4])
vtkFile = sys.argv[5]

# reader for slices that make up the volume
volread = vtk.vtkPNMReader()
volread.SetDataExtent([1, imgW, 1, imgH, 1, numImg])
volread.SetDataByteOrderToLittleEndian()
volread.SetFilePrefix(PNMbase)

# the actual volume
vol = volread.GetOutput()

# writer to write out the slices
volwrite = vtk.vtkStructuredPointsWriter()
volwrite.SetFileName(vtkFile)
volwrite.SetInput(vol)
volwrite.SetFileTypeToBinary()
volwrite.Write()

Esempio n. 17
0
VTK_DATA_ROOT = vtkGetDataRoot()

# Create the RenderWindow, Renderer
#
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
aPlane = vtk.vtkPlaneSource()
aPlane.SetCenter(-100,-100,-100)
aPlane.SetOrigin(-100,-100,-100)
aPlane.SetPoint1(-90,-100,-100)
aPlane.SetPoint2(-100,-90,-100)
aPlane.SetNormal(0,-1,1)
imageIn = vtk.vtkPNMReader()
imageIn.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/earth.ppm")
texture = vtk.vtkTexture()
texture.SetInputConnection(imageIn.GetOutputPort())
texturePlane = vtk.vtkTextureMapToPlane()
texturePlane.SetInputConnection(aPlane.GetOutputPort())
texturePlane.AutomaticPlaneGenerationOn()
planeMapper = vtk.vtkPolyDataMapper()
planeMapper.SetInputConnection(texturePlane.GetOutputPort())
texturedPlane = vtk.vtkActor()
texturedPlane.SetMapper(planeMapper)
texturedPlane.SetTexture(texture)
# Add the actors to the renderer, set the background and size
#
ren1.AddActor(texturedPlane)
#ren1 SetBackground 1 1 1
Esempio n. 18
0
    def SetUp(self):
        '''
        Set up squadViewer
        '''
        def OnClosing():
            self.root.quit()

        def SetPhi(squad, win, phi):
            squad.SetPhiRoundness(float(phi))
            win.Render()

        def SetTheta(squad, win, theta):
            squad.SetThetaRoundness(float(theta))
            win.Render()

        def SetThickness(squad, win, thickness):
            squad.SetThickness(float(thickness))
            win.Render()

        def SetTexture(actor, texture, win):
            if doTexture.get():
                actor.SetTexture(texture)
            else:
                actor.SetTexture(None)
            win.Render()

        def SetToroid(squad, scale, win):
            squad.SetToroidal(toroid.get())
            if toroid.get():
                scale.config(state=NORMAL, fg='black')
            else:
                scale.config(state=DISABLED, fg='gray')
            win.Render()

        self.root = Tkinter.Tk()
        self.root.title("superquadric viewer")
        # Define what to do when the user explicitly closes a window.
        self.root.protocol("WM_DELETE_WINDOW", OnClosing)

        # Create render window
        self.tkrw = vtkTkRenderWidget(self.root, width=550, height=450)
        self.tkrw.BindTkRenderWidget()
        self.renWin = self.tkrw.GetRenderWindow()

        # Create parameter sliders
        #
        prs = Tkinter.Scale(self.root,
                            from_=0,
                            to=3.5,
                            res=0.1,
                            orient=HORIZONTAL,
                            label="phi roundness")
        trs = Tkinter.Scale(self.root,
                            from_=0,
                            to=3.5,
                            res=0.1,
                            orient=HORIZONTAL,
                            label="theta roundness")
        thicks = Tkinter.Scale(self.root,
                               from_=0.01,
                               to=1.0,
                               res=0.01,
                               orient=HORIZONTAL,
                               label="thickness")

        # Create check buttons
        #
        toroid = Tkinter.IntVar()
        toroid.set(0)
        doTexture = Tkinter.IntVar()
        doTexture.set(0)

        rframe = Tkinter.Frame(self.root)
        torbut = Tkinter.Checkbutton(rframe, text="Toroid", variable=toroid)
        texbut = Tkinter.Checkbutton(rframe,
                                     text="Texture",
                                     variable=doTexture)

        # Put it all together
        #
        torbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S)
        texbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S)

        self.tkrw.grid(sticky=N + E + W + S, columnspan=2)
        rframe.grid(sticky=N + E + W + S)
        thicks.grid(sticky=N + S + E + W, padx=10, ipady=5, row=1, column=1)
        prs.grid(sticky=N + E + W + S, padx=10, ipady=5, row=2, column=0)
        trs.grid(sticky=N + E + W + S, padx=10, ipady=5, row=2, column=1)
        Tkinter.Pack.propagate(rframe, NO)

        prs.set(1.0)
        trs.set(0.7)
        thicks.set(0.3)
        toroid.set(1)
        doTexture.set(0)

        # Create pipeline
        #
        squad = vtk.vtkSuperquadricSource()
        squad.SetPhiResolution(20)
        squad.SetThetaResolution(25)

        pnmReader = vtk.vtkPNMReader()
        pnmReader.SetFileName(VTK_DATA_ROOT + "/Data/earth.ppm")
        atext = vtk.vtkTexture()
        atext.SetInputConnection(pnmReader.GetOutputPort())
        atext.InterpolateOn()

        appendSquads = vtk.vtkAppendPolyData()
        appendSquads.AddInputConnection(squad.GetOutputPort())

        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(squad.GetOutputPort())
        mapper.ScalarVisibilityOff()
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        actor.SetTexture(atext)
        actor.GetProperty().SetDiffuseColor(0.5, 0.8, 0.8)
        actor.GetProperty().SetAmbient(0.2)
        actor.GetProperty().SetAmbientColor(0.2, 0.2, 0.2)

        squad.SetPhiRoundness(prs.get())
        squad.SetThetaRoundness(trs.get())
        squad.SetToroidal(toroid.get())
        squad.SetThickness(thicks.get())
        squad.SetScale(1, 1, 1)
        SetTexture(actor, atext, self.renWin)

        # Create renderer stuff
        #
        ren = vtk.vtkRenderer()
        ren.SetAmbient(1.0, 1.0, 1.0)
        self.renWin.AddRenderer(ren)

        # Add the actors to the renderer, set the background and size
        #
        ren.AddActor(actor)
        ren.SetBackground(0.25, 0.2, 0.2)
        ren.ResetCamera()
        ren.GetActiveCamera().Zoom(1.2)
        ren.GetActiveCamera().Elevation(40)
        ren.GetActiveCamera().Azimuth(-20)

        # Associate the functions with the sliders and check buttons.
        #
        prs.config(command=partial(SetPhi, squad, self.renWin))
        trs.config(command=partial(SetTheta, squad, self.renWin))
        thicks.config(command=partial(SetThickness, squad, self.renWin))
        torbut.config(command=partial(SetToroid, squad, thicks, self.renWin))
        texbut.config(command=partial(SetTexture, actor, atext, self.renWin))
Esempio n. 19
0
#!/usr/bin/env python
import vtk
from vtk.test import Testing
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

# A script to test the mask filter.
#  replaces a circle with a color
# Image pipeline
reader = vtk.vtkPNMReader()
reader.ReleaseDataFlagOff()
reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/earth.ppm")
reader.Update()
sphere = vtk.vtkImageEllipsoidSource()
sphere.SetWholeExtent(0,511,0,255,0,0)
sphere.SetCenter(128,128,0)
sphere.SetRadius(80,80,1)
sphere.Update()
mask = vtk.vtkImageMask()
mask.SetImageInputData(reader.GetOutput())
mask.SetMaskInputData(sphere.GetOutput())
mask.SetMaskedOutputValue(100,128,200)
mask.NotMaskOn()
mask.ReleaseDataFlagOff()
mask.Update()
sphere2 = vtk.vtkImageEllipsoidSource()
sphere2.SetWholeExtent(0,511,0,255,0,0)
sphere2.SetCenter(328,128,0)
sphere2.SetRadius(80,50,1)
sphere2.Update()
# Test the wrapping of the output masked value
def read_png(png_file):
    png_reader = vtk.vtkPNMReader()
    png_reader.SetFileName(png_file)
    return png_reader
Esempio n. 21
0
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
tss = vtk.vtkTexturedSphereSource()
tss.SetThetaResolution(18)
tss.SetPhiResolution(9)
earthMapper = vtk.vtkPolyDataMapper()
earthMapper.SetInputConnection(tss.GetOutputPort())
earthActor = vtk.vtkActor()
earthActor.SetMapper(earthMapper)
# load in the texture map
#
atext = vtk.vtkTexture()
pnmReader = vtk.vtkPNMReader()
pnmReader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/earth.ppm")
atext.SetInputConnection(pnmReader.GetOutputPort())
atext.InterpolateOn()
earthActor.SetTexture(atext)
# create a earth source and actor
#
es = vtk.vtkEarthSource()
es.SetRadius(0.501)
es.SetOnRatio(2)
earth2Mapper = vtk.vtkPolyDataMapper()
earth2Mapper.SetInputConnection(es.GetOutputPort())
earth2Actor = vtk.vtkActor()
earth2Actor.SetMapper(earth2Mapper)
# Add the actors to the renderer, set the background and size
#
Esempio n. 22
0
def main(argv):
  if len(argv) < 2:
    print "usage: ",argv[0]," <data>"
    exit(1)
  data_fn = argv[1]
  
  mapper = vtk.vtkPolyDataMapper()
  if data_fn.find('.vtk') != -1:
    reader = vtk.vtkPolyDataReader()
    reader.SetFileName(data_fn)
    reader.Update()
    data = reader.GetOutput()
    trianglize = vtk.vtkDelaunay2D()
    trianglize.SetInput(data)
    trianglize.Update()
    mapper.SetInputConnection(trianglize.GetOutputPort())
  elif data_fn.find('.pgm') != -1:
    reader = vtk.vtkPNMReader()
    reader.SetFileName(data_fn)
    reader.Update()
    data = reader.GetOutput()
    trianglize = vtk.vtkImageDataGeometryFilter()
    trianglize.SetInput(data)
    trianglize.Update()
    warp = vtk.vtkWarpScalar()
    warp.SetScaleFactor(0.2) # arbitrary choice
    warp.SetInputConnection(trianglize.GetOutputPort())
    warp.Update()
    mapper.SetInputConnection(warp.GetOutputPort())
  elif data_fn.find('.dcm') != -1:
    reader =vtk.vtkDICOMImageReader()
    reader.SetFileName(data_fn)
    reader.Update()
    data = reader.GetOutput()
    trianglize = vtk.vtkImageDataGeometryFilter()
    trianglize.SetInput(data)
    trianglize.Update()
    warp = vtk.vtkWarpScalar()
    #warp.SetScaleFactor(0.2) # arbitrary choice
    warp.SetInputConnection(trianglize.GetOutputPort())
    warp.Update()
    mapper.SetInputConnection(warp.GetOutputPort())
  else:
    print "unrecognized data file:",data_fn
    exit(1)
  
 
  actor = vtk.vtkActor()
  actor.SetMapper(mapper)
  
  renderer = vtk.vtkRenderer()
  renderWindow = vtk.vtkRenderWindow()
  renderWindow.SetSize(700,700)
  renderWindow.AddRenderer(renderer)
  renderWindow.SetWindowName("heightfield")
 
  renderer.AddActor(actor)
  renderer.SetBackground(0.4,0.3,0.2)

  interactor = vtk.vtkRenderWindowInteractor()
  interactor.SetRenderWindow(renderWindow)
  
  renderWindow.Render()
  interactor.Start()
Esempio n. 23
0
#!/usr/bin/env python
import vtk
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

# Create the RenderWindow, Renderer and both Actors
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.SetMultiSamples(0)
renWin.AddRenderer(ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# load in the texture map
#
imageIn = vtk.vtkPNMReader()
imageIn.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/earth.ppm")
il = vtk.vtkImageLuminance()
il.SetInputConnection(imageIn.GetOutputPort())
ic = vtk.vtkImageCast()
ic.SetOutputScalarTypeToFloat()
ic.SetInputConnection(il.GetOutputPort())
# smooth the image
gs = vtk.vtkImageGaussianSmooth()
gs.SetInputConnection(ic.GetOutputPort())
gs.SetDimensionality(2)
gs.SetRadiusFactors(1, 1, 0)
# gradient the image
imgGradient = vtk.vtkImageGradient()
imgGradient.SetInputConnection(gs.GetOutputPort())
imgGradient.SetDimensionality(2)
imgMagnitude = vtk.vtkImageMagnitude()
Esempio n. 24
0
  def run(self):

    # Create reader
    self.jpeg = vtk.vtkJPEGReader() # read jpegs
    
    self.ppm =  vtk.vtkPNMReader()  # read pnm, ppm
    
    self.iajpeg = vtk.vtkImageActor()
    self.iajpeg.SetInput(self.jpeg.GetOutput())
    self.iajpeg.InterpolateOff()
    
    self.iappm = vtk.vtkImageActor()
    self.iappm.SetInput(self.ppm.GetOutput())
    self.iappm.InterpolateOff()
    
    # Create the RenderWindow, Renderer and both Actors
    self.ren    = vtk.vtkRenderer()
    # Add the actors to the renderer, set the background and size
    self.ren.AddActor(self.iajpeg)
    self.ren.AddActor(self.iappm)
    self.ren.SetBackground(0.1, 0.2, 0.4)

    # create a text actor
    txt = vtk.vtkTextActor()
    txt.SetInput("Hello World!")
    txtprop=txt.GetTextProperty()
    txtprop.SetFontFamilyToArial()
    txtprop.SetFontSize(18)
    txtprop.SetColor(1,1,1)
    txt.SetDisplayPosition(20,30)
    self.txt=txt
    # assign actor to the renderer
    self.ren.AddActor(txt)


    self.renWin = vtk.vtkRenderWindow()
    self.renWin.AddRenderer(self.ren)
    self.renWin.SetSize(500, 500)

    self.iren   = vtk.vtkRenderWindowInteractor()
    self.iren.SetRenderWindow(self.renWin)
    self.iren.Initialize()

    outval=self.readImage()

    if outval=="error":
      print " -- NO images found: Please check your input"
      return
    renderSize=self.renWin.GetSize()

    self.renWin.Render()
    self.cam1 = self.ren.GetActiveCamera()
    self.cam1.ParallelProjectionOn();
    self.ren.ResetCameraClippingRange()
    
    self.resetCamera()

    # Create an image interactor style and associate it with the
    # interactive renderer. Then assign some callbacks with the
    # appropriate events. THe callbacks are implemented as Python functions.
    self.interactor = vtk.vtkInteractorStyleImage()
    self.iren.SetInteractorStyle(self.interactor)
    ktag=self.interactor.HasObserver("CharEvent")
    self.interactor.RemoveObserver(ktag)
    self.interactor.AddObserver("CharEvent", self.KeyPressed)


    self.renWin.Render()
    self.iren.Start()
    # saving qcfile at the end of the loop
    self.saving()
Esempio n. 25
0
model.GetCellData().SetScalars(faceColors)
model.GetPointData().SetScalars(vertexColors)
ballTC = vtk.vtkTextureMapToSphere()
ballTC.SetInputData(model)
lut = vtk.vtkLookupTable()
lut.SetNumberOfColors(3)
lut.Build()
lut.SetTableValue(0,0,0,0,1)
lut.SetTableValue(1,1,.3,.3,1)
lut.SetTableValue(2,.8,.8,.9,1)
mapper = vtk.vtkDataSetMapper()
mapper.SetInputConnection(ballTC.GetOutputPort())
mapper.SetScalarModeToUseCellData()
mapper.SetLookupTable(lut)
mapper.SetScalarRange(0,2)
earth = vtk.vtkPNMReader()
earth.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/earth.ppm")
texture = vtk.vtkTexture()
texture.SetInputConnection(earth.GetOutputPort())
soccerBall = vtk.vtkActor()
soccerBall.SetMapper(mapper)
soccerBall.SetTexture(texture)
# Add the actors to the renderer, set the background and size
#
ren1.AddActor(soccerBall)
ren1.SetBackground(0.1,0.2,0.4)
renWin.SetSize(300,300)
ren1.GetActiveCamera().SetPosition(4.19682,4.65178,6.23545)
ren1.GetActiveCamera().SetFocalPoint(0,0,0)
ren1.GetActiveCamera().SetViewAngle(21.4286)
ren1.GetActiveCamera().SetViewUp(0.451577,-0.833646,0.317981)
Esempio n. 26
0
    def __init__(self,imagetype,prefix,extent):

        if imagetype == "jpg":
            reader = vtk.vtkJPEGReader()
        elif imagetype == "pnm":
            reader = vtk.vtkPNMReader()
        elif imagetype == "tif":
            reader = vtk.vtkTIFFReader()
        # todo: add more image types
        else:
            print "unknown type!"
            sys.exit()

        reader.SetDataExtent(extent)
        #reader.SetFilePrefix(prefix)
        reader.SetFilePattern(prefix)
        reader.SetDataSpacing(1,1,1)
        imageoriginal = reader.GetOutput()

        # pad the image with extra voxels because of vtk off by 1
        # annoyance in calculating image bounds
#         extentcopy = extent[:]
#         for i in xrange(1,7,2):
#             extentcopy[i] += 1
#         padder = vtk.vtkImageConstantPad()
#         padder.SetInput(imageoriginal)
#         padder.SetOutputWholeExtent(extentcopy) 
#         padder.SetConstant(255) # arbitrary
#         self.image = padder.GetOutput()
#         self.image.Update()
        self.image = imageoriginal
        self.image.Update()

        # must use this particular mapper so color images work, also
        # handles off by 1 annoyance in a slightly better way.
        mapper = vtk.vtkFixedPointVolumeRayCastMapper()
        mapper.IntermixIntersectingGeometryOn()
        min_extent = min(extent[1:6:2])
        # todo: can use a built in function for this
        # for very small images we need to reset the sample distance
        if min_extent < 50:
            mapper.SetSampleDistance(float(min_extent)/100)
            mapper.SetInteractiveSampleDistance(float(min_extent)/50)
        mapper.SetInput(self.image)

        volproperty = vtk.vtkVolumeProperty()
        volproperty.IndependentComponentsOff()

        # we initially set the opacity to a constant value of 1, but
        # we need the function so we can change it later
        self.opacity = vtk.vtkPiecewiseFunction()
        self.opacity.AddSegment(0,1,255,1)

        # the type of color function we use depends on how many
        # components the image has, 3 for a color image, 1 for a black
        # and white image
        num_components = self.image.GetNumberOfScalarComponents()
        
        if num_components == 1:
            color = vtk.vtkPiecewiseFunction()
            color.AddSegment(0,0,255,1)
            volproperty.SetColor(color)
            volproperty.SetScalarOpacity(self.opacity)
        elif num_components == 4:
##             red = vtk.vtkColorTransferFunction()
##             red.AddRGBSegment(0,0,0,0,255,1,0,0)
##             green = vtk.vtkColorTransferFunction()
##             green.AddRGBSegment(0,0,0,0,255,0,1,0)
##             blue = vtk.vtkColorTransferFunction()
##             blue.AddRGBSegment(0,0,0,0,255,0,0,1)
##             volproperty.SetColor(0,red)
##             volproperty.SetColor(1,green)
##             volproperty.SetColor(2,blue)
            volproperty.SetScalarOpacity(self.opacity)
##             volproperty.SetScalarOpacity(1,self.opacity)
##             volproperty.SetScalarOpacity(2,self.opacity)
        else:
            pass
        print num_components

        volume = vtk.vtkVolume()
        volume.SetMapper(mapper)
        volume.SetProperty(volproperty)

        self.ren = vtk.vtkRenderer()
        self.ren.AddActor(volume)
        # on mac, this shows only the cone
        #self.DrawCone()
        #print self.ren.VisibleActorCount()
        #print self.ren.VisibleVolumeCount()
        self.ren.ResetCamera()