[vtkusers] Writing (imaging) algorithm for which output extent has no relation with input extent.

Maarten Beek beekmaarten at yahoo.com
Tue Jan 14 10:42:25 EST 2014


Thanks David,

Just before reading your email, I already added 

inInfo->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(), inExt);
  inInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT(), inExt, 6);
to the code in RequestUpdateExtent() and that caused the errors to disappear. But it is good to see it seems to work in another filter too ;-)

Something is still wrong in the algorithm code though, because I need to call Update() to get a sensible output. Without it, the output disappears from the renderwindow after a new render (although the algorithm's RequestData is called...?)

Maybe vtkImageHistogram will give me a clue, although I don't see an internal pipeline in it...

Maarten




On Tuesday, January 14, 2014 9:58:09 AM, David Gobbi <david.gobbi at gmail.com> wrote:
 
Hi Maarten,

In order to set the output extent independent of the input extent,
all you should have to do is override RequestInformation() and
RequestUpdateExtent().  It is definitely not necessary to set
UNRESTRICTED_UPDATE_EXTENT or EXACT_EXTENT.
Take a look at vtkImageHistogram.cxx as an example of a filter
that has a 3D input and an independently-sized 2D output.

  David


On Mon, Jan 13, 2014 at 1:45 PM, Maarten Beek <beekmaarten at yahoo.com> wrote:
> Hi all,
>
> I am trying to write an (image) algorithm that generates a 2d image from a
> 3d image.
> I would like to be able to set the resolution of the 2d image.
> The extents of the input and output are therefore unrelated.
>
> I have the algorithm working when I set the algorithm's input in an
> unofficial way (SetNumberOfInputPorts(0), using a custom function SetInput
> instead of SetInputConnection or SetInputData). This way there is no
> pipeline created, which I would like to happen.
>
> I set the whole extent of the algorithm's output to the desired (2d) extent
> in RequestInformation. However, the function
> vtkStreamingDemandDrivenPipeline::VerifyOutputInformation() fails because
> this whole extent miraculously gets re-set to whole (3d) extent of the
> input.
> I have tried to prevent this check using
> outInfo->Set(vtkStreamingDemandDrivenPipeline::UNRESTRICTED_UPDATE_EXTENT(),
> 1) and
> outInfo->Set(vtkStreamingDemandDrivenPipeline::EXACT_EXTENT(), 0) to no
> avail.
>
> How do I prevent the adjustment of the whole extent after I have set it to
> the desired value?
>
> Thanks - Maarten
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20140114/3cf51577/attachment.html>


More information about the vtkusers mailing list