vtk下自由绘制着色问题
其他软件效果,奇数次着色,偶数次不着色
自己绘制的效果,重复区域颜色会加重
//vtkRender
m_pClipRender = vtkRenderer::New();
this->m_pClipRender->SetLayer(1);
this->m_pClipRender->InteractiveOff();
pWin->AddRenderer(this->m_pClipRender);
//Polygon
m_pClipPolygonPolyData = vtkPolyData::New();
vtkNew<vtkPoints> point;
m_pClipPolygonPolyData->SetPoints(point);
vtkNew<vtkCellArray> polys;
m_pClipPolygonPolyData->SetPolys(polys);
//vtkPolyDataMapper2D
m_pClipPolygonMapper = vtkPolyDataMapper2D::New();
m_pClipPolygonMapper->SetInputData(m_pClipPolygonPolyData);
//vtkActor2D
m_pClipPolygon2DActor = vtkActor2D::New();
// m_pClipPolygon2DActor->GetPositionCoordinate()->SetCoordinateSystemToDisplay();
m_pClipPolygon2DActor->SetMapper(m_pClipPolygonMapper);
this->m_pClipRender->AddActor2D(m_pClipPolygon2DActor);
上面是创建Actor,下面是更新PolyData
auto pInter = static_cast<vtkInterStyleVR*>(this->GetInteractorObserver());
std::vector<vtkVector2i> vecDisPts = pInter->GetPolygonPoints();
vtkPoints* points = m_pClipPolygonPolyData->GetPoints();
points->Reset();
for (int i = 0; i < vecDisPts.size(); i++)
{
points->InsertNextPoint(vecDisPts[i].GetX(), vecDisPts[i].GetY(), 0.0);
}
m_pClipPolygonPolyData->Allocate(1, 1);
vtkPoints* points = m_pClipPolygonPolyData->GetPoints();
vtkCellArray* polys = vtkCellArray::New();
polys->InsertNextCell(points->GetNumberOfPoints());
for (int i = 0; i < points->GetNumberOfPoints(); i++)
{
polys->InsertCellPoint(i);
}
m_pClipPolygonPolyData->SetPolys(polys);
polys->Delete();
m_pClipPolygon2DActor->GetProperty()->SetLineWidth(2);
m_pClipPolygon2DActor->GetProperty()->SetColor(0.0, 1.0, 0.0);
m_pClipPolygon2DActor->GetProperty()->SetOpacity(0.4);
m_pClipPolygonPolyData->Modified();