[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