Hi Alex,<br><br>You&#39;ll need to view it as a volume, not a vtkImageActor. vtkImageActor is purely 2D.<br><br>Take a look at this example (if you don&#39;t have vtkSmartVolumeMapper, you can use vtkFixedPointVolumeRayCastMapper or vtkGPURayCastMapper): <a href="http://www.vtk.org/Wiki/VTK/Examples/Cxx/VolumeRendering/SmartVolumeMapper">http://www.vtk.org/Wiki/VTK/Examples/Cxx/VolumeRendering/SmartVolumeMapper</a><br>
<br>Regards,<br>Shash<br><br><div class="gmail_quote">On Thu, Sep 23, 2010 at 2:50 PM, Alex Southern <span dir="ltr">&lt;<a href="mailto:mrapsouthern@gmail.com">mrapsouthern@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
 Hi,<br>
<br>
Im trying to view a regular 3D grid of points using vtkImageData.   Each point is a single scalar that is mapped to a color.<br>
I&#39;ve included the complete source code and cmakelists.txt file of a simplified problem scenario.<br>
<br>
Basically, can someone confirm that they also do not see a cuboid but instead a 2D plane, why is this?<br>
<br>
In addition,  the render window is not updated after each iteration as I intended. What am I doing wrong?<br>
<br>
(Note the source is called ImageSlicing.cpp, but I am not at the stage of the slicing yet, I want to view the whole 3D pressure field first)<br>
<br>
Thanks<br>
Alex<br>
<br>
// ----------- CmakeLists.txt ------------------<br>
<br>
cmake_minimum_required(VERSION 2.6)<br>
<br>
PROJECT(ImageSlicing)<br>
<br>
FIND_PACKAGE(VTK REQUIRED)<br>
INCLUDE(${VTK_USE_FILE})<br>
<br>
ADD_EXECUTABLE(ImageSlicing ImageSlicing.cpp)<br>
TARGET_LINK_LIBRARIES(ImageSlicing vtkHybrid vtkWidgets)<br>
<br>
//------------------------------ End Cmakelists.txt<br>
<br>
// --------------------------Start ImageSlicing.cpp ----------------------------------------<br>
#include &quot;vtkSmartPointer.h&quot;<br>
#include &quot;vtkImageReslice.h&quot;<br>
#include &quot;vtkLookupTable.h&quot;<br>
#include &quot;vtkImageMapToColors.h&quot;<br>
#include &quot;vtkImageActor.h&quot;<br>
#include &quot;vtkRenderer.h&quot;<br>
#include &quot;vtkRenderWindow.h&quot;<br>
#include &quot;vtkRenderWindowInteractor.h&quot;<br>
#include &quot;vtkInteractorStyleImage.h&quot;<br>
#include &quot;vtkCommand.h&quot;<br>
#include &quot;vtkImageData.h&quot;<br>
#include &quot;vtkPointData.h&quot;<br>
#include &quot;vtkProperty.h&quot;<br>
#include &quot;vtkFloatArray.h&quot;;<br>
#include &quot;vtkLookupTable.h&quot;;<br>
#include &quot;vtkScalarBarActor.h&quot;;<br>
#include &quot;vtkImageMapToColors.h&quot;;<br>
<br>
int RunMockSimulationStep(int L, int W, int H, int offset1, int offset2, float* p, int numPoints)<br>
{<br>
<br>
        for(int z = 1; z &lt; H-1;z++)<br>
        {<br>
            for(int y = 1; y &lt; W-1;y++)<br>
            {<br>
                for(int x = 1; x &lt; L-1;x++)<br>
                {<br>
                    p[offset1+(z*L*W)+(y*W)+x] = (1.0/6.0)*<br>
                        (p[offset2+((z+1)*L*W)+(y*W)+x] +<br>
                            p[offset2+((z-1)*L*W)+(y*W)+x] +<br>
                                p[offset2+(z*L*W)+((y+1)*W)+x] +<br>
                                    p[offset2+(z*L*W)+((y-1)*W)+x] +<br>
                                        p[offset2+(z*L*W)+(y*W)+x+1] +<br>
                                            p[offset2+(z*L*W)+(y*W)+x-1]) -<br>
                                                p[offset1+(z*L*W)+(y*W)+x];<br>
                }<br>
            }<br>
        }<br>
<br>
    return 0;<br>
}<br>
<br>
int main (int argc, char *argv[])<br>
{<br>
<br>
    // Setup Scalar Data Memory<br>
    int L = 100; // Set Length/Width/Height of Pressure grid<br>
    int W = 50;<br>
    int H = 100;<br>
    int numPoints = L*W*H;<br>
    float* pressure;<br>
    pressure = new float [2*numPoints]; // There are two pressure grids; we only want to view the first one though...<br>
    float** viewPressure;<br>
    viewPressure = new float* [numPoints];<br>
<br>
    //Create any required VTK objects<br>
    vtkSmartPointer&lt;vtkFloatArray&gt; vtkPressure = vtkSmartPointer&lt;vtkFloatArray&gt;::New();<br>
    vtkSmartPointer&lt;vtkImageData&gt; imageData = vtkSmartPointer&lt;vtkImageData&gt;::New();<br>
    vtkSmartPointer&lt;vtkLookupTable&gt; table = vtkSmartPointer&lt;vtkLookupTable&gt;::New();<br>
    vtkSmartPointer&lt;vtkImageMapToColors&gt; color = vtkSmartPointer&lt;vtkImageMapToColors&gt;::New();<br>
    vtkSmartPointer&lt;vtkImageActor&gt; imActor = vtkSmartPointer&lt;vtkImageActor&gt;::New();<br>
    vtkSmartPointer&lt;vtkRenderer&gt; ren = vtkSmartPointer&lt;vtkRenderer&gt;::New();<br>
    vtkSmartPointer&lt;vtkRenderWindow&gt; renWin = vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<br>
    vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; iren = vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<br>
<br>
    // Specify the size of the image data<br>
    imageData-&gt;SetDimensions(W,L,H);<br>
    imageData-&gt;SetOrigin(0,0,0);<br>
    imageData-&gt;SetSpacing(1.0,1.0,1.0);<br>
    imageData-&gt;SetNumberOfScalarComponents(1);<br>
    imageData-&gt;SetScalarTypeToFloat();<br>
    imageData-&gt;AllocateScalars();<br>
<br>
<br>
    int* dims = imageData-&gt;GetDimensions();<br>
    std::cout &lt;&lt; &quot;ImageData Dimensions: &quot; &lt;&lt; &quot;x: &quot; &lt;&lt; dims[0] &lt;&lt; &quot; y: &quot; &lt;&lt; dims[1] &lt;&lt; &quot; z: &quot; &lt;&lt; dims[2] &lt;&lt; std::endl;<br>
<br>
    //Initialize pressure across grid to zero<br>
    for(int z = 0; z &lt; H;z++)<br>
    {<br>
        for(int y = 0; y &lt; W;y++)<br>
        {<br>
            for(int x = 0; x &lt; L;x++)<br>
            {<br>
                pressure[(z*L*W)+(y*W)+x] = 0.0;<br>
                pressure[numPoints+(z*L*W)+(y*W)+x] = 0.0;<br>
                viewPressure[(y*W)+x] = &amp;pressure[(z*L*W)+(y*W)+x];<br>
            }<br>
        }<br>
    }<br>
<br>
    // Now point imageData to the pressure vector points<br>
    vtkPressure-&gt;SetArray(*viewPressure,L*W,1);<br>
    imageData-&gt;GetPointData()-&gt;SetScalars(vtkPressure);<br>
    vtkPressure-&gt;Modified();<br>
<br>
    // Create a scale lookup table<br>
    double r = 0;<br>
    double g = 0;<br>
    double b = 1.0;<br>
    table-&gt;SetRange(-0.02, 0.02); // image intensity range<br>
    table-&gt;SetNumberOfTableValues(64);<br>
    for (int x = 0; x &lt; 64 ; x++)<br>
        {<br>
        if (x &gt; 32) {    r = 1.0; g = g - 0.0312; b = b - 0.0312;    }<br>
        if (x == 32){    r = 1.0; g = 1.0; b = 1.0;    }<br>
        if (x &lt; 32)    {    r = r + 0.0312;    g = g + 0.0312;    b = 1.0;    }<br>
        table-&gt;SetTableValue(x,r,g,b,1.0);<br>
    }<br>
    table-&gt;SetTableValue(32,1,1,1,1.0); // make sure middle value is total black<br>
    table-&gt;SetRampToLinear();<br>
    table-&gt;Build();<br>
<br>
    // Map the image through the lookup table<br>
    color-&gt;SetLookupTable(table);<br>
    color-&gt;SetInput(imageData);<br>
    imActor-&gt;SetInput(color-&gt;GetOutput());<br>
<br>
    // Setup Interactor Renderer, RenderWindow etc...<br>
    ren-&gt;AddActor(imActor);<br>
    ren-&gt;SetBackground(0.0,0.0,0.0);<br>
    renWin-&gt;SetInteractor(iren);<br>
    renWin-&gt;AddRenderer(ren);<br>
    renWin-&gt;Render();<br>
<br>
    //Initial Condition - Set a pressure point to non-zero<br>
    int xi = 20; int yi = 40; int zi = 36;<br>
    pressure[(zi*L*W)+(yi*W)+xi] = 100.0;<br>
<br>
    int T = 50; //Set number of time steps<br>
    int offset1 = numPoints;<br>
    int offset2 = 0;<br>
    int tmp = 0;<br>
<br>
    for (int t = 0; t &lt; T; t++)<br>
    {<br>
<br>
        cout &lt;&lt; t &lt;&lt; endl;<br>
        RunMockSimulationStep(L,W,H,offset1,offset2,pressure,numPoints);<br>
<br>
        //Update Pressure Field View Here<br>
        // How?<br>
        vtkPressure-&gt;Modified();<br>
        renWin-&gt;Render();<br>
<br>
        // cycle offset<br>
        tmp = offset1;<br>
        offset1 = offset2;<br>
        offset2 = tmp;<br>
    }<br>
<br>
    system(&quot;pause&quot;);<br>
    delete []pressure;<br>
    delete []viewPressure;<br>
    return EXIT_SUCCESS;<br>
}<br>
<br>
// --------------- END CPP<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
</blockquote></div><br>