Hi,<br><br>I have a display problem using this method. The 2 attached pictures show it, and the code to obtain them is also attached.<br><br>In the following example I have a cube with scalars on the PointData, and i apply a lut to its mapper.<br>
I also ave a 2D line in the scene.<br>If I do not call InterpolateScalarsBeforeMappingOn on the cube&#39;s mapper, the line is correctly red, but if I call it, then it looks like the lut is interferring with the rendering of the line.<br>
And if i have more 2D actors, the first one that is added to the renderer always presents the same problem.<br><br>Can someone can explain me why is this happening? is this the correct behaviour or is it a bug?<br><br>Thanks!<br>
<br><br><br>#include &lt;limits&gt;<br><br>#include &lt;vtk/vtkActor.h&gt;<br>#include &lt;vtk/vtkActor2D.h&gt;<br>#include &lt;vtk/vtkCleanPolyData.h&gt;<br>#include &lt;vtk/vtkCubeSource.h&gt;<br>#include &lt;vtk/vtkDoubleArray.h&gt;<br>
#include &lt;vtk/vtkLineSource.h&gt;<br>#include &lt;vtk/vtkLinearSubdivisionFilter.h&gt;<br>#include &lt;vtk/vtkLookupTable.h&gt;<br>#include &lt;vtk/vtkPointData.h&gt;<br>#include &lt;vtk/vtkPolyData.h&gt;<br>#include &lt;vtk/vtkPolyDataMapper.h&gt;<br>
#include &lt;vtk/vtkPolyDataMapper2D.h&gt;<br>#include &lt;vtk/vtkProperty.h&gt;<br>#include &lt;vtk/vtkProperty2D.h&gt;<br>#include &lt;vtk/vtkRenderer.h&gt;<br>#include &lt;vtk/vtkRenderWindow.h&gt;<br>#include &lt;vtk/vtkRenderWindowInteractor.h&gt;<br>
#include &lt;vtk/vtkSmartPointer.h&gt;<br>#include &lt;vtk/vtkTriangleFilter.h&gt;<br><br>#define MY_SP(class, variable)\<br>   vtkSmartPointer&lt;class&gt; variable = vtkSmartPointer&lt;class&gt;::New();<br><br>//----------------------------------------------------------------------------------------------------<br>
<br>// implemented after the main<br>void RepresPositionCtrl2D(double dSize, vtkRenderer *ren);<br>void SetScalars(vtkMapper *Mapper);<br>void ConfigureMapperLut(vtkMapper *mapper);<br><br>//---------------------------------------------------------------------------------------------<br>
<br>int main(int , char* [])<br>{<br>   /////////////////////////////////////////////////////////<br>   MY_SP(vtkRenderer, ren1);<br>   ren1-&gt;SetBackground(0.2, 0.2, 0.2);<br>   MY_SP(vtkRenderWindow, renWin);<br>   renWin-&gt;SetSize( 1000, 896 );<br>
   renWin-&gt;AddRenderer(ren1);<br>   MY_SP(vtkRenderWindowInteractor, iren);<br>   iren-&gt;SetRenderWindow(renWin);<br><br>   /////////////////////////////////////////////////////////<br>   MY_SP(vtkCubeSource, src);<br>
   src-&gt;SetBounds(0,2,0,2,0,2);<br>   src-&gt;Update();<br><br>   MY_SP(vtkTriangleFilter, tri);<br>   tri-&gt;SetInputConnection(src-&gt;GetOutputPort());<br>   tri-&gt;Update();<br><br>   MY_SP(vtkCleanPolyData, clean);<br>
   clean-&gt;SetInputConnection(tri-&gt;GetOutputPort());<br>   clean-&gt;Update();<br><br>   MY_SP(vtkLinearSubdivisionFilter, sub);<br>   sub-&gt;SetInputConnection(clean-&gt;GetOutputPort());<br>   sub-&gt;SetNumberOfSubdivisions(1);<br>
   sub-&gt;Update();<br><br>   vtkPolyData *cube = sub-&gt;GetOutput();<br><br>   MY_SP(vtkPolyDataMapper, Map);<br>   Map-&gt;SetInput(cube);<br><br>   MY_SP(vtkActor, Act);<br>   Act-&gt;SetMapper(Map);<br>   Act-&gt;GetProperty()-&gt;SetInterpolationToFlat();<br>
<br>   ren1-&gt;AddActor(Act);<br><br>   /////////////////////////////////////////////////////////<br>   RepresPositionCtrl2D(0.2, ren1);<br><br>   SetScalars(Map);<br>   ConfigureMapperLut(Map);<br><br>   /////////////////////////////////////////////////////////<br>
   ren1-&gt;ResetCamera();<br>   renWin-&gt;Render();<br>   iren-&gt;Start();<br><br>   /////////////////////////////////////////////////////////<br>   return 0;<br>}<br><br>//---------------------------------------------------------------------------------------------<br>
<br>void RepresPositionCtrl2D(double dSize, vtkRenderer *ren)<br>{<br>   MY_SP(vtkLineSource, m_LineH);<br>   m_LineH-&gt;SetPoint1(0.0, 0.0, 0.0);<br>   m_LineH-&gt;SetPoint2(dSize, 0.0, 0.0);<br><br>   MY_SP(vtkPolyDataMapper2D, m_MapperLH);<br>
   m_MapperLH-&gt;SetInputConnection(m_LineH-&gt;GetOutputPort());<br>   m_MapperLH-&gt;ScalarVisibilityOff();<br><br>   MY_SP(vtkActor2D, m_ActorLH);<br>   m_ActorLH-&gt;GetProperty()-&gt;SetColor(1.0, 0.0, 0.0);<br>   m_ActorLH-&gt;GetProperty()-&gt;SetLineWidth(5);<br>
   m_ActorLH-&gt;SetMapper(m_MapperLH);<br>   m_ActorLH-&gt;PickableOff();<br><br>   MY_SP(vtkCoordinate, pCoord);<br>   pCoord-&gt;SetCoordinateSystemToWorld();<br><br>   vtkSmartPointer&lt;vtkCoordinate&gt; coord = vtkSmartPointer&lt;vtkCoordinate&gt;::New();<br>
   coord-&gt;SetCoordinateSystemToNormalizedViewport();<br>   coord-&gt;SetReferenceCoordinate(pCoord);<br>   m_MapperLH-&gt;SetTransformCoordinate(coord);<br><br>   ren-&gt;AddActor2D(m_ActorLH);<br>}<br><br>void SetScalars(vtkMapper *Mapper)<br>
{<br>   MY_SP(vtkDoubleArray, distArray);<br>   int numPts = Mapper-&gt;GetInput()-&gt;GetNumberOfPoints();<br>   distArray-&gt;SetNumberOfValues(numPts);<br><br>   double *scalars = distArray-&gt;WritePointer(0, numPts);<br>
   std::fill(scalars, scalars+numPts, std::numeric_limits&lt;double&gt;::max());<br>   scalars[0] = -1.0;<br>   scalars[1] = -0.1;<br>   scalars[2] = 0.0;<br>   scalars[3] = 0.2;<br>   scalars[4] = 0.4;<br>   scalars[5] = 0.6;<br>
   scalars[6] = 0.8;<br>   scalars[7] = 10.0;<br><br>   distArray-&gt;Modified();<br><br>   Mapper-&gt;GetInput()-&gt;GetPointData()-&gt;SetScalars(distArray);<br>   Mapper-&gt;GetInput()-&gt;GetPointData()-&gt;Modified();<br>
   Mapper-&gt;Update();<br>}<br><br>void ConfigureMapperLut(vtkMapper *mapper)<br>{<br>   if(!mapper)<br>      return;<br><br>   MY_SP(vtkLookupTable, lut);<br>   lut-&gt;SetNumberOfColors(7);<br>   lut-&gt;Build();<br>   lut-&gt;SetTableValue(0, 0.5, 0.0, 1);<br>
   lut-&gt;SetTableValue(1, 0, 1.0, 0);<br>   lut-&gt;SetTableValue(2, 1, 0, 0.5);<br>   lut-&gt;SetTableValue(3, 0.0, 0.5, 0.0);<br>   lut-&gt;SetTableValue(4, 0.0, 1, 0.5);<br>   lut-&gt;SetTableValue(5, 0, 0.5, 1);<br>
   lut-&gt;SetTableValue(6, 1.0, 1.0, 1.0);<br>   lut-&gt;SetTableRange(-0.2, 1.0);<br><br>   mapper-&gt;ScalarVisibilityOn();<br>   mapper-&gt;SetLookupTable(lut);<br>   mapper-&gt;UseLookupTableScalarRangeOn();<br>   ////////////////////////////////////////////////////<br>
   mapper-&gt;InterpolateScalarsBeforeMappingOn(); // what&#39;s wrong?<br>   ////////////////////////////////////////////////////<br>   mapper-&gt;Update();<br>}<br><br>