[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