[Paraview] What part of the pipeline is producing the request for UPDATE_EXTENT?

Mike Jackson imikejackson at gmail.com
Wed Feb 13 14:30:07 EST 2008


Thank you so very much. I was able to implement what you wrote and  
now my reader is behaving much better in ParaView. I have put in some  
additional checks to see if either the input file or the VOI has  
changed to cut down on reading information from the file when it  
hasn't changed.

Thanks for everyone sticking with me
Mike Jackson

On Feb 13, 2008, at 12:48 PM, Moreland, Kenneth wrote:

> In the example you give, you should just report 500, 1500, 200,  
> 1800, 100, 105 in WHOLE_EXTENT and respond to whatever  
> UPDATE_EXTENT the pipeline asks you for.  If you are in serial  
> mode, UPDATE_EXTENT should be set to WHOLE_EXTENT.  On a parallel  
> server, ParaView will automatically break up the WHOLE_EXTENT and  
> set the UPDATE_EXTENT on each process to a different piece.  In  
> either case, just respond to the UPDATE_EXTENT that the pipeline  
> gives you and that should work.
>
> How is this not working?  Are we talking about the multiple calls  
> to RequestData again?  Could it be that you have set the wrong  
> extents information on the output data?
>
> -Ken
>
>> -----Original Message-----
>> From: paraview-bounces+kmorel=sandia.gov at paraview.org  
>> [mailto:paraview-
>> bounces+kmorel=sandia.gov at paraview.org] On Behalf Of Mike Jackson
>> Sent: Wednesday, February 13, 2008 10:23 AM
>> To: ParaView
>> Subject: Re: [Paraview] What part of the pipeline is producing the  
>> request
>> for UPDATE_EXTENT?
>>
>> I understand. Now. my problem. In RequestInformation I read part of
>> my file to get what I am assuming should be the "WHOLE_EXTENT", which
>> is 7334 x 8448 x 200 as a uint8 vtkImageData object. This is too
>> large to fit into memory the machines that this will be run on. I
>> placed some auto-generated gui widgets in ParaView for the customer
>> to select a VOI. I have used the normal vtk macros for the set/get
>> methods for VOI.
>>
>> So say the customer is only interested in a VOI of 500, 1500, 200,
>> 1800, 100, 105. Could you lay out what calls should be made in each
>> of the RequestInformation and RequestData methods? (just the major
>> things we have been talking about, I can fill in the rest). I have
>> tried lots of different configurations and the only ones that seem to
>> work are the ones that are NOT recommended to do.
>>
>> If you want the entire vtkH5RoboMetReader.h/cpp, I can send that
>> along also.
>>
>> Thanks
>> Mike.
>>
>>
>> On Feb 13, 2008, at 12:10 PM, Moreland, Kenneth wrote:
>>
>>> In the call to loadDataFromMXAFile, you should be using the value
>>> in UPDATE_EXTENT, not VOI.  To review, WHOLE_EXTENT is what the
>>> reader reports to the downstream components what data is available
>>> (and reporting VOI is an easy way to limit the data to what the
>>> user wants).  UPDATE_EXTENT is the part of the data that the
>>> downstream components want.  If you return with data that does not
>>> match up to UPDATE_EXTENT, the pipeline might execute again trying
>>> to get the range of data it asked for.
>>>
>>> -Ken
>>>
>>>> -----Original Message-----
>>>> From: paraview-bounces+kmorel=sandia.gov at paraview.org
>>>> [mailto:paraview-
>>>> bounces+kmorel=sandia.gov at paraview.org] On Behalf Of Mike Jackson
>>>> Sent: Wednesday, February 13, 2008 9:48 AM
>>>> To: ParaView
>>>> Subject: Re: [Paraview] What part of the pipeline is producing the
>>>> request
>>>> for UPDATE_EXTENT?
>>>>
>>>> Ok, so now I have
>>>> RequestInformation()
>>>> {
>>>> ...
>>>> outInfo->Set( vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),  
>>>> this-
>>>>> VOI, 6 );
>>>> ...
>>>> }
>>>>
>>>> and RequestData() I load the data into a newly created vtkImageData
>>>> object, then shallow copy into the
>>>> actual output data object:
>>>>
>>>> vtkInformation* outInfo = outputVector->GetInformationObject(0);
>>>> vtkImageData* output = vtkImageData::SafeDownCast(outInfo->Get
>>>> (vtkDataObject::DATA_OBJECT()));
>>>> vtkTypeInt32 error = 1;
>>>> vtkSmartPointer<vtkImageData> imageData =
>>>> vtkSmartPointer<vtkImageData>::New();
>>>> error = loadDataFromMXAFile(outInfo, imageData, this->VOI);
>>>> output->ShallowCopy(imageData);
>>>>
>>>> In paraview from CVS this causes multiple executions of the  
>>>> pipeline.
>>>> Before, where I thought I had "fixed" the issue I was calling:
>>>>
>>>> outInfo->Set( vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),  
>>>> this-
>>>>> VOI, 6 );
>>>>
>>>> in RequestData(). Berk said that wasn't a good idea so I removed  
>>>> it.
>>>> So now I am back to square 1 again.
>>>>
>>>> Thanks
>>>> Mike
>>>>
>>>> On Feb 13, 2008, at 10:17 AM, Kent Eschenberg wrote:
>>>>
>>>>> Indeed, each of the my routines to set the VOI bounds (one each  
>>>>> for
>>>>> the min/max in X/Y/Z) calls Modified().
>>>>>
>>>>> During development I had temporary print statements everywhere and
>>>>> as I remember it these routines to set the VOI were called both
>>>>> before and after RequestInformation.
>>>>>
>>>>> Kent
>>>>> Pittsburgh Supercomputing Center
>>>>>
>>>>> Moreland, Kenneth wrote:
>>>>>> I belive it is supposed to work that your SetVOI() method should
>>>>>> call modified, which will in turn cause the pipeline to call
>>>>>> RequestInformation() on the next update.  Make sure that SetVOI()
>>>>>> is actually calling Modified().
>>>>>> -Ken
>>>>>> On 2/12/08 9:26 PM, "Mike Jackson" <imikejackson at gmail.com>  
>>>>>> wrote:
>>>>>>     Pretty sure that was where we were going to end up BUT as far
>>>>>> as I
>>>>>>     can tell, the order of execution is :
>>>>>>     RequestInformation()
>>>>>>     SetVOI() // From the GUI in ParaView
>>>>>>     RequestData();
>>>>>>     So we never really get a chance to get the VOI until
>>>>>> RequestData
>>>>>>     fires.. Is that what you have seen?
>>>>>>     Mike
>>>>>>     On Feb 12, 2008, at 11:21 PM, Kent Eschenberg wrote:
>>>>>>>  Mike,
>>>>>>>
>>>>>>>  I accomplished what you want with one of our custom
>>>>>> readers. In my
>>>>>>>  opinion the documentation for RequestInformation, RequestData,
>>>>>>>  extents, etc. is so poor that it is useless.
>>>>>>>
>>>>>>>  At RequestInformation I read enough of the input to get the
>>>>>> overall
>>>>>>>  input array size; apply the user-selected VOI; and return the
>>>>>>>  desired subset as the whole extent. At RequestData I read
>>>>>> the rest.
>>>>>>>  I just don't bother letting VTK/ParaView manage the
>>>>>> selection of
>>>>>>>  the VOI. This has worked for 2.6.1 through 3.2.1.
>>>>>>>
>>>>>>>  Kent
>>>>>>>  Pittsburgh Supercomputing Center
>>>>>>>
>>>>>>>  Mike Jackson wrote:
>>>>>>>> I can do that but I don't think it will work.
>>>>>>>> In paraview, I have managed to set an auto-generated UI
>>>>>> for the
>>>>>>>> VOI. Now, the user opens our file, RequestInformation is
>>>>>> run (I
>>>>>>>> can put some sane defaults for the VOI) and things are ok
>>>>>> so far.
>>>>>>>> Now the user clicks "Apply" and then SetVOI is called with
>>>>>> the
>>>>>>>> values from the GUI and then RequestData() is called after
>>>>>> that.
>>>>>>>> So where do I update WHOLE_EXTENT? Or just take the values
>>>>>> from
>>>>>>>> the VOI, create a vtkImageObject from that, and then just
>>>>>>>> ShallowCopy to the output object?
>>>>>>>> I'm a bit confused at this point. If our case is NOT a
>>>>>> standard
>>>>>>>> use case for the pipeline than I guess I can look more
>>>>>> seriously
>>>>>>>> into developing a full blown Plugin for our data file.
>>>>>>>> Mike
>>>>


More information about the ParaView mailing list