Closed junqiangchen closed 5 years ago
如果你想直接在程序中顯示voronoi diagram,你需要在interactorStyleCenterline中增加voronoi的actor.同時需在main.cpp中新增vornoi diagram的actor,類似以下的:
vtkSmartPointer<vtkPolyDataMapper> centerlineMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
centerlineMapper->SetInputData(centerline);
vtkSmartPointer<vtkActor> centerlineActor = vtkSmartPointer<vtkActor>::New();
centerlineActor->SetMapper(centerlineMapper);
我沒有直接處理過voronoi diagram,建議先利用paraview看使用了SetGenerateVoronoiDiagram(m_appendEndPointsFlag) 的輸出有沒有正確生成後才開始修改代碼
具體生成voronoi diagram可以參考source code的使用方法
if (self.VoronoiDiagram is not None) and (self.PoleIds is not None):
centerlineFilter.GenerateVoronoiDiagramOff()
centerlineFilter.SetVoronoiDiagram(self.VoronoiDiagram)
centerlineFilter.SetPoleIds(self.PoleIds)
self.VoronoiDiagram = centerlineFilter.GetVoronoiDiagram()
非常感谢作者你的回答,按照你提供的参考资料,我在你的代码基础上进行了修改:
vtkSmartPointer
m_centerline->DeepCopy(centerlinesFilter->GetOutput());
m_voronoidiagram = centerlinesFilter->GetVoronoiDiagram();
我测试输出m_voronoidiagram是非空的。在ExtractCenterline函数中添加代码如下:
vtkSmartPointer
// put the actor into render window
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
ren->AddActor(surfaceActor);
ren->AddActor(centerlineActor);
ren->AddActor(voronoidiagramActor);
最后将结果写成vtp形式,用paraview来看的时候,没有任何结果。
作者你好,分享的项目非常棒,我下了你的代码也测试了一下,可以做中心线提取,因为中心线是根据每个位置的最小内接球来确定的,我想将最小内结球的Voronoi diagram显示出来,我尝试在Centerlin.cpp文件中的CalculateCenterline()函数里加了centerlinesFilter->SetGenerateVoronoiDiagram(m_appendEndPointsFlag);但是结果没有什么变化,不知道作者知道在哪里修改或添加函数功能可以实现呢? 非常感谢