MantisBT - VTK
View Issue Details
0001625VTK(No Category)public2005-02-28 12:042016-08-12 09:54
John Norris 
Kitware Robot 
normalmajoralways
closedmoved 
 
 
0001625: vtkAppendPolyData scrambles cell data in certain cases
With certain inputs, vtkAppendPolyData fails to combine cell data properly. In the example code below, we start with a vtkPolyData generated by vtkSurfaceDataFilter from a simple vtkStructuredPoints. This is clipped with vtkClipPolyData and cut with vtkCutter. The results of these two are appended together, but the cell data isn't processed correctly.

When CLIP is #defined to 0, you see the unclipped surface. When CLIP is 1, you see the clipped (and erronously colored) surface.

///////////////////////////////////////////////

#include <vtkActor.h>
#include <vtkAppendPolyData.h>
#include <vtkCellData.h>
#include <vtkClipPolyData.h>
#include <vtkCutter.h>
#include <vtkDataSetSurfaceFilter.h>
#include <vtkFloatArray.h>
#include <vtkOutlineFilter.h>
#include <vtkPlane.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkScalarBarActor.h>
#include <vtkScalarsToColors.h>
#include <vtkStructuredPoints.h>

#define CLIP 0

int main()
{
  vtkFloatArray* pData = vtkFloatArray::New();
  pData->SetNumberOfValues(5);
  pData->SetValue(0, 0.f);
  pData->SetValue(1, 1.f);
  pData->SetValue(2, 2.f);
  pData->SetValue(3, 1.f);
  pData->SetValue(4, 0.f);

  vtkStructuredPoints* pGrid = vtkStructuredPoints::New();
  pGrid->SetDimensions(6, 2, 2);
  pGrid->GetCellData()->SetScalars(pData);
  pData->Delete();

  vtkDataSetSurfaceFilter* pSurface = vtkDataSetSurfaceFilter::New();
  pSurface->SetInput(pGrid);

  vtkPlane* pPlane = vtkPlane::New();
  pPlane->SetOrigin(2.5, 0.0, 0.0);
  pPlane->SetNormal(1.0, 0.0, 0.0);

  vtkClipPolyData* pClipper = vtkClipPolyData::New();
  pClipper->SetInput(pSurface->GetOutput());
  pClipper->SetClipFunction(pPlane);

  vtkCutter* pCutter = vtkCutter::New();
  pCutter->SetInput(pSurface->GetOutput());
  pCutter->SetCutFunction(pPlane);
  pPlane->Delete();

  vtkAppendPolyData* pAppender = vtkAppendPolyData::New();
#if CLIP
  pAppender->AddInput(pClipper->GetOutput());
  pAppender->AddInput(pCutter->GetOutput());
#else
  pAppender->AddInput(pSurface->GetOutput());
#endif // CLIP
  pSurface->Delete();
  pClipper->Delete();
  pCutter->Delete();

  vtkPolyDataMapper* pMapper = vtkPolyDataMapper::New();
  pMapper->SetInput(pAppender->GetOutput());
  pMapper->SetScalarRange(0.0, 2.0);

  vtkScalarBarActor* pSB = vtkScalarBarActor::New();
  pMapper->CreateDefaultLookupTable();
  pSB->SetLookupTable(pMapper->GetLookupTable());

  vtkActor* pActor = vtkActor::New();
  pActor->SetMapper(pMapper);
  pMapper->Delete();

  vtkRenderer* pRenderer = vtkRenderer::New();
  pRenderer->AddActor(pActor);
  pActor->Delete();
  pRenderer->AddActor(pSB);
  pSB->Delete();

  vtkOutlineFilter* pOutline = vtkOutlineFilter::New();
  pOutline->SetInput(pGrid);
  pGrid->Delete();

  pMapper = vtkPolyDataMapper::New();
  pMapper->SetInput(pOutline->GetOutput());
  pOutline->Delete();

  pActor = vtkActor::New();
  pActor->SetMapper(pMapper);
  pActor->GetProperty()->SetColor(1.0, 1.0, 1.0);
  pMapper->Delete();

  pRenderer->AddActor(pActor);
  pActor->Delete();

  vtkRenderWindow* pWindow = vtkRenderWindow::New();
  pWindow->AddRenderer(pRenderer);
  pRenderer->Delete();

  vtkRenderWindowInteractor* pInteractor = vtkRenderWindowInteractor::New();
  pInteractor->SetRenderWindow(pWindow);
  pWindow->Delete();

  pInteractor->Start();

  pInteractor->Delete();

  return 0;
}
No tags attached.
Issue History
2008-11-30 09:22Mathieu MalaterreAssigned ToMathieu Malaterre => François Bertel
2008-11-30 20:18François BertelAssigned ToFrançois Bertel =>
2008-12-26 18:41BaselNote Added: 0014444
2011-06-16 13:11Zack GalbreathCategory => (No Category)
2016-08-12 09:54Kitware RobotNote Added: 0036771
2016-08-12 09:54Kitware RobotStatusexpired => closed
2016-08-12 09:54Kitware RobotResolutionopen => moved
2016-08-12 09:54Kitware RobotAssigned To => Kitware Robot

Notes
(0014444)
Basel   
2008-12-26 18:41   
Hi All,
Also I'm having the same problem with vtkAppendPolyData::AddInput() it seems that it doesn't combine the different polydata objects.
I'm trying to read 3DS file and append all its meshes into one Actor but append->AddInput(polyData); doesn't work propapley.
My code is similar to this:
vtk3DSImporter *importer = vtk3DSImporter::New();
        importer->SetFileName("Sample.3ds");
        importer->ComputeNormalsOn();
        importer->Read();
vtkAppendPolyData* append = vtkAppendPolyData::New();
for (vtk3DSMesh* mesh = importer->MeshList; mesh != (vtk3DSMesh *) NULL;
            mesh = (vtk3DSMesh *) mesh->next){

                vtkPolyData* polyData = mesh->aPolyData;

            if(polyData!=NULL)
                append->AddInput(polyData);
        }

vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
mapper->SetInputConnection(append->GetOutputPort());

vtkActor* actor = vtkActor::New();
actor->SetMapper(mapper);

So please advise me what I've to do to tranfer 3DS to actor object.
Thanks
(0036771)
Kitware Robot   
2016-08-12 09:54   
Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current VTK Issues page linked in the banner at the top of this page.