[vtkusers] Quadratic cell data bug ?

John Platt jcplatt at lineone.net
Mon Feb 21 14:17:07 EST 2005


Hi Jacques,

 

Try replacing

 cellScalars ->SetNumberOfTuples(6);

 

with

 cellScalars ->SetNumberOfTuples(1);

 

When a quadratic quad is converted to polydata by vtkDataSetMapper (a
helper class containing vtkDataSetSurfaceFilter which extracts
faces/edges for the internal instance of vtkPolyDataMapper) it is
triangulated into 6 linear triangles. Just set the number of cell tuples
equal to the number of quadratic cells and you should have no problems.

 

HTH

John.

-----Original Message-----
From: jacques.charreyron [mailto:jacques.charreyron at caramail.com] 
Sent: 21 February 2005 15:03
To: John Platt
Subject: Re: RE: [vtkusers] Quadratic cell data bug ?

 

John,

Thanks for your answer,

In fact I really meant cell data and
"currentMapper->SetScalarModeToUseCellData();"
id used on purpose.

Sorry my code snippets were wrong as fas as variable names are concerned
. please read :


    vtkFloatArray *cellScalars = vtkFloatArray::New();   
    cellScalars ->SetNumberOfComponents(1);
    cellScalars ->SetNumberOfTuples(6);
    cellScalars ->SetTuple1(0,10.0);
    grid->GetCellData()->SetScalars(cellScalars );

instead of :

      vtkFloatArray *pointScalars = vtkFloatArray::New();
    
    pointScalars->SetNumberOfComponents(1);
    pointScalars->SetNumberOfTuples(6);
    pointScalars->SetTuple1(0,10.0);
    grid->GetCellData()->SetScalars(pointScalars);

Yours,

Jacques




  _____  

> De: "John Platt" <jcplatt at lineone.net>
> A: "'jacques.charreyron'" <jacques.charreyron at caramail.com>
> Objet: RE: [vtkusers] Quadratic cell data bug ?
> Date: Mon, 21 Feb 2005 14:06:46 -0000

Hi Jacques,

 

On a very quick look, check

 

     currentMapper->SetScalarModeToUseCellData();  


Did you mean point data?

 

HTH 

John.

 

 

-----Original Message-----
From: vtkusers-bounces at vtk.org [mailto:vtkusers-bounces at vtk.org] On
Behalf Of jacques.charreyron
Sent: 21 February 2005 10:25
To: vtkusers at vtk.org
Subject: [vtkusers] Quadratic cell data bug ?

 

Hello,


I am trying to display values on quadratic cells. In my example I have
one quadratic quad cell 
I allocate only one tuple in my float array and put an arbitrary value :


    vtkFloatArray *pointScalars = vtkFloatArray::New();
    
    pointScalars->SetNumberOfComponents(1);
    pointScalars->SetNumberOfTuples(6);
    pointScalars->SetTuple1(0,10.0);
    grid->GetCellData()->SetScalars(pointScalars);

When running this example I get this error :

ERROR: In
G:\Sandbox\Shared\common\intel_a\Api\Vtk\R4.4\Src\Common\vtkDataSet.cxx,
line 403
vtkPolyData (0x01BADF98): Cell array  with 1 components, has only 0
tuples but there are 6 cells

When I allocate six tuples to put six value : ie one for each triangle
like this :

    vtkFloatArray *pointScalars = vtkFloatArray::New();
    
    pointScalars->SetNumberOfComponents(1);
    pointScalars->SetNumberOfTuples(6);
    pointScalars->SetTuple1(0,10.0);
    pointScalars->SetTuple1(1,10.0);
    pointScalars->SetTuple1(2,10.0);
    pointScalars->SetTuple1(3,10.0);
    pointScalars->SetTuple1(4,10.0);
    pointScalars->SetTuple1(5,10.0);


    grid->GetCellData()->SetScalars(pointScalars);
  

 I get the following error :

Warning: In
G:\Sandbox\Shared\common\intel_a\Api\Vtk\R4.4\Src\Common\vtkDataSet.cxx,
line 411
vtkUnstructuredGrid (0x01B8CB00): Cell array  with 1 components, has 6
tuples but there are only 1 cells

ERROR: In
G:\Sandbox\Shared\common\intel_a\Api\Vtk\R4.4\Src\Common\vtkDataSet.cxx,
line 403
vtkPolyData (0x01BADF98): Cell array  with 1 components, has only 0
tuples but there are 6 cells



Any idea ?



Here is a code snippet to reproduce the behaviour :


#include <vtkActor.h>
#include <vtkCellType.h>
#include <vtkDataSetMapper.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkPoints.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkUnstructuredGrid.h>
#include <vtkWindowToImageFilter.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkActor2D.h>
#include <vtkLabeledDataMapper.h>
#include <vtkLookupTable.h>
#include <vtkFloatArray.h>
#include <vtkPointData.h>
#include <vtkMath.h>
#include <vtkScalarBarWidget.h>
#include <vtkScalarBarActor.h>
#include <vtkLookupTable.h>
#include <vtkTexture.h>
#include <vtkStructuredPoints.h>
#include <vtkBandedPolyDataContourFilter.h>
#include <vtkGeometryFilter.h>
#include <vtkPolyDataMapper.h>
#include <vtkCellData.h>
int main( int argc, char *argv[] )
{

    vtkPoints *points = vtkPoints::New();
    points->SetNumberOfPoints(8);

    points->SetPoint(0,    0,        0,        0);
    points->SetPoint(1,    1,        0,        0);
    points->SetPoint(2,    1,        1,        0);
    points->SetPoint(3,    0,        1,        0);
    points->SetPoint(4,    0.5,    0,        0);
    points->SetPoint(5,    1,        0.5,    0);
    points->SetPoint(6,    0.5,    1,        0);
    points->SetPoint(7,    0,        0.5,    0);


    vtkIdType pointIds[8];
    
    pointIds[0] = 0;
    pointIds[1] = 1;
    pointIds[2] = 2;
    pointIds[3] = 3;
    pointIds[4] = 4;
    pointIds[5] = 5;
    pointIds[6] = 6;
    pointIds[7] = 7;





    //--------------
    // Quad grid
    //--------------

    vtkUnstructuredGrid*    grid = vtkUnstructuredGrid::New();
    grid->Allocate(1);
    grid->SetPoints(points);
    grid->InsertNextCell(VTK_QUADRATIC_QUAD,8,pointIds);


    // Point data (scalars)
    vtkFloatArray *pointScalars = vtkFloatArray::New();
    
    pointScalars->SetNumberOfComponents(1);
    pointScalars->SetNumberOfTuples(6);
    pointScalars->SetTuple1(0,10.0);

    grid->GetCellData()->SetScalars(pointScalars);
    
    // Lookup :
    vtkLookupTable *lookupTable = vtkLookupTable::New();
    lookupTable->SetNumberOfColors(10);
    lookupTable->SetTableRange(0.0,1.0);
    lookupTable->Build();    


    // Scalar bar actor
    vtkScalarBarWidget  *scalarBarWidget=vtkScalarBarWidget::New();
    vtkScalarBarActor *scalarBarActor = vtkScalarBarActor::New();
    scalarBarActor->SetLookupTable(lookupTable);
    scalarBarWidget->SetScalarBarActor(scalarBarActor);
    scalarBarActor->SetMaximumNumberOfColors(10);


    // Mapper
    vtkDataSetMapper *currentMapper=vtkDataSetMapper::New();
    currentMapper->SetInput(grid);
    currentMapper->ScalarVisibilityOff();
    currentMapper->SetLookupTable(lookupTable);
    currentMapper->SetInterpolateScalarsBeforeMapping(1);
    currentMapper->SetScalarModeToUseCellData();


    // Actor
    vtkActor *quadActor = vtkActor::New();
    quadActor->SetMapper(currentMapper);


    
    //--------------
    // Visualization
    //--------------    
    // Renderer
    vtkRenderer *renderer= vtkRenderer::New();
    
    renderer->SetLightFollowCamera(true);
    renderer->SetBackground(0.6,0.7,0.9);
    renderer->AddActor(quadActor);
    renderer->AddActor(scalarBarActor);

    // RenderWindow
    vtkRenderWindow *renderWindow = vtkRenderWindow::New();
    renderWindow->AddRenderer(renderer);
    renderWindow->SetSize(300,300);

    // Interactor
    vtkRenderWindowInteractor *interactor =
vtkRenderWindowInteractor::New();
    interactor->SetRenderWindow(renderWindow);

    // Interactor style
    vtkInteractorStyleTrackballCamera *interactorStyle =
vtkInteractorStyleTrackballCamera::New();
    interactor->SetInteractorStyle(interactorStyle);

    // Event loop
    interactor->Initialize();
    interactor->Start();



    return 0;
}




 

300 Mo gratuits sur CaraMail : Cliquez ici pour en profiter!
<http://secure.caramail.l%20lycos.fr/services/signin/mail.jsp> 

  <http://premiummail.caramail.lycos.fr/Images/Mail/_icons/premium.gif>
300 Mo gratuits sur CaraMail : Cliquez
<http://secure.caramail.lycos.fr/services/signin/mail.jsp>  ici pour en
profiter!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20050221/f1e545f0/attachment.htm>


More information about the vtkusers mailing list