Thank you @Paulo_Carvalho - sorry , I really am a novice and I really appreciate your advice. How do I know what data is available from the gradientFilter, i.e. how many scalar fields, and how do I know to choose gradientFilter’s GetPointData() versus GetCellData()? When I’ve made that choice then from other examples it seems the pattern is this:
vtkSmartPointer<vtkGradientFilter> gradientFilter =
vtkSmartPointer<vtkGradientFilter>::New();
gradientFilter->SetInputConnection(elevationFilter->GetOutputPort());
// Make sure mapper uses correct data
gradientFilter->GetOutput()->GetPointData()->SetActiveScalars("gradientScalarField");
[ . . .]
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(gradientFilter->GetOutputPort());