CSARImage 2023-04-16 16:07 采纳率: 0%
浏览 84
已结题

vtk下自由绘制着色问题

vtk下自由绘制着色问题
其他软件效果,奇数次着色,偶数次不着色

img


自己绘制的效果,重复区域颜色会加重

img

  • 写回答

5条回答 默认 最新

  • CSARImage 2023-04-17 10:44
    关注
    //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();
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 创建了问题 4月16日