[vtkusers] visualizing slice contours via vtkAppendPolyData
dean.inglis at on.aibn.com
dean.inglis at on.aibn.com
Tue May 27 11:43:48 EDT 2003
I am attempting to use a vtkAppendPolyData filter be used to stack contours
generated by a tracing widget. For example, in my gui app, the user traces out a
contour on an vtkImageActor, then clicks a button to add the contour to
the vtkAPD filter. Each contour is stored by slice index as an element of
an array of allocated vtkPolyData objects:
void __fastcall TMainForm::StoreBtnClick(TObject *Sender)
{
vtkImagePlaneWidget* wptr;
switch ( m_currentAxis)
{
case 0: wptr = m_planeWidgetX; break;
case 1: wptr = m_planeWidgetY; break;
case 2: wptr = m_planeWidgetZ; break;
default: wptr = NULL; break;
}
if(wptr == NULL) { return; }
float pos = wptr->GetSlicePosition();
int index = wptr->GetSliceIndex();
vtkPolyData* poly = m_contourPolys[index];
m_tracer->GetPolyData(poly);
vtkPoints* points = poly->GetPoints();
if(points != NULL)
{
float pt[3];
for (int i=0;i<points->GetNumberOfPoints();++i)
{
points->GetPoint(i,pt);
pt[m_currentAxis] = pos;
points->SetPoint(i,pt);
}
}
m_contoursAppend->SetInputByNumber(index,m_contourPolys[i]);
m_contoursAppend->Update();
if(m_contoursActor->GetVisibility() == 0)
{
m_contoursActor->VisibilityOn();
}
RenderWindow3D->GetRenderer()->Render();
}
At startup, the app initializes the vtk objects:
<snip>
vtkPoints* points = vtkPoints::New(VTK_FLOAT);
points->SetNumberOfPoints(2);
int i;
for (i = 0; i < 2; i++)
{
points->SetPoint(i,i,i,i);
}
vtkCellArray *cells = vtkCellArray::New();
cells->Allocate(cells->EstimateSize(1,2));
vtkIdType pts[2];
pts[0] = 0; pts[1] = 1;
cells->InsertNextCell(2,pts);
m_contoursAppend->UserManagedInputsOn();
m_contoursAppend->SetNumberOfInputs(100);
for (i=0;i<100;i++)
{
m_contourPolys[i]->SetPoints(points);
m_contourPolys[i]->SetLines(cells);
m_contoursAppend->SetInputByNumber(i,m_contourPolys[i]);
}
cells->Delete();
points->Delete();
m_contoursMapper->SetInput(m_contoursAppend->GetOutput());
m_contoursMapper->SetResolveCoincidentTopologyToPolygonOffset();
m_contoursActor->SetMapper(m_contoursMapper);
m_contoursActor->VisibilityOff();
<snip>
The pb is that I cannot visualize more than one contour at a time!!!
How do I visualize the contours without having to have an actor for each
polydata contour? Do I have to add all polydata contours AFTER they
have been created?
Dean
More information about the vtkusers
mailing list