Thank you so much for the fast reply and it works well!
So, the thing is I’m building my own polydata for the input. Here’s the code. I thought it was the polydata thing that makes this not work. But maybe I still miss some update call here?
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
double origin[3];
m_OriginalImage->GetOrigin(origin);
double offsetx[14] = { 0, 5, 10, 15, 15, 10, 5, 0, -5, -10, -15, -15, -10, -5 };
double offsety[14] = { 0, 5, 10, 15, 25, 20, 15, 10, 15, 20, 25, 15, 10 ,5 };
for (int i = 0; i < 14; ++i) {
points->InsertNextPoint(origin[0] + offsetx[i], origin[1] + offsety[i], origin[2]);
}
for (int i = 0; i < 14; ++i) {
points->InsertNextPoint(origin[0] + offsetx[i], origin[1] + offsety[i], origin[2] + 20);
}
// Generate the polygon poly data
vtkIdType numPoints = points->GetNumberOfPoints();
vtkSmartPointer<vtkCellArray> polygons = vtkSmartPointer<vtkCellArray>::New();
vtkSmartPointer<vtkPolygon> boundaryPolygon1 = vtkSmartPointer<vtkPolygon>::New();
vtkSmartPointer<vtkPolygon> boundaryPolygon2 = vtkSmartPointer<vtkPolygon>::New();
int oneSidePointsNum = numPoints / 2;
boundaryPolygon1->GetPointIds()->SetNumberOfIds(oneSidePointsNum);
boundaryPolygon2->GetPointIds()->SetNumberOfIds(oneSidePointsNum);
for (vtkIdType i = 0; i < oneSidePointsNum; i++) {
boundaryPolygon1->GetPointIds()->SetId(i, i);
boundaryPolygon2->GetPointIds()->SetId(i, i + oneSidePointsNum);
}
polygons->InsertNextCell(boundaryPolygon1);
polygons->InsertNextCell(boundaryPolygon2);
for (vtkIdType i = 0; i < oneSidePointsNum; i++) {
vtkIdType ids[4] = { i, (i + 1) % 14, (i + 1) % 14 + 14, i + 14 };
polygons->InsertNextCell(4, ids);
}
polygons->Modified();
// Create a PolyData
vtkSmartPointer<vtkPolyData> polygonPolyData = vtkSmartPointer<vtkPolyData>::New();
polygonPolyData->SetPoints(points);
polygonPolyData->SetPolys(polygons);
polygonPolyData->Modified();
// Generate the stencil according to the poly data
vtkSmartPointer<vtkPolyDataToImageStencil> poly2Stencil = vtkSmartPointer<vtkPolyDataToImageStencil>::New();
poly2Stencil->SetInputData(polygonPolyData);
The rest is the same