# vtkMapper Interpolate Scalars Before Mapping does not work as expected

**URL:** https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601
**Category:** Development
**Tags:** code
**Created:** [October 14, 2022, 12:39am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601 "2022-10-14T00:39:56Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![abner\_water](https://discourse.vtk.org/user_avatar/discourse.vtk.org/abner_water/32/5912_2.png) [@abner\_water](https://discourse.vtk.org/u/abner_water)
#### Post date: [October 14, 2022, 12:39am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/1 "2022-10-14T00:39:56Z")

</div>

vtkUnstructedGrid scalar color does not match when SetInterpolateScalarsBeforeMapping(1) and SetInterpolateScalarsBeforeMapping(0)  
here is the test code, this vtu file displays right in paraview like this.

 ![para](https://discourse.vtk.org/uploads/default/original/2X/0/043e38264147fb219455ba1ae14d6ca9c96b37c4.png)  
 ![paraLIC](https://discourse.vtk.org/uploads/default/original/2X/0/02c0cb82be728690790678d0183080c468d6c76b.png)

```nohighlight
void main(int argc, char* argv[])
{
	// Create the reader for the data.
	std::string filename = "2.vtu";
	std::cout << "Loading " << filename.c_str() << std::endl;
	vtkNew<vtkXMLUnstructuredGridReader> reader;
	reader->SetFileName(filename.c_str());
	reader->Update();
	vtkDataSet* data = reader->GetOutput();
	double range[2]{ 0 };
	data->GetPointData()->GetArray("Order 1")->GetRange(range, 3);
	vtkNew<vtkLookupTable> lt;
	lt->SetRange(range);
	lt->SetNumberOfColors(15);
	lt->Build();

	vtkNew<vtkDataSetMapper> mapper;
	mapper->SetLookupTable(lt.GetPointer());
	mapper->SetInputConnection(reader->GetOutputPort());
	mapper->SetScalarVisibility(true);
	mapper->SetScalarModeToUsePointFieldData();
	mapper->ColorByArrayComponent("Order 1", 3);
	mapper->SetScalarRange(range);
	mapper->SetInterpolateScalarsBeforeMapping(1);
	mapper->Update();
	vtkNew<vtkNamedColors> colors;
	vtkNew<vtkActor> actor;
	actor->SetMapper(mapper.GetPointer());
	vtkNew<vtkRenderer> renderer;
	renderer->AddActor(actor.GetPointer());
	renderer->SetBackground(colors->GetColor3d("Wheat").GetData());
	renderer->UseHiddenLineRemovalOn();
	vtkNew<vtkRenderWindow> renderWindow;
	renderWindow->AddRenderer(renderer.GetPointer());
	renderWindow->SetSize(640, 480);

	vtkNew<vtkRenderWindowInteractor> interactor;
	interactor->SetRenderWindow(renderWindow.GetPointer());
	renderer->ResetCamera();
	renderer->ResetCameraClippingRange();
	renderWindow->Render();
	interactor->Start();
}

```

here is the result when SetInterpolateScalarsBeforeMapping(1)

 ![on](https://discourse.vtk.org/uploads/default/original/2X/4/4755b3b399dd8e0d9d9932a83cbe2e392ef65396.png)

but it should be like this SetInterpolateScalarsBeforeMapping(0)

 ![off](https://discourse.vtk.org/uploads/default/original/2X/1/1ff0b26fe1dddf328d80f72abe5439986401c54e.jpeg)

So is this a bug or something wrong with my code?  
Need help and thanks.

---

<div class="post-metadata">

### Author: ![SkyFishers](https://discourse.vtk.org/user_avatar/discourse.vtk.org/skyfishers/32/7347_2.png) [@SkyFishers](https://discourse.vtk.org/u/SkyFishers)
#### Post date: [March 14, 2024, 2:39am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/2 "2024-03-14T02:39:50Z")

</div>

Do you have solve this? if do, how to solve this? Thanks!

---

<div class="post-metadata">

### Author: ![Hamza\_Ali](https://discourse.vtk.org/user_avatar/discourse.vtk.org/hamza_ali/32/9650_2.png) [@Hamza\_Ali](https://discourse.vtk.org/u/Hamza_Ali)
#### Post date: [December 23, 2024, 9:51am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/3 "2024-12-23T09:51:51Z")

</div>

Hi,  
Did you have any luck with this? I am facing a similar error.

This is what I get before using InterpolateScalarsBeforeMappingOn()

 ![output_image](https://discourse.vtk.org/uploads/default/original/2X/e/eb3de041cf655506bb07218f181ddc77a8d8e89e.png)

and this is what happens after

 ![output_image](https://discourse.vtk.org/uploads/default/original/2X/c/ca4441832b13e0ca8e9f16ac49c9e3bd321f4118.png)

Below is the Python code I am using

> #Extract vorticity  
> mesh = gradient\_filter.GetOutput()
> 
> #Create a lookup table  
> lookup\_table = vtkLookupTable()  
> lookup\_table.SetRange(-0.5, 0.5)  
> lookup\_table.SetHueRange(0.6667,0.0)  
> lookup\_table.Build()  
> print(f"{lookup\_table}")
> 
> #Create a mapper and actor  
> mapper = vtkDataSetMapper()  
> mapper.SetLookupTable(lookup\_table);  
> mapper.SetInputData(mesh)  
> mapper.ColorByArrayComponent(“Vorticity”,2)  
> mapper.SetScalarRange([-0.5,0.5])  
> mapper.SetScalarModeToUsePointFieldData()  
> #mapper.SetInterpolateScalarsBeforeMapping(1)  
> mapper.InterpolateScalarsBeforeMappingOn()  
> mapper.Update()
> 
> #Check the scalar range of “Vorticity”  
> point\_data = mesh.GetPointData()  
> vorticity\_array = point\_data.GetArray(“Vorticity”)  
> print(f"{point\_data.GetArray(‘Vorticity’)}“)  
> min\_value = vorticity\_array.GetRange(2)[0]  
> max\_value = vorticity\_array.GetRange(2)[1]  
> print(f"Vorticity Scalar Range: {min\_value} to {max\_value}”)  
> actor = vtkActor()  
> actor.SetMapper(mapper)  
> actor.GetProperty().SetRepresentationToSurface()
> 
> #Create a renderer and set up a background color  
> renderer = vtkRenderer()  
> renderer.AddActor(actor)  
> renderer.SetBackground(1.0, 1.0, 1.0) # Set background to white
> 
> #Create a render window  
> render\_window = vtkRenderWindow()  
> #render\_window.SetOffScreenRendering(1)  
> render\_window.AddRenderer(renderer)  
> render\_window.SetSize(1080, 1080)  
> camera = renderer.GetActiveCamera()  
> camera.SetPosition(0, 0, 30) # Position of the camera  
> camera.SetFocalPoint(0, 0, 0) # Focus on the center of the object
> 
> #Render the scene  
> render\_window.Render()

---

<div class="post-metadata">

### Author: ![jaswantp](https://discourse.vtk.org/user_avatar/discourse.vtk.org/jaswantp/32/10046_2.png) [@jaswantp](https://discourse.vtk.org/u/jaswantp)
#### Post date: [December 23, 2024, 3:15pm UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/4 "2024-12-23T15:15:33Z")

</div>

You almost got it right. Ask the mapper to use the scalar range already given to the lookup table instead of using the mapper’s default `ScalarRange` which is [0,1]. This is why everything is navy blue in your screenshot.

```cpp
mapper->SetUseLookupTableScalarRange(true);

```

---

<div class="post-metadata">

### Author: ![Hamza\_Ali](https://discourse.vtk.org/user_avatar/discourse.vtk.org/hamza_ali/32/9650_2.png) [@Hamza\_Ali](https://discourse.vtk.org/u/Hamza_Ali)
#### Post date: [December 26, 2024, 6:03am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/5 "2024-12-26T06:03:16Z")

</div>

I am facing the issue even with using SetUseLookupTableScalarRange(true) flag.

---

<div class="post-metadata">

### Author: ![jaswantp](https://discourse.vtk.org/user_avatar/discourse.vtk.org/jaswantp/32/10046_2.png) [@jaswantp](https://discourse.vtk.org/u/jaswantp)
#### Post date: [December 26, 2024, 1:55pm UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/6 "2024-12-26T13:55:36Z")

</div>

Can you please share dataset corresponding to the `mesh` in your code?

---

<div class="post-metadata">

### Author: ![Hamza\_Ali](https://discourse.vtk.org/user_avatar/discourse.vtk.org/hamza_ali/32/9650_2.png) [@Hamza\_Ali](https://discourse.vtk.org/u/Hamza_Ali)
#### Post date: [December 27, 2024, 7:18am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/7 "2024-12-27T07:18:07Z")

</div>

[MESH.DAT](https://discourse.vtk.org/uploads/short-url/sk3KzHeQlFaPOeVORuToi4wNtjv.DAT) (3.5 MB)  
[4475000.B](https://discourse.vtk.org/uploads/short-url/ha2pWGB6F7Ps5PFy1QynKyaA8t4.B) (1.4 MB)  
[postprocess\_2D.so](https://discourse.vtk.org/uploads/short-url/iQbl0NFxBD75vUR3ew8Zs7tpaI8.so) (47.0 KB)  
[postprocess\_2D.py](https://discourse.vtk.org/uploads/short-url/rsnPAZfIp0Zywnb2fj26R6PenP.py) (3.8 KB)

I have a MESH.DAT file which I read using Tecplot reader. My dataset (.B file) contain arrays which are read through a Fortran code wrapped in Python library. I add those arrays to my mesh block and then create a rendered scene. I have also attached the code and library I am using.

Thank you for your time 🙂

---

<div class="post-metadata">

### Author: ![jaswantp](https://discourse.vtk.org/user_avatar/discourse.vtk.org/jaswantp/32/10046_2.png) [@jaswantp](https://discourse.vtk.org/u/jaswantp)
#### Post date: [December 27, 2024, 3:04pm UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/8 "2024-12-27T15:04:10Z")

</div>

Could you instead send a .vtu file please? `.so` shared libs are not easily redistributable, it won’t work on my machine.

Instead, can you modify your postprocess\_2D.py to generate a `.vtu` file? add these lines after you get output of gradient filter and share the `mesh.vtu` file here.

```py
# Extract the gradients of u and v from the gradient filter output
mesh = gradient_filter.GetOutput()
writer = vtkXMLUnstructuredGridWriter()
writer.SetInputData(mesh)
writer.SetFileName("mesh.vtu")
writer.Update()

```

---

<div class="post-metadata">

### Author: ![Hamza\_Ali](https://discourse.vtk.org/user_avatar/discourse.vtk.org/hamza_ali/32/9650_2.png) [@Hamza\_Ali](https://discourse.vtk.org/u/Hamza_Ali)
#### Post date: [December 28, 2024, 9:57am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/9 "2024-12-28T09:57:34Z")

</div>

[output.vtu](https://discourse.vtk.org/uploads/short-url/hdMXyI7ORsrEqrZP47kI401nocN.vtu) (2.7 MB)  
This is the vtu file. Although, the interpolation works alright when I load this in ParaView.

---

<div class="post-metadata">

### Author: ![Hamza\_Ali](https://discourse.vtk.org/user_avatar/discourse.vtk.org/hamza_ali/32/9650_2.png) [@Hamza\_Ali](https://discourse.vtk.org/u/Hamza_Ali)
#### Post date: [January 2, 2025, 7:41am UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/10 "2025-01-02T07:41:58Z")

</div>

Hi!  
Any luck with the data?

---

<div class="post-metadata">

### Author: ![jaswantp](https://discourse.vtk.org/user_avatar/discourse.vtk.org/jaswantp/32/10046_2.png) [@jaswantp](https://discourse.vtk.org/u/jaswantp)
#### Post date: [January 2, 2025, 2:50pm UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/11 "2025-01-02T14:50:26Z")

</div>

Yes, you have to additionally set the vector component on the lookup table so that it generates texture coordinates correctyl.

Call `lookup_table.SetVectorComponent(2)` anytime before rendering. It doesn’t **need** to be done before the lookup table is built.

---

<div class="post-metadata">

### Author: ![jaswantp](https://discourse.vtk.org/user_avatar/discourse.vtk.org/jaswantp/32/10046_2.png) [@jaswantp](https://discourse.vtk.org/u/jaswantp)
#### Post date: [January 2, 2025, 2:58pm UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/12 "2025-01-02T14:58:11Z")

</div>

Complete code that uses vtk \>= 9.4.0

```py
import vtk

reader = vtk.vtkXMLUnstructuredGridReader(file_name="./output.vtu")

#Create a lookup table
lut = vtk.vtkLookupTable(range=(-0.5, 0.5), hue_range=(0.6667, 0.0))
lut.Build()

mapper = vtk.vtkDataSetMapper(
    interpolate_scalars_before_mapping=True,
    lookup_table=lut,
    scalar_mode=vtk.VTK_SCALAR_MODE_USE_POINT_FIELD_DATA,
    use_lookup_table_scalar_range=True,)
mapper.ColorByArrayComponent("Vorticity", 2)
mapper.SetScalarModeToUsePointFieldData()

# create a connection from reader's output to mapper's input
reader >> mapper

actor = vtk.vtkActor(mapper=mapper)
#Create a renderer and set up a background color
renderer = vtk.vtkRenderer(background=(1, 1, 1))
renderer.AddActor(actor)

camera = renderer.GetActiveCamera()
camera.SetPosition(0, 0, 30) # Position of the camera
camera.SetFocalPoint(0, 0, 0) # Focus on the center of the object

#Create a render window
window = vtk.vtkRenderWindow(size=(1080, 1080))
window.AddRenderer(renderer)

# Ensure lookup table uses the correct vector component of "Vorticity"
lut.SetVectorComponent(2)

interactor = vtk.vtkRenderWindowInteractor(render_window=window)
interactor.Start()

```

 ![image](https://discourse.vtk.org/uploads/default/original/2X/2/265fb76c8579c31ab2ed05781ea2ff70a8d78c2e.jpeg)

---

<div class="post-metadata">

### Author: ![Hamza\_Ali](https://discourse.vtk.org/user_avatar/discourse.vtk.org/hamza_ali/32/9650_2.png) [@Hamza\_Ali](https://discourse.vtk.org/u/Hamza_Ali)
#### Post date: [January 5, 2025, 1:02pm UTC](https://discourse.vtk.org/t/vtkmapper-interpolate-scalars-before-mapping-does-not-work-as-expected/9601/13 "2025-01-05T13:02:52Z")

</div>

It worked. Thank you very much!
