Libraries

VTK库的编译和使用

VTK库的编译和使用

编译基本步骤

  • 安装visual studio和Qt
  • 下载VTK源代码
  • 使用cmake-gui配置编译过程
  • 采用vs执行编译和安装

使用cmake-gui配置编译过程

  • 设置Qt的路径,例如:D:/Qt/6.4.3/msvc2019_64/lib/cmake/Qt6
  • Configure后,cmake-gui界面将给出更多的cmake选项
  • 在新增的cmake选项中选取
    • VTK_GROUP_ENABLE_Qt=yes
    • VTK_MODULE_ENABLE_VTK_GUISupportQt=yes
    • VTK_MODULE_ENABLE_VTK_RenderingQt=yes
    • 设置CMAKE_INSTALL_PREFIX为期望的安装路径
  • 再次Configure,成功后运行Generate
  • Generate完成后Open Project

采用vs执行编译和安装

  • 生成->批生成,注意勾选Debug, Release, INSTALL等选项

读取变量个数

    vtkSmartPointer<vtkStructuredPointsReader> reader = vtkSmartPointer<vtkStructuredPointsReader>::New();
    reader->SetFileName(vtkFilePath.toStdString().c_str());

    reader->ReadAllScalarsOn();
    // Update the reader
    reader->Update();

    int numScalars = reader->GetNumberOfScalarsInFile();

    qDebug() << "number of scalars: " << numScalars;

    for (int i = 0; i < numScalars; i++)
    {
        const char* scalar_name = reader->GetScalarsNameInFile(i);
        qDebug() << "scalar name: " << scalar_name;
    }

colormap

https://discourse.vtk.org/t/changing-scalars-to-render-via-setactivescalars/6640/2

    const openglRenderWindow = vtkOpenGLRenderWindow.newInstance();
            const renderWindow = vtkRenderWindow.newInstance();
            const renderer = vtkRenderer.newInstance({ background: [0, 0, 0], });
            renderWindow.addRenderer(renderer);

            // Update data scalar variable
            data.getPointData().setActiveScalars(scalarVar);

            // mapper - add to actor
            const mapper = vtkMapper.newInstance();
            const actor = vtkActor.newInstance();
            const lookupTable = vtkColorTransferFunction.newInstance();
            lookupTable.applyColorMap(vtkColorMaps.getPresetByName('jet'));
            lookupTable.updateRange();

            mapper.setInputData(data);
            mapper.setScalarModeToDefault();
            mapper.setScalarRange(0, 1);
            mapper.setLookupTable(lookupTable);