[vtkusers] Rendering slow with multiple actors
    Jothy 
    jothybasu at gmail.com
       
    Tue Jul 19 16:11:57 EDT 2011
    
    
  
Hi all,
I am trying to overlay some ROIs on DICOM slices, cut from several
(e.g:10) surfaces. I instantiate vtkRenderer in the constructor of the
mainWindow as shown below
//Setup axial widget
    this->axialRenderer=vtkRenderer::New();
    vtkInteractorStyleImage *axialStyle = vtkInteractorStyleImage::New();
    this->ui->AxialWidget->GetRenderWindow()->GetInteractor()->SetInteractorStyle(axialStyle);
    this->ui->AxialWidget->GetRenderWindow()->AddRenderer(this->axialRenderer);
and I cut the ROIs using vtkCutter from the meshes
as shown below
vtkActor* MainWindow::cutAxialROI(vtkPolyData* mesh,float
sliceNo,double R,double G,double B)
{
    // Create a plane to cut
    vtkSmartPointer<vtkPlane> plane =
            vtkSmartPointer<vtkPlane>::New();
    plane->SetOrigin(0,0,sliceNo);
    plane->SetNormal(0,0,1);
    //      qDebug()<<sliceNo<<"ROI slice";
    // Create cutter
    vtkSmartPointer<vtkCutter> cutter =
            vtkSmartPointer<vtkCutter>::New();
    cutter->SetCutFunction(plane);
    cutter->SetInput(mesh);
    vtkSmartPointer<vtkPolyDataMapper> cutterMapper =
            vtkSmartPointer<vtkPolyDataMapper>::New();
    cutterMapper->SetInputConnection(cutter->GetOutputPort());
        // Create plane actor
    vtkActor* axialROI=vtkActor::New();
    axialROI->GetProperty()->SetColor(R,G,B);
    axialROI->GetProperty()->SetLineWidth(1.5);
    axialROI->SetMapper(cutterMapper);
    return axialROI;
    axialROI->Delete();
}
When I repeat render at several planes , the rendering becomes slow
(1s for rendering). But I would expect even more faster, since it is
rendered faster in other programs using VTK.
Rendering is updated on axial scroll changed as shown below
this->axialRenderer->RemoveAllViewProps();
    float scrollValue=this->ui->AxialScrollBar->value();
    this->showAxial(scrollValue);
    // create text for axial sliceNo
    QString leftLowerText;
    leftLowerText.append("Z:");
    QString axialSliceValue;
    axialSliceValue.setNum(scrollValue,'g',4);//
    leftLowerText.append(axialSliceValue);
    leftLowerText.append(" mm");
    CO.createAnnotation(1,1,0,leftLowerText);
    this->axialAnnotation=CO.annotation;
    this->axialRenderer->AddViewProp(this->axialAnnotation);
      for (int i=0;i<this->NumberOfROIs;i++)
    {
        double r=this->ROIColors[i][0]/255;
        double g=this->ROIColors[i][1]/255;
        double b= this->ROIColors[i][2]/255;
        vtkActor* axialROI=vtkActor::New();
        axialROI=this->cutAxialROI(this->meshList[i],scrollValue,r,g,b);
        this->axialRenderer->AddActor(axialROI);
        axialROI->Delete();
}
this->ui->AxialWidget->GetRenderWindow()->Render();
Is there anything wrong in the pipeline or any other efficient methods
of doing this?
Thanks
Jothy
    
    
More information about the vtkusers
mailing list