[Paraview] ParaView reader plugin - error: Cannot volume render since no point (or cell) data available.

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Wed Dec 18 08:09:33 EST 2013


Great. Glad to hear.

On Wed, Dec 18, 2013 at 3:52 AM, Radek Lonka <lonka.radek at gmail.com> wrote:
> Hi Utkarsh,
>
> thanks a lot for your help!
> I have followed your advice about ext and setting dim, extent, spacing
> and point data and now it works perfectly fine.
>
> Thank you
>
> radek
>
> On 12/17/2013 05:20 PM, Utkarsh Ayachit wrote:
>>
>> Radek,
>>
>> For volume rendering image datasets, ParaView only supports point
>> data. The "ImageScalars" array that you have as PointData doesn't seem
>> to be valid since it doesn't have any tuples (Number of Tuples : 0).
>> Number of point tuples must be exactly equal to : (dimx*dimy*dimz).
>> There are several problems with your code:
>>
>> + In RequestInformation, ext is incorrect. It should be (0,
>> header_size[0]-1, 0, header_size[1]-1, 0, header_size[2]-1)
>> + In RequestData, same extent problem. You don't need to do
>> AllocateScalars() since you're setting the scalars array explicitly.
>> I'd set the dims, extent, spacing and then set the "array" as
>> PointData. It cannot be set as cell-data as well since for that it
>> would need to be of the size (dimx-1)*(dimy-1)*(dimz-1).
>>
>> Look at existing ImageData producers to see how they do this e.g.
>> vtkRTAnalyticSource
>>
>> Utkarsh
>>
>> On Tue, Dec 17, 2013 at 5:48 AM, Radek Lonka <lonka.radek at gmail.com>
>> wrote:
>>>
>>> Hi,
>>>
>>> I am new here and to paraview. I have been trying to create reader plugin
>>> for some data but even it works on my simple qt based application
>>> together
>>> with vtk it does not work in paraview. It loads the data, I can see the
>>> Information with cell data and point data correctly but it deros not
>>> visualize anything and when I use either Volume or slices it says: Cannot
>>> volume render since no point (or cell) data available.
>>>
>>> Could you please help me what am I doing wrong? Here is my code:
>>>
>>> #include "MyReader.h"
>>>
>>> #include "vtkObjectFactory.h"
>>> #include "vtkStreamingDemandDrivenPipeline.h"
>>> #include "vtkInformationVector.h"
>>> #include "vtkInformation.h"
>>> #include "vtkDataObject.h"
>>> #include "vtkSmartPointer.h"
>>> #include <vtkVector.h>
>>> #include <vtkFloatArray.h>
>>> #include <vtkImageFlip.h>
>>> #include <vtkVector.h>
>>> #include <vtkImageData.h>
>>> #include <vtkPointData.h>
>>> #include <vtkCellData.h>
>>>
>>> #include <iostream>
>>>
>>>
>>> vtkStandardNewMacro(MyReader);
>>>
>>> MyReader::EMyReader()
>>> {
>>>    this->FileName = NULL;
>>>    this->SetNumberOfInputPorts(0);
>>>    this->SetNumberOfOutputPorts(1);
>>> }
>>>
>>> int MyReader::RequestInformation (
>>>     vtkInformation*,
>>>     vtkInformationVector**,
>>>     vtkInformationVector* outputVector)
>>> {
>>>
>>>     vtkInformation* outInfo =
>>>        outputVector->GetInformationObject(0);
>>>
>>>     // Here is where you would read the data from the file.
>>>      // Make sure we have a file to read.
>>>      if(!this->FileName)
>>>      {
>>>          vtkErrorMacro("A FileName must be specified.");
>>>          return 0;
>>>      }
>>>      ifstream fin(this->FileName, ios::in | ios::binary);
>>>      if( !fin.is_open() )
>>>      {
>>>          vtkErrorMacro("Error opening file " << this->FileName);
>>>          return 0;
>>>      }
>>>
>>>   //   vtkVector<float, 3> header_origin;
>>>   //   vtkVector<float, 3> header_delta;
>>>   //   vtkVector<int, 3> header_size;
>>>
>>>      fin.read( (char *)(&header_origin[0]), sizeof(header_origin[0]) );
>>>      fin.read( (char *)(&header_origin[1]), sizeof(header_origin[1]) );
>>>      fin.read( (char *)(&header_origin[2]), sizeof(header_origin[2]) );
>>>      fin.read( (char *)(&header_delta[0]), sizeof(header_delta[0]) );
>>>      fin.read( (char *)(&header_delta[1]), sizeof(header_delta[1]) );
>>>      fin.read( (char *)(&header_delta[2]), sizeof(header_delta[2]) );
>>>      fin.read( (char *)(&header_size[0]), sizeof(header_size[0]) );
>>>      fin.read( (char *)(&header_size[1]), sizeof(header_size[1]) );
>>>      fin.read( (char *)(&header_size[2]), sizeof(header_size[2]) );
>>>
>>>      int nx = header_size[0];
>>>      int ny = header_size[1];
>>>      int nz = header_size[2];
>>>      float* data_array = new float[nx*ny*nz];
>>>      fin.seekg(0);
>>>      fin.seekg(36);
>>>   //   fin.read((char *) data_array, nx*ny*nz*sizeof(float));
>>>      fin.close();
>>>
>>>      for (int i = 0; i < nx*ny*nz; i++)
>>>          data_array[i] = i * 0.1;
>>>
>>>      array = vtkFloatArray::New();
>>>      array->SetArray(data_array, nx*ny*nz, 1);
>>>      array->SetName("Conductivity");
>>>
>>>      int ext[6] = {0, 0, 0, header_size[0], header_size[1],
>>> header_size[2]};
>>>      double spacing[3] = {header_delta[0], header_delta[1],
>>> header_delta[2]};
>>>      double origin[3] = {header_origin[0], header_origin[1],
>>> header_origin[2]};
>>>
>>>      outInfo->Set(
>>>                  vtkStreamingDemandDrivenPipeline::
>>>                  WHOLE_EXTENT(),
>>>                  ext, 6);
>>>      outInfo->Set(vtkDataObject::SPACING(),
>>>                   spacing, 3);
>>>      outInfo->Set(vtkDataObject::ORIGIN(), origin, 3);
>>>      vtkDataObject::SetPointDataActiveScalarInfo(
>>>                  outInfo, VTK_FLOAT, 1);
>>>     return 1;
>>>
>>> }
>>>
>>> int MyReader::RequestData(
>>>    vtkInformation *vtkNotUsed(request),
>>>    vtkInformationVector **vtkNotUsed(inputVector),
>>>    vtkInformationVector *outputVector)
>>> {
>>>      vtkInformation* outInfo =
>>>         outputVector->GetInformationObject(0);
>>>      // get the ouptut
>>>      vtkImageData *output = vtkImageData::SafeDownCast(
>>>          outInfo->Get(vtkDataObject::DATA_OBJECT()));
>>>
>>>      output->GetCellData()->SetScalars(array);
>>>      output->GetPointData()->SetScalars(array);
>>>      output->SetNumberOfScalarComponents(1, outInfo);
>>>      output->SetScalarType(VTK_FLOAT, outInfo);
>>>      output->AllocateScalars(VTK_FLOAT, 1);
>>>      int ext[6] = {0, 0, 0, header_size[0], header_size[1],
>>> header_size[2]};
>>>      output->SetExtent(ext);
>>>      output->SetDimensions(header_size[0], header_size[1],
>>> header_size[2]);
>>>      output->SetOrigin(header_origin[0], header_origin[1],
>>> header_origin[2]);
>>>      output->SetSpacing(header_delta[0], header_delta[1], header_delta[2]
>>> *4.0);
>>>
>>>      output->Print(std::cout);
>>>
>>>      return 1;
>>> }
>>>
>>> void MyReader::PrintSelf(ostream& os, vtkIndent indent)
>>> {
>>>    this->Superclass::PrintSelf(os,indent);
>>>
>>>    os << indent << "File Name: "
>>>        << (this->FileName ? this->FileName : "(none)") << "\n";
>>> }
>>>
>>>
>>> also the ouptut of ouptut->Print is:
>>> vtkImageData (0x39d8310)
>>>    Debug: Off
>>>    Modified Time: 83874
>>>    Reference Count: 1
>>>    Registered Events: (none)
>>>    Information: 0x39d1ac0
>>>    Data Released: False
>>>    Global Release Data: Off
>>>    UpdateTime: 0
>>>    Field Data:
>>>      Debug: Off
>>>      Modified Time: 83836
>>>      Reference Count: 1
>>>      Registered Events: (none)
>>>      Number Of Arrays: 0
>>>      Number Of Components: 0
>>>      Number Of Tuples: 0
>>>    Number Of Points: 9594507
>>>    Number Of Cells: 9434880
>>>    Cell Data:
>>>      Debug: Off
>>>      Modified Time: 83853
>>>      Reference Count: 1
>>>      Registered Events: (none)
>>>      Number Of Arrays: 1
>>>      Array 0 name = Conductivity
>>>      Number Of Components: 1
>>>      Number Of Tuples: 9594507
>>>      Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 )
>>>      Interpolate Flags: ( 1 1 1 1 1 0 0 1 )
>>>      Pass Through Flags: ( 1 1 1 1 1 1 1 1 )
>>>      Scalars:
>>>        Debug: Off
>>>        Modified Time: 79025
>>>        Reference Count: 2
>>>        Registered Events: (none)
>>>        Name: Conductivity
>>>        Data type: float
>>>        Size: 9594507
>>>        MaxId: 9594506
>>>        NumberOfComponents: 1
>>>        Information: 0
>>>        Name: Conductivity
>>>        Number Of Components: 1
>>>        Number Of Tuples: 9594507
>>>        Size: 9594507
>>>        MaxId: 9594506
>>>        LookupTable: (none)
>>>        Array: 0x7f29adab3010
>>>      Vectors: (none)
>>>      Normals: (none)
>>>      TCoords: (none)
>>>      Tensors: (none)
>>>      GlobalIds: (none)
>>>      PedigreeIds: (none)
>>>      EdgeFlag: (none)
>>>    Point Data:
>>>      Debug: Off
>>>      Modified Time: 83860
>>>      Reference Count: 1
>>>      Registered Events: (none)
>>>      Number Of Arrays: 1
>>>      Array 0 name = ImageScalars
>>>      Number Of Components: 1
>>>      Number Of Tuples: 0
>>>      Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 )
>>>      Interpolate Flags: ( 1 1 1 1 1 0 0 1 )
>>>      Pass Through Flags: ( 1 1 1 1 1 1 1 1 )
>>>      Scalars:
>>>        Debug: Off
>>>        Modified Time: 83858
>>>        Reference Count: 1
>>>        Registered Events: (none)
>>>        Name: ImageScalars
>>>        Data type: float
>>>        Size: 0
>>>        MaxId: -1
>>>        NumberOfComponents: 1
>>>        Information: 0
>>>        Name: ImageScalars
>>>        Number Of Components: 1
>>>        Number Of Tuples: 0
>>>        Size: 0
>>>        MaxId: -1
>>>        LookupTable: (none)
>>>        Array: (null)
>>>      Vectors: (none)
>>>      Normals: (none)
>>>      TCoords: (none)
>>>      Tensors: (none)
>>>      GlobalIds: (none)
>>>      PedigreeIds: (none)
>>>      EdgeFlag: (none)
>>>    Bounds:
>>>      Xmin,Xmax: (699975, 771975)
>>>      Ymin,Ymax: (8.53492e+06, 8.56222e+06)
>>>      Zmin,Zmax: (0, 25920)
>>>    Compute Time: 83875
>>>    Spacing: (150, 150, 240)
>>>    Origin: (699975, 8.53492e+06, 0)
>>>    Dimensions: (481, 183, 109)
>>>    Increments: (0, 0, 0)
>>>    Extent: (0, 480, 0, 182, 0, 108)
>>>
>>>
>>> Anyone could help me?
>>>
>>>
>>> _______________________________________________
>>> 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 ParaView Wiki at:
>>> http://paraview.org/Wiki/ParaView
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.paraview.org/mailman/listinfo/paraview
>
>


More information about the ParaView mailing list