我在VTK中有一个非结构化的网格,我想与其边缘线一起渲染。我可以使用vtkExtractEdges
来执行此操作,但是无论我做什么,边缘线始终为蓝色。
我有可用的代码以所需的颜色很好地绘制了网格的轮廓,并且尝试对边缘使用基本上相同的代码:
vtkSmartPointer<vtkOutlineFilter> outline = vtkSmartPointer<vtkOutlineFilter>::New();
vtkSmartPointer<vtkPolyDataMapper> outline_mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkActor> outline_actor = vtkSmartPointer<vtkActor>::New();
outline->SetInput(grid);
outline_mapper->SetInputConnection(outline->GetOutputPort());
outline_actor->SetMapper(outline_mapper);
outline_actor->GetProperty()->SetColor(1.,1.,1.); // << works just fine here
renderer->AddActor(outline_actor);
vtkSmartPointer<vtkExtractEdges> edges = vtkSmartPointer<vtkExtractEdges>::New();
vtkSmartPointer<vtkPolyDataMapper> edges_mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkActor> edges_actor = vtkSmartPointer<vtkActor>::New();
edges_mapper->SetInputConnection(edges->GetOutputPort());
edges_actor->SetMapper(edges_mapper);
edges_actor->GetProperty()->SetColor(1.,1.,1.); // << still stays blue here
renderer->AddActor(edges_actor);
这令人困惑,特别是因为我在SetColor
上调用的类是vtkPolyDataMapper
,此后,这两种情况的代码都是相同的。
还有其他人遇到此问题并知道解决方法吗?
到目前为止,我发现了这一点:https://public.kitware.com/pipermail/vtkusers/1999-September/087677.html,其中有人提议通过绘制管子来解决它,但我希望有一个干净的解决方案。
我使用的VTK版本是5.6,出于兼容性考虑,我不能使用其他版本。
答案 0 :(得分:0)
回答我自己的问题:
我发现由vtkPolyDataMapper
产生的数据在馈入vtkExtractEdges
时具有标量值(基于我想为入射单元格),并且这些行由查找表上色,而不是单色。
因此,我要做的就是给映射器一个单色的查找表。现在新的代码是
edges_mapper->SetInputConnection(edges->GetOutputPort());
edges_mapper->SetLookupTable(build_mono_table(1.,1.,1.));
edges_actor->SetMapper(edges_mapper);
renderer->AddActor(edges_actor);
具有帮助功能
inline vtkSmartPointer<vtkLookupTable> build_mono_table(double r, double g, double b)
{
vtkSmartPointer<vtkLookupTable> table = vtkSmartPointer<vtkLookupTable>::New();
table->SetNumberOfTableValues(1);
table->Build();
table->SetTableValue(0, r, g, b);
return table;
}
似乎没有必要指定标量范围。