[vtkusers] why the color of actor is white by seting the vtkLookupTable

Bill Lorensen bill.lorensen at gmail.com
Sat Apr 17 08:14:16 EDT 2010


This makes sense to me. DecimatePro removes cells and in doing so
destroys the cell scalar data. Another alternative is to split the
cubes generated polydata into separate polydata using vtkThreshold.
Look at the example:
http://www.vtk.org/Wiki/VTK/Examples/Medical/Cxx/GenerateModelsFromLabels

Bill

On Sat, Apr 17, 2010 at 6:09 AM, 朱文武 <cool.wenwu at gmail.com> wrote:
> hey, bill, thanks very much !  I find the culprit !
> Firstly, i try mapper->SetInput(cube->GetOutput()). And, the result is
> satisfactory. I reach the destination. So, i think there are must be some
> problems in the pipeline.
> Secondely, i remove the vtkDecimatePr from the pipeline, and surprisedly
> find that the the actor is colored correctly. And if this class is put back,
> the result is opposite.  However, i can not find  the reason why this class
> has a bad effect on the color of cells.
>
> In conclusion, i remove that class, and the program runs correctly. Your
> think pattern in solving problems in the vtk programming style is great!
> Have a good weekend!
>
>
> Thanks
> Wenwu
>
>
> On Sat, Apr 17, 2010 at 9:49 AM, 朱文武 <cool.wenwu at gmail.com> wrote:
>>
>> thanks ,bill! i will try, then tell you the result .
>>
>> On Sat, Apr 17, 2010 at 3:53 AM, Bill Lorensen <bill.lorensen at gmail.com>
>> wrote:
>>>
>>> Another idea. It seems that one pipeline piece is changing the cell
>>> data. Try changing the mapper's input to determine which filter is the
>>> culprit.
>>>
>>> Try
>>> mapper->SetInput(cube->GetOutput());
>>> first.
>>>
>>> Do you get the proper coloring?
>>>
>>> bill
>>>
>>>
>>> On Fri, Apr 16, 2010 at 3:39 PM, Bill Lorensen <bill.lorensen at gmail.com>
>>> wrote:
>>> > Try,
>>> > smoother->GenerateErrorScalarsOff() ;
>>> >
>>> > On Fri, Apr 16, 2010 at 1:30 AM, 朱文武 <cool.wenwu at gmail.com> wrote:
>>> >> Bill, thanks very much !
>>> >> Here are the all related codes:
>>> >> vtkSmartPointer<vtkBMPReader> m_read =
>>> >> vtkSmartPointer<vtkBMPReader>::New();
>>> >> m_read->SetFilePrefix("C:/Data/brain/TCVH_");//
>>> >> m_read->SetFilePattern("%s%d.bmp"); //
>>> >> m_read->Allow8BitBMPOn();
>>> >> m_read->SetDataByteOrderToLittleEndian();
>>> >> m_read->SetFileNameSliceOffset(5);//
>>> >> m_read->SetFileNameSliceSpacing(1);//
>>> >> m_read->SetNumberOfScalarComponents(3);//
>>> >> m_read->SetDataOrigin(0.0,0.0,0.0);//
>>> >> m_read->SetDataSpacing(0.167*4,0.167*4,1);//
>>> >> m_read->SetDataExtent(0,299,0,345,1300,1320);//
>>> >> m_read->Update();
>>> >>
>>> >> vtkSmartPointer<vtkDiscreteMarchingCubes> cube =
>>> >>     vtkSmartPointer<vtkDiscreteMarchingCubes>::New() ;
>>> >> cube->SetInput((vtkDataObject*) m_read->GetOutput() );
>>> >> cube->SetValue(0, 111);
>>> >> cube->SetValue(1, 121);
>>> >> cube->Update() ;
>>> >>
>>> >> vtkSmartPointer<vtkDecimatePro>  deci =
>>> >> vtkSmartPointer<vtkDecimatePro>::New();
>>> >> deci->SetInputConnection(cube->GetOutputPort());//
>>> >> deci->SetTargetReduction(0.5); //
>>> >> deci->PreserveTopologyOn(); //
>>> >> deci->ReleaseDataFlagOn();
>>> >>
>>> >> vtkSmartPointer<vtkWindowedSincPolyDataFilter> smoother=
>>> >> vtkSmartPointer<vtkWindowedSincPolyDataFilter>::New();
>>> >> smoother->SetInput(deci->GetOutput());
>>> >> smoother->SetNumberOfIterations(30) ;
>>> >> smoother->NonManifoldSmoothingOn();
>>> >> smoother->NormalizeCoordinatesOn();
>>> >> smoother->GenerateErrorScalarsOn() ;
>>> >> smoother->Update();
>>> >>
>>> >> vtkSmartPointer<vtkLookupTable> colorLookupTable=
>>> >> vtkSmartPointer<vtkLookupTable>::New();
>>> >>
>>> >> colorLookupTable->SetTableRange(0, 122);
>>> >> colorLookupTable->SetNumberOfTableValues(123);
>>> >> colorLookupTable->Build();
>>> >> for (int i =0; i < 111; i++)
>>> >> {
>>> >>     colorLookupTable->SetTableValue(i , i/255.0, i/255.0,i/255.0);
>>> >> }
>>> >> colorLookupTable->SetTableValue(111, 1,0,0,1);
>>> >> for (int j = 112; j <120; j++)
>>> >> {
>>> >>     colorLookupTable->SetTableValue(j , j/255.0, j/255.0, j/255.0);
>>> >>
>>> >> }
>>> >> colorLookupTable->SetTableValue(121, 0,1,1,1);
>>> >> colorLookupTable->SetTableValue(122, 0,1,1,1);
>>> >>
>>> >> vtkSmartPointer<vtkPolyDataNormals> triangleCellNormals =
>>> >> vtkSmartPointer<vtkPolyDataNormals>::New();
>>> >> triangleCellNormals->SetInput(smoother->GetOutput());
>>> >> triangleCellNormals->ComputeCellNormalsOn();
>>> >> triangleCellNormals->ComputePointNormalsOff();
>>> >> triangleCellNormals->ConsistencyOn();
>>> >> triangleCellNormals->AutoOrientNormalsOn();
>>> >> triangleCellNormals->Update() ;
>>> >>
>>> >> vtkSmartPointer<vtkPolyDataMapper> mapper =
>>> >> vtkSmartPointer<vtkPolyDataMapper>::New();
>>> >> mapper->SetInput(triangleCellNormals->GetOutput()); // #this is better
>>> >> for
>>> >> vis
>>> >> mapper->ScalarVisibilityOn() ;//#show colour
>>> >> mapper->SetScalarRange(colorLookupTable->GetTableRange());
>>> >> mapper->SetScalarModeToUseCellData() ; //  contains the label eg. 31
>>> >> //mapper->SetScalarModeToUsePointData() ;//#the smoother error relates
>>> >> to
>>> >> the verts
>>> >> mapper->SetLookupTable(colorLookupTable);
>>> >>
>>> >> vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
>>> >> actor->SetMapper(mapper);
>>> >>
>>> >> Waiting for suggestion, thanks in advance !
>>> >>
>>> >> Wenwu
>>> >>
>>> >>
>>> >>
>>> >> On Fri, Apr 16, 2010 at 12:01 PM, Bill Lorensen
>>> >> <bill.lorensen at gmail.com>
>>> >> wrote:
>>> >>>
>>> >>> The lookup table and mapper look OK to me. Can you attach the entire
>>> >>> program if it is not too large?
>>> >>>
>>> >>> Bill
>>> >>>
>>> >>> On Thu, Apr 15, 2010 at 9:00 PM, 朱文武 <cool.wenwu at gmail.com> wrote:
>>> >>> > hi all,
>>> >>> >
>>> >>> >       I sent the message last night!  However, no one responded !
>>> >>> > So, i
>>> >>> > send
>>> >>> > it again. Please forgive me, if it disrupts you!
>>> >>> >
>>> >>> > I use vtkDiscreteMarchingCubes to reconstruct anatomy structure,
>>> >>> > and use
>>> >>> > the
>>> >>> > vtkLookupTable to map the color. Now, i design the color map as
>>> >>> > follows:
>>> >>> > gray value (111) to red,
>>> >>> > gray value(121) to blue.
>>> >>> > Other gray value I don't care.
>>> >>> >
>>> >>> > Also, the parameter I set in SetValue() of
>>> >>> > vtkDiscreteMarchingCubes is:
>>> >>> > SetValue(0, 111);
>>> >>> > SetValue(1, 121);
>>> >>> >
>>> >>> > Then i set the lookup table as follows:
>>> >>> > vtkSmartPointer<vtkLookupTable> colorLookupTable=
>>> >>> > vtkSmartPointer<vtkLookupTable>::New();
>>> >>> > colorLookupTable->SetTableRange(0, 122); //
>>> >>> > colorLookupTable->SetNumberOfTableValues(123);
>>> >>> > colorLookupTable->Build();
>>> >>> >
>>> >>> > for (int i =0; i < 111; i++)
>>> >>> > {
>>> >>> >     colorLookupTable->SetTableValue(i , i/255.0, i/255.0,i/255.0);
>>> >>> > // i
>>> >>> > don't care this loop
>>> >>> > }
>>> >>> > colorLookupTable->SetTableValue(111, 1,0,0,1); // this is essential
>>> >>> > for
>>> >>> > me
>>> >>> > for (int j = 112; j <120; j++)
>>> >>> > {
>>> >>> >     colorLookupTable->SetTableValue(j , j/255.0, j/255.0, j/255.0);
>>> >>> > // i
>>> >>> > don't care this loop
>>> >>> >
>>> >>> > }
>>> >>> > colorLookupTable->SetTableValue(121, 0,0,1,1);
>>> >>> > colorLookupTable->SetTableValue(122, 0,0,1,1);
>>> >>> >
>>> >>> > vtkSmartPointer<vtkPolyDataMapper> mapper =
>>> >>> > vtkSmartPointer<vtkPolyDataMapper>::New();
>>> >>> > ...
>>> >>> > mapper->ScalarVisibilityOn() ;//#show colour
>>> >>> > mapper->SetScalarRange(colorLookupTable->GetTableRange());
>>> >>> > mapper->SetScalarModeToUseCellData() ;
>>> >>> > mapper->SetLookupTable(colorLookupTable);
>>> >>> >
>>> >>> > The result of construction is that two structures whose gray value
>>> >>> > is
>>> >>> > 111
>>> >>> > and 121 were reconstructed.
>>> >>> > However, the color of these actors is the same- white.
>>> >>> > Ccould anyone tell me why and give some suggestions?
>>> >>> >
>>> >>> > Thanks
>>> >>> > Wenwu
>>> >>> > _______________________________________________
>>> >>> > Powered by www.kitware.com
>>> >>> >
>>> >>> > Visit other Kitware open-source projects at
>>> >>> > http://www.kitware.com/opensource/opensource.html
>>> >>> >
>>> >>> > Please keep messages on-topic and check the VTK FAQ at:
>>> >>> > http://www.vtk.org/Wiki/VTK_FAQ
>>> >>> >
>>> >>> > Follow this link to subscribe/unsubscribe:
>>> >>> > http://www.vtk.org/mailman/listinfo/vtkusers
>>> >>> >
>>> >>> >
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> 祝
>>> >> 工作愉快,身体健康!
>>> >>
>>> >
>>
>>
>>
>> --
>
>



More information about the vtkusers mailing list