[Paraview] Custom plugin reader with time series

Dominik Szczerba dominik at itis.ethz.ch
Tue Jul 29 11:54:34 EDT 2008


Dear Mike,

Sorry for warming up the old meal but it is only now that I could fully 
appreciate your solution. After long weeks of frustration with my hdf5 
reader derived from vtkDataReader - and subsequent segfaults reported 
before - I tried your way of deriving from UnstructuredGridAlgorithm : 
and my problem is magically gone, with no other changes than that. I 
have not yet tried time series, so it is not unlikely I will have some 
questions later. For the moment, thanks a lot.

Dominik

Mike Jackson wrote:
> Take a look at <http://titanium.imts.us/viewvc/Task_4/PVDislocation/src/DislocationReaders/vtkPrdsMultiOutDislocationReader.cxx?view=markup>
>  to see how I did a time series reader.
> 
> Basically in RequestInformation  you will need to determine the the
> range of times that your data covers, probably by opening each file or
> some other means. Then set
>     double timeRange[2];
>     timeRange[0] = lowestTimeValue
>     timeRange[1] = highesetTimeValue
>     outInfo->Set(vtkStreamingDemandDrivenPipeline::TIME_RANGE(),
> timeRange, 2);
> 
> Also, you will need to have the following in your header:
> 
>    vtkSetMacro(TimeStep, int);
>    vtkGetMacro(TimeStep, int);
> 
>  int GetNumberOfTimeSteps();
> 
> Now, down in the RequestData() Method you can get the requested time
> step from the
> pipeline and then open and read the data from the proper data file.
> 
> int tsLength = outInfo->Length(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
>   double* steps = outInfo->Get(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
>   // Check if a particular time was requested.
>   if(outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()))
>   {
>     // Get the requested time step. We only supprt requests of a single time
>     // step in this reader right now
>     double *requestedTimeSteps =
> outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS());
>     this->TimeValue = requestedTimeSteps[0];
> 
>     // find the first time value larger than requested time value
>     // this logic could be improved
>     int cnt = 0;
>     while (cnt < tsLength-1 && steps[cnt] < this->TimeValue)
>       {
>       cnt++;
>       }
>     this->ActualTimeStep = cnt;
>   }
> 
>   if (this->TimeStep > -1)
>   {
>     this->ActualTimeStep = this->TimeStep;
>   }
> 
>   if (this->ActualTimeStep >= this->TimeStepRange[0] &&
> this->ActualTimeStep <= this->TimeStepRange[1]) {
>     vtkSmartPointer<DislocationReader> reader =
> vtkSmartPointer<DislocationReader>::New();
>     reader->SetFileName(this->FileName);
>     reader->SetTimeStep(this->ActualTimeStep);
>     //reader->SetInformationVector(outputVector);
>     reader->SetFileOffsets(this->FileOffsets);
>     reader->read();
>     vtkUnstructuredGrid* grid;
>     grid = reader->GetDislocations();
>     dislocations->ShallowCopy(grid);
> 
>    // dislocations->SetBlock(0, grid);    // Block 0 is the Dislocation Data
>     grid = reader->GetSimulationBox();
>     simBox->ShallowCopy(grid);
>     //dislocations->SetBlock(1, grid); // Block 1 is the Simulation Limits
>   } else {
>       std::cout << "vtkPrdsMultiOutDislocationReader: Timestep was out
> of Range: " << this->ActualTimeStep << std::endl;
>       std::cout << "vtkPrdsMultiOutDislocationReader: Timestep Range:"
> << this->TimeStepRange[0] << " -> " << this->TimeStepRange[1] <<
> std::endl;
>       return 0;
>   }
> 
> 
> This code is specific to my case where I have a whole separate reader
> for my data where I feed it the name of the file to read and then tell
> it to read the file and get the output. This may also be the case for
> you also.
> 
> Hope some of the helps.
> 
> Mike
> 
> On Sat, May 10, 2008 at 6:03 AM, Dominik Szczerba
> <domi at vision.ee.ethz.ch> wrote:
>> Hi,
>> I have successfully implemented a reader for my data as a PV plugin. It
>> loads separate files correctly, refuses, however, to read the whole series
>> (file_01.h5, file_02.h5, etc.). How do I go about achieving the same effect
>> as the native readers to have a series as transient data?
>> Thanks for any hints.
>> --
>> Dominik Szczerba, Ph.D.
>> Computer Vision Lab CH-8092 Zurich
>> http://www.vision.ee.ethz.ch/~domi
>> _______________________________________________

-- 
Dominik Szczerba, Ph.D.
Foundation for Research
on Information Technologies in Society
http://www.itis.ethz.ch


More information about the ParaView mailing list