confusion over vtkScalars & vtkLookupTable

Dingrong Yi yidingr at cim.mcgill.ca
Thu Mar 23 12:50:00 EST 2000


Hi Randy,

My understanding is that the LUT table range can be any thing, or just be
default to be 0 1. While the mapper's scalar range is related to your
data (which to be color mapped and displayed).  The purpose of the
mapper's scalar range is to pick up part of your data scalar range and
mapped it to the LUT range linearly. The range of you scalar data out of
the mapper's scalar range will be mapped either to the maximum color or
minimum color.

Dingrong



On Wed, 22 Mar 2000, Randy Heiland wrote:

> No ImmediateModeRendering-related question, I promise.  But in digging around
> on that problem, I came to realize that I don't understand what is actually
> happening between vtkScalars and vtkLookupTable.  It does what I expect (using
> display lists), but the  PrintSelf of the two mappers in the attached pgm is
> not what I expected.  Note that I dump both mappers before rendering, render,
> then dump both again.  The condensed results (causing my confusion) are:
> 
> ------------ line1Map:
>     Lookup Table:
>       Table Range: (0, 1)
>     Scalar Visibility: On
>     Scalar Range: (-1.1, 2.2)
> ------------ line2Map:
>     Lookup Table:
>       Table Range: (0, 1)
>     Scalar Visibility: On
>     Scalar Range: (0.3, 2.9)
> 
> <render>
> 
> ------------ line1Map(2):
>         Lookup Table:
>           Table Range: (0.3, 2.9)    (??  really the range of line2Map)
>         Scalar Visibility: On
>         Scalar Range: (-1.1, 2.2)
> ------------ line2Map(2):
>         Lookup Table:
>           Table Range: (0.3, 2.9)
>         Scalar Visibility: On
>         Scalar Range: (0.3, 2.9)
> 
> Basically, why *does* the LUT maintain a Table Range?  Couldn't it simply be a
> normalized range and the specified range on the mapper would simply map into
> the normalized LUT?  I'm missing something and any insight would be
> appreciated.
> 
> thanks,
> --Randy
> 
> ------------------
> //
> // Try to resolve confusion over a mapper's (scalar) range and its
> // associated LUT's (table, scalar) range
> //
> 
> #include <stdlib.h>
> #include "vtkRenderer.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkLookupTable.h"
> #include "vtkPoints.h"
> #include "vtkCellArray.h"
> #include "vtkPolyData.h"
> #include "vtkPolyDataMapper.h"
> #include "vtkActor.h"
> 
> 
> int main(int argc, char **argv)
> {
>   vtkRenderer *renderer = vtkRenderer::New();
>   vtkRenderWindow *renWin = vtkRenderWindow::New();
>     renWin->AddRenderer(renderer);
> 
>   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>     iren->SetRenderWindow(renWin);
> 
> 
>   // ----  explicitly define one LUT
>   vtkLookupTable *lut = vtkLookupTable::New();
>   lut->Build();
> 
>   // ----- create line #1 ---------
>   vtkPoints *pts1 = vtkPoints::New();
>     pts1->InsertPoint(0, -1,0,0);
>     pts1->InsertPoint(1,  0,0,0);
>     pts1->InsertPoint(2,  1,0,0);
> 
>   vtkScalars *scalars1 = vtkScalars::New();
> //???
> //    scalars1->SetLookupTable(lut);
>     scalars1->InsertScalar(0, -1.1);
>     scalars1->InsertScalar(1,  0.2);
>     scalars1->InsertScalar(2,  2.2);
> 
>   vtkCellArray *ca1 = vtkCellArray::New();
>     ca1->InsertNextCell(3);
>     ca1->InsertCellPoint(0);
>     ca1->InsertCellPoint(1);
>     ca1->InsertCellPoint(2);
> 
>   vtkPolyData *line1 = vtkPolyData::New();
>     line1->SetPoints(pts1);
>     line1->SetLines(ca1);
>     line1->GetPointData()->SetScalars(scalars1);
> //    float *line1Range = line1->GetPointData()->GetScalars()->GetRange();
> //    printf("line1Range = %f %f",line1Range[0],line1Range[1]);
> 
>   vtkPolyDataMapper *line1Map = vtkPolyDataMapper::New();
>     line1Map->SetInput(line1);
>     line1Map->ScalarVisibilityOn();
>     line1Map->SetLookupTable(lut);
>     line1Map->SetScalarRange(-1.1,2.2);
> 
>   vtkActor *line1Actor = vtkActor::New();
>     line1Actor->SetMapper(line1Map);
> 
> 
>   // ----- create line #2 ---------
>   vtkPoints *pts2 = vtkPoints::New();
>     pts2->InsertPoint(0, -1,1,0);
>     pts2->InsertPoint(1,  0,1,0);
>     pts2->InsertPoint(2,  1,1,0);
> 
>   vtkScalars *scalars2 = vtkScalars::New();
> //???
> //    scalars2->SetLookupTable(lut);
>     scalars2->InsertScalar(0, 0.3);
>     scalars2->InsertScalar(1, 0.9);
>     scalars2->InsertScalar(2, 2.9);
> 
>   vtkCellArray *ca2 = vtkCellArray::New();
>     ca2->InsertNextCell(3);
>     ca2->InsertCellPoint(0);
>     ca2->InsertCellPoint(1);
>     ca2->InsertCellPoint(2);
> 
>   vtkPolyData *line2 = vtkPolyData::New();
>     line2->SetPoints(pts2);
>     line2->SetLines(ca2);
>     line2->GetPointData()->SetScalars(scalars2);
> //    float *line2Range = line2->GetPointData()->GetScalars()->GetRange();
> //    printf("line2Range = %f %f",line2Range[0],line2Range[1]);
> 
>   vtkPolyDataMapper *line2Map = vtkPolyDataMapper::New();
>     line2Map->SetInput(line2);
>     line2Map->ScalarVisibilityOn();
>     line2Map->SetLookupTable(lut);
>     line2Map->SetScalarRange(0.3,2.9);
> 
>   vtkActor *line2Actor = vtkActor::New();
>     line2Actor->SetMapper(line2Map);
> 
> 
>   // ----- Add the actors ---------
>   renderer->AddActor(line1Actor);
>   renderer->AddActor(line2Actor);
> 
>   renderer->SetBackground(0,0,0);
>   renWin->SetSize(300,300);
> 
>   cout<<"------------ line1Map:"<<endl;
>   line1Map->PrintSelf(cout,4);
>   cout<<"------------ line2Map:"<<endl;
>   line2Map->PrintSelf(cout,4);
> 
>   renWin->Render();
> 
>   cout<<"------------ line1Map(2):"<<endl;
>   line1Map->PrintSelf(cout,8);
>   cout<<"------------ line2Map(2):"<<endl;
>   line2Map->PrintSelf(cout,8);
> 
>   renWin->Render();
>   iren->Start();
> }
> --------------------------------------------------------------------
> This is the private VTK discussion list. Please keep messages on-topic.
> Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
> To UNSUBSCRIBE, send message body containing "unsubscribe vtkusers" to
> <majordomo at public.kitware.com>. For help, send message body containing
> "info vtkusers" to the same address.
> --------------------------------------------------------------------
> 
> 

--------------------------------------------------------------------
This is the private VTK discussion list. Please keep messages on-topic.
Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
To UNSUBSCRIBE, send message body containing "unsubscribe vtkusers" to
<majordomo at public.kitware.com>. For help, send message body containing
"info vtkusers" to the same address.
--------------------------------------------------------------------



More information about the vtkusers mailing list