I have read a stl file and cut it, it can show the cut slice of cutter. But when I use this in vtkImageViewer2, the reslicer can not show? Can anyone show me a suggestion!!!
`void main()
{
vtkRenderer *pRender1 = vtkRenderer::New();
vtkRenderer *pRender2 = vtkRenderer::New();
vtkRenderWindow *pWin = vtkRenderWindow::New();
vtkRenderWindowInteractor *pInt = vtkRenderWindowInteractor::New();
pWin->SetSize(600, 600);
pWin->AddRenderer(pRender1);
pWin->AddRenderer(pRender2);
pRender1->SetViewport(0, 0, .5, 1);
pRender2->SetViewport(0.5, 0, 1, 1);
pRender2->SetBackground(.3, .3, .3);
pInt->SetRenderWindow(pWin);
vtkSTLReader* pReader = vtkSTLReader::New();
pReader->SetFileName("E:/dingban.STL");
pReader->Update(); //读取
vtkSmartPointer<vtkPolyDataMapper> pMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
pMapper->SetInputData(pReader->GetOutput());
vtkSmartPointer<vtkActor> pActor1 = vtkSmartPointer<vtkActor>::New();
pActor1->SetMapper(pMapper);
pRender1->AddActor(pActor1);
vtkPlaneWidget *pWidget = vtkPlaneWidget::New();
pWidget->SetInteractor(pInt);
pWidget->SetInputData(pReader->GetOutput());
pWidget->SetResolution(10);
pWidget->GetPlaneProperty()->SetColor(.9, .4, .4);
pWidget->GetPlaneProperty()->SetOpacity(.8);
pWidget->GetHandleProperty()->SetColor(0, .4, .7);
pWidget->GetHandleProperty()->SetLineWidth(1.5);
pWidget->NormalToYAxisOn();
pWidget->SetRepresentationToSurface();
pWidget->SetCenter(pReader->GetOutput()->GetCenter());
pWidget->PlaceWidget();
pWidget->On();
vtkPlane *pPlane = vtkPlane::New();
pPlane->SetOrigin(pReader->GetOutput()->GetCenter());
pPlane->SetNormal(1, 0, 0);
vtkCutter *pCut = vtkCutter::New();
pCut->SetCutFunction(pPlane);
pCut->SetInputConnection(pReader->GetOutputPort());
pCut->Update();
vtkSmartPointer<vtkPolyDataConnectivityFilter> connectFilter1 = vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();
connectFilter1->SetInputData(pCut->GetOutput());
connectFilter1->SetExtractionModeToAllRegions();
connectFilter1->ColorRegionsOn();
connectFilter1->MarkVisitedPointIdsOn();
connectFilter1->Update();
int regionNum = connectFilter1->GetNumberOfExtractedRegions();
int temp = 0;
std::vector<vtkSmartPointer<vtkPoints>> vPoints;
for (size_t i = 0; i < regionNum; i++)
{
vPoints.push_back(vtkSmartPointer<vtkPoints>::New());
}
for (size_t i = 0; i < pCut->GetOutput()->GetPoints()->GetNumberOfPoints(); i++)
{
int regionId = connectFilter1->GetOutput()->GetPointData()->GetScalars()->GetTuple1(i);
if (regionId == temp)
{
vPoints[temp]->InsertNextPoint( connectFilter1->GetOutput()->GetPoint(i));
}
else
{
temp++;
}
}
for (size_t i = 0; i < regionNum; i++)
{
int sum = vPoints[i]->GetNumberOfPoints();
vtkSmartPointer<vtkPolygon> polygon = vtkSmartPointer<vtkPolygon>::New();
polygon->GetPointIds()->SetNumberOfIds(sum);
for (size_t i = 0; i < sum; i++)
{
polygon->GetPointIds()->SetId(i, i);
}
vtkSmartPointer<vtkCellArray> cell = vtkSmartPointer<vtkCellArray>::New();
cell->InsertNextCell(polygon);
vtkSmartPointer<vtkPolyData> polydatatemp = vtkSmartPointer<vtkPolyData>::New();
polydatatemp->SetPoints(vPoints[i]);
polydatatemp->SetPolys(cell);
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polydatatemp);
vtkSmartPointer<vtkActor> pActor2 = vtkSmartPointer<vtkActor>::New();
pActor2->GetProperty()->SetColor(1, 1, 0);
pActor2->SetMapper(mapper);
pRender2->AddActor(pActor2);
}
pRender1->ResetCamera();
pRender2->ResetCamera();
pInt->Initialize();
pInt->Start();
}
`