I’m confuse for the color setting for each block.
The following code show the method for setting color of each block. However, the final color is not show as the setting.
vtkSmartPointer CreateSphereDataSet(const vtkVector3d& center,
double radius)
{
vtkNew leaf;
leaf->SetCenter(center.GetData());
leaf->SetRadius(radius);
leaf->Update();
return leaf->GetOutput();
}
int main(int, char*[])
{
vtkNew<vtkNamedColors> colors;
vtkNew<vtkMultiBlockDataSet> root;
root->SetBlock(0, CreateSphereDataSet({0, 0, 0}, 1.0));
root->SetBlock(1, CreateSphereDataSet({5, 0, 0}, 2));
root->SetBlock(3, CreateSphereDataSet({10, 0, 0.0}, 3));
vtkNew<vtkCompositePolyDataMapper2> mapper;
mapper->SetInputDataObject(root);
vtkNew<vtkCompositeDataDisplayAttributes> cdsa;
mapper->SetCompositeDataDisplayAttributes(cdsa);
double color[3];
color[0] = 1; color[1] = 0; color[2] = 0;
cdsa->SetBlockColor(root->GetBlock(0), color);
color[0] = 0; color[1] = 1; color[2] = 0;
cdsa->SetBlockColor(root->GetBlock(1), color);
color[0] = 0; color[1] = 0; color[2] = 1;
cdsa->SetBlockColor(root->GetBlock(2), color);
//Another method for color setting
// mapper->SetBlockColor(0, 1, 0, 0);
// mapper->SetBlockColor(1, 0, 1, 0);
// mapper->SetBlockColor(2, 0, 0, 1);
// display the data
vtkNew<vtkRenderer> aren;
vtkNew<vtkRenderWindow> renWin;
renWin->AddRenderer(aren);
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(renWin);
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
aren->AddActor(actor);
aren->SetBackground(colors->GetColor3d("CornflowerBlue").GetData());
renWin->SetWindowName("MultiBLockDataSet");
renWin->Render();
iren->Start();
return 0;
}