[vtkusers] Basic VTK Example running slow

Bill Lorensen bill.lorensen at gmail.com
Wed Jul 14 08:18:09 EDT 2010


You are actually trying to render 1000 actors that each have 1000 hexahedra.

You only need one actor since all of your hexahedra are in one
unstructured grid.

Bill
On Wed, Jul 14, 2010 at 3:14 AM, Nathan__ <reeves_nathan at hotmail.com> wrote:
>
> I have just created a basic example of displaying 1000 Hexahedron on an
> unstructured grid. Its unstructured because thats what I will need to
> display my data in the future. I would of thought 1000 cells is handled with
> no problems. It takes around 10 seconds to display anything, and mouse
> interaction is incredibly slow.  My example just displays 1000 cubes in a
> row.
>
> What I am hoping to eventually acheive, is to display up around 1000-10000
> irregular cells on an unstructured grid. I want to be able to interactivly
> select cells and change propeerties.
>
> Here is my example:
>
>
> #include "vtkSphereSource.h"
> #include "vtkPolyDataMapper.h"
> #include "vtkActor.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderer.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkDataSetTriangleFilter.h"
> #include "vtkUnstructuredGridVolumeMapper.h"
> #include "vtkProjectedTetrahedraMapper.h"
> #include "vtkFloatArray.h"
> #include "vtkPointData.h"
>
> int index=0;
> int globalPointId =0;
> vtkUnstructuredGrid *myGrid;
> vtkRenderer *myRenderer;
> vtkRenderWindow *myRendererWindow;
> vtkRenderWindowInteractor *myInteractor;
> vtkPoints * myVtkPoints;
> vtkDataSetMapper *myMapper;
>
> #define NUMBER_OF_SHAPES 1000
> int main ()
> {
>    float xmin = 0.0;
>    float xmax = 1.0;
>    float ymin = 0.0;
>    float ymax = 1.0;
>    float zmin = 0.0;
>    float zmax = 1.0;
>
>    //create points of hexahedron
>        vtkPoints *points = vtkPoints::New();
>        for (int i=0;i<NUMBER_OF_SHAPES;i++)
>        {
>
>                points->InsertPoint(0 + (i*8), xmin, ymin, zmin + i);
>                points->InsertPoint(1+ (i*8), xmax, ymin, zmin+i);
>                points->InsertPoint(2+ (i*8), xmax, ymax, zmin+i);
>                points->InsertPoint(3+ (i*8), xmin, ymax, zmin+i);
>                points->InsertPoint(4+ (i*8), xmin, ymin, zmax+i);
>                points->InsertPoint(5+ (i*8), xmax, ymin, zmax+i);
>                points->InsertPoint(6+ (i*8), xmax, ymax, zmax+i);
>                points->InsertPoint(7+ (i*8), xmin, ymax, zmax+i);
>        }
>
>    //create the hexahedron
>    vtkHexahedron *theHex[NUMBER_OF_SHAPES];
>        for(int i=0;i<NUMBER_OF_SHAPES;i++)
>        {
>                theHex[i] = vtkHexahedron::New();
>                theHex[i]->GetPointIds()->SetNumberOfIds(8);  //not needed if use
> insertId
>
>            for (int j = 0; j <8; j++)
>                {
>                        theHex[i]->GetPointIds()->SetId(j,j+(i*8));  //this maps internal id 0-7
> to global point Id
> //                      theHex[i]->GetPointIds()->InsertId(j,j+(i*8));
>                }
>        }
>
>        //create an unstructured grid for the hexahedron
>    vtkUnstructuredGrid *theGrid = vtkUnstructuredGrid::New();
>    theGrid->Allocate(NUMBER_OF_SHAPES, NUMBER_OF_SHAPES);
>    for(int i =0;i<NUMBER_OF_SHAPES;i++)
>        {
>                theGrid->InsertNextCell(theHex[i]->GetCellType(),
> theHex[i]->GetPointIds());
>        }
>        theGrid->SetPoints(points);
>   // theGrid->GetPointData()->SetScalars(scalars);
>
>    //create a mapper for the hexahedron
>        vtkDataSetMapper *theHexMapper;
>        theHexMapper = vtkDataSetMapper::New();
>        theHexMapper->SetInput(theGrid);
>
>
>        //create an actor
>        vtkActor * hexActor[NUMBER_OF_SHAPES];
>    for(int i =0;i<NUMBER_OF_SHAPES;i++)
>        {
>                hexActor[i] = vtkActor::New();
>                hexActor[i]->SetMapper(theHexMapper);
>        }
>    // a renderer and render window
>    vtkRenderer *ren1 = vtkRenderer::New();
>    vtkRenderWindow *renWin = vtkRenderWindow::New();
>    renWin->AddRenderer(ren1);
>    for(int i =0;i<NUMBER_OF_SHAPES;i++)
>                ren1->AddActor(hexActor[i]);
>
>    // an interactor
>    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>    iren->SetRenderWindow(renWin);
>
>    ren1->SetBackground(1,1,1); // Background color white
>
>    // render an image (lights and cameras are created automatically)
>    renWin->Render();
>
>    // begin mouse interaction
>    iren->Initialize();
>    iren->Start();
>
>    return 1;
> }
>
> --
> View this message in context: http://old.nabble.com/Basic-VTK-Example-running-slow-tp28675593p28675593.html
> Sent from the VTK - Users mailing list archive at Nabble.com.
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



More information about the vtkusers mailing list