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

Radek Lonka lonka.radek at gmail.com
Wed Dec 18 03:52:36 EST 2013


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