[Paraview] ParaView reader plugin - error: Cannot volume render since no point (or cell) data available.
Utkarsh Ayachit
utkarsh.ayachit at kitware.com
Tue Dec 17 11:20:30 EST 2013
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