c++ - 为什么不能使用Sphere缩放字形?

标签 c++ vtk

我有一个点云数据集,我想根据其属性值缩放一个点的大小。我遵循以下示例:https://vtk.org/Wiki/VTK/Examples/Cxx/Visualization/ScaleGlyphs#Download_and_Build_ScaleGlyphs。但是当我构建项目时,发生了一个错误:abort()被调用为:enter image description here。我已经尝试了CubeSource,ArrowSource,CylinderSource,它们都解决了。我真的很困惑为什么我不能使用SphereSource。

如果有人可以帮助,我将不胜感激。提前致谢。

这是我的代码:

void ScalePoints::draw() {

    //load data
    vtkSmartPointer<vtkXMLPolyDataReader> currentReader = readers[currentId];
    vtkSmartPointer<vtkPolyData> polyData = currentReader->GetOutput();

    //set a scalar
    vtkDataArray* scalar = polyData->GetPointData()->GetArray("hh");
    int numPoints = scalar->GetNumberOfValues();  
    polyData->GetPointData()->SetScalars(scalar);

    //create spheres
    vtkSmartPointer<vtkSphereSource> SphereSource = vtkSmartPointer<vtkSphereSource>::New();
    vtkSmartPointer<vtkGlyph3D> glyph3D = vtkSmartPointer<vtkGlyph3D>::New();
    glyph3D->SetScaleModeToScaleByScalar();
    glyph3D->SetSourceConnection(SphereSource->GetOutputPort());
    glyph3D->SetInputData(polyData);
    glyph3D->SetScaleFactor(0.01);
    //glyph3D->SetRange(0.01, 0.05);
    glyph3D->Update();

    //visualize 
    vtkSmartPointer<vtkPolyDataMapper> sMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    sMapper->SetInputConnection(glyph3D->GetOutputPort());
    actor->SetMapper(sMapper);
    actor->GetProperty()->SetOpacity(0.7);
    renderer->AddActor(actor);
}

最佳答案

这听起来像个错误。
如果您改为执行以下操作会发生什么:

    SphereSource->Update();
    glyph3D->SetSourceData(SphereSource->GetOutput());

关于c++ - 为什么不能使用Sphere缩放字形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59067413/

相关文章:

c++ - 尝试使用 Qt 和 VTK 显示 DICOM 文件时出现未定义的引用问题

c++ - vtkSmartPointer 数组

c++ - CMake 错误 - cmTryCompileExec 已停止工作 (VTK)

c++ - 如何在 C++ 模板声明中声明函数

c++ - 自定义流到 C++ 中的方法?

parallel-processing - 从多个 MPI 输出组合 VTK 文件

user-interface - 添加/删除 vtkActors 或改变它们的可见性更好吗?

c++ - 删除布局中的小部件

C++ VS2010 "Multihreaded DLL"和 "Multithreaded"之间的区别

c++ - CLR 有胖异常框架还是小异常框架?