[vtkusers] how to display volume data using rectilinear grid
Bruno da Silva de Oliveira
bruno at esss.com.br
Tue Sep 20 14:04:53 EDT 2005
vtkRectilinearGridGeometryFilter only extracts points. Change the
following lines:
vtkRectilinearGridGeometryFilter *plane =
vtkRectilinearGridGeometryFilter::New();
plane->SetInput(rgrid);
plane->SetExtent(0,2, 0,2, 0,2);
To:
vtkExtractRectilinearGrid *plane = vtkExtractRectilinearGrid::New();
plane->SetInput(rgrid);
plane->SetVOI(0,2, 0,2, 0,2);
and change the mapper to a vtkDataSetMapper.
Note that vtkRectilinearGridGeometryFilter is a
vtkRectilinearGridToPolyData filter, while vtkExtractRectilinearGrid is
vtkRectinlinearGridTovtkRectinlinearGrid filter.
HTH,
kshivann at engineering.uiowa.edu wrote:
> hi,
>
> i am using the same code as in the example for the rectilinear grid
> but just
> changing the limits. if you run this code it plots the data in point
> cloud
> representation and not in wire frame mode.
>
> thanks
>
> kiran
>
>
> #include "vtkRenderer.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkFloatArray.h"
> #include "vtkRectilinearGrid.h"
> #include "vtkRectilinearGridGeometryFilter.h"
> #include "vtkPolyDataMapper.h"
> #include "vtkActor.h"
> #include "vtkProperty.h"
> #include "vtkCamera.h"
>
> int main( int argc, char *argv[] )
> {
> int i;
> static float x[47]={
> -1.22396, -1.17188, -1.11979, -1.06771, -1.01562, -0.963542,
> -0.911458, -0.859375, -0.807292, -0.755208, -0.703125,
> -0.651042,
> -0.598958, -0.546875, -0.494792, -0.442708, -0.390625,
> -0.338542,
> -0.286458, -0.234375, -0.182292, -0.130209, -0.078125,
> -0.026042,
> 0.0260415, 0.078125, 0.130208, 0.182291, 0.234375, 0.286458,
> 0.338542, 0.390625, 0.442708, 0.494792, 0.546875, 0.598958,
> 0.651042, 0.703125, 0.755208, 0.807292, 0.859375, 0.911458,
> 0.963542, 1.01562, 1.06771, 1.11979, 1.17188};
> static float y[33]={-1.25, -1.17188, -1.09375, -1.01562,
> -0.9375, -0.859375,
> -0.78125, -0.703125, -0.625, -0.546875, -0.46875, -0.390625,
> -0.3125, -0.234375, -0.15625, -0.078125, 0, 0.078125,
> 0.15625, 0.234375, 0.3125, 0.390625, 0.46875, 0.546875,
> 0.625, 0.703125, 0.78125, 0.859375, 0.9375, 1.01562,
> 1.09375, 1.17188, 1.25};
> static float z[44]={0, 0.1, 0.2, 0.3, 0.4, 0.5,
> 0.6, 0.7, 0.75, 0.8, 0.9, 1,
> 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
> 1.7, 1.75, 1.8, 1.9, 2, 2.1,
> 2.2, 2.3, 2.4, 2.5, 2.6, 2.7,
> 2.75, 2.8, 2.9, 3, 3.1, 3.2,
> 3.3, 3.4, 3.5, 3.6, 3.7, 3.75,
> 3.8, 3.9};
>
> // Create a rectilinear grid by defining three arrays
> specifying the
> // coordinates in the x-y-z directions.
> vtkFloatArray *xCoords = vtkFloatArray::New();
> for (i=0; i<47; i++) xCoords->InsertNextValue(x[i]);
>
> vtkFloatArray *yCoords = vtkFloatArray::New();
> for (i=0; i<33; i++) yCoords->InsertNextValue(y[i]);
>
> vtkFloatArray *zCoords = vtkFloatArray::New();
> for (i=0; i<44; i++) zCoords->InsertNextValue(z[i]);
>
> // The coordinates are assigned to the rectilinear grid. Make
> sure that
> // the number of values in each of the XCoordinates,
> YCoordinates,
> // and ZCoordinates is equal to what is defined in
> SetDimensions().
> //
> vtkRectilinearGrid *rgrid = vtkRectilinearGrid::New();
> rgrid->SetDimensions(47,33,44);
> rgrid->SetXCoordinates(xCoords);
> rgrid->SetYCoordinates(yCoords);
> rgrid->SetZCoordinates(zCoords);
> // Extract a plane from the grid to see what we've got.
> vtkRectilinearGridGeometryFilter *plane =
> vtkRectilinearGridGeometryFilter::New();
> plane->SetInput(rgrid);
> plane->SetExtent(0,2, 0,2, 0,2);
>
> vtkPolyDataMapper *rgridMapper = vtkPolyDataMapper::New();
> rgridMapper->SetInput(plane->GetOutput());
>
> vtkActor *wireActor = vtkActor::New();
> wireActor->SetMapper(rgridMapper);
> wireActor->GetProperty()->SetRepresentationToWireframe();
> wireActor->GetProperty()->SetColor(0,0,0);
>
> // Create the usual rendering stuff.
> vtkRenderer *renderer = vtkRenderer::New();
> vtkRenderWindow *renWin = vtkRenderWindow::New();
> renWin->AddRenderer(renderer);
> vtkRenderWindowInteractor *iren =
> vtkRenderWindowInteractor::New();
> iren->SetRenderWindow(renWin);
>
> renderer->AddActor(wireActor);
> renderer->SetBackground(1,1,1);
> renderer->GetActiveCamera()->Elevation(60.0);
> renderer->GetActiveCamera()->Azimuth(30.0);
> renderer->GetActiveCamera()->Zoom(1.0);
>
> renWin->SetSize(300,300);
>
> // interact with data
> renWin->Render();
> iren->Start();
>
> // Clean up
> renderer->Delete();
> renWin->Delete();
> iren->Delete();
> xCoords->Delete();
> yCoords->Delete();
> zCoords->Delete();
> rgrid->Delete();
> rgridMapper->Delete();
> wireActor->Delete();
>
> return 0;
> }
>
> Quoting Bruno da Silva de Oliveira <bruno at esss.com.br>:
>
>> Hi,
>>
>> kshivann at engineering.uiowa.edu wrote:
>>
>>> Hi all,
>>> i am using vtkrectilineargrid for data representation. for some
>>> reason when i
>>> try plotting the results in 3D, i can see only point cloud
>>> representation. i am
>>> using vtkpolydatamapper. should i use any other mapper. when i
>>> reduce the data
>>> size to 2D i can plot the data in wireframe mode.
>>>
>>
>> How are you reading the data? How are you setting up the mapper?
>>
>> Please post some sample code so others can try to understand the
>> problem better.
>>
>> --
>> Bruno da Silva de Oliveira
>> bruno at esss.com.br
>> ESSS - Engineering Simulation and Scientific Software
>> http://www.esss.com.br
>>
>>
>
>
>
>
>
--
Bruno da Silva de Oliveira
bruno at esss.com.br
ESSS - Engineering Simulation and Scientific Software
http://www.esss.com.br
More information about the vtkusers
mailing list