# Cylinder

VTKExamples/Tcl//Cylinder

### Description

This example demonstrate a minimal visualization created with VTK.

See also C++, Java and Cylinder.

### Code

Cylinder.tcl

    #
    # This simple example shows how to do basic rendering and pipeline
    # creation.
    #
    # We start off by loading some Tcl modules. One is the basic VTK library;
    # the second is a package for rendering, and the last includes a set
    # of color definitions.
    #
    package require vtk
    package require vtkinteraction
    package require vtktesting

    # This creates a polygonal cylinder model with eight circumferential facets.
    #
    vtkCylinderSource cylinder
        cylinder SetResolution 8

    # The mapper is responsible for pushing the geometry into the graphics
    # library. It may also do color mapping, if scalars or other attributes
    # are defined.
    #
    vtkPolyDataMapper cylinderMapper
        cylinderMapper SetInputConnection [cylinder GetOutputPort]

    # The actor is a grouping mechanism: besides the geometry (mapper), it
    # also has a property, transformation matrix, and/or texture map.
    # Here we set its color and rotate it -22.5 degrees.
    vtkActor cylinderActor
        cylinderActor SetMapper cylinderMapper
        eval [cylinderActor GetProperty] SetColor $tomato
        cylinderActor RotateX  30.0
        cylinderActor RotateY -45.0

    # Create the graphics structure. The renderer renders into the
    # render window. The render window interactor captures mouse events
    # and will perform appropriate camera or actor manipulation
    # depending on the nature of the events.
    #
    vtkRenderer ren1
    vtkRenderWindow renWin
        renWin AddRenderer ren1
    vtkRenderWindowInteractor iren
        iren SetRenderWindow renWin

    # Add the actors to the renderer, set the background and size
    #
    ren1 AddActor cylinderActor
    ren1 SetBackground 0.1 0.2 0.4
    renWin SetSize 200 200

    # The next line associates a Tcl proc with a "keypress-u" event
    # in the rendering window. In this case the proc deiconifies the
    # .vtkInteract Tk form that was defined when we loaded
    # "package require vtkinteraction".
    iren AddObserver UserEvent {wm deiconify .vtkInteract}

    # This allows the interactor to initalize itself. It has to be
    # called before an event loop. In this example, we allow Tk to
    # start the event loop (this is done automatically by Tk after
    # the user script is executed).
    iren Initialize

    # We'll zoom in a little by accessing the camera and invoking a "Zoom"
    # method on it.
    ren1 ResetCamera
    [ren1 GetActiveCamera] Zoom 1.5
    renWin Render

    # prevent the tk window from showing up then start the event loop
    wm withdraw .
    iren Start