Hi Burlen, I'm aware of the fact that reducing the extent is easier than expanding it (I'm lucky to be on the bright side). I haven't checked that filter yet, but I think I've done the same thing in of my tests. The problem still is that you change your extent as a result of a known parameter before running the algorithm, which is not my case. So I think that the easiest solution will be the one I told you before, instead of modifying the extent inside my algorithm do it in two different filters... We'll see how it works out...
Anyway I will check your filter just in case I can learn something new. Thanks. 2011/11/30 Burlen Loring <[email protected]>: > Hi John, > > This filter doesn't make use of a custom panel. PV is pushing the modified > values after the "apply". then RequestInformation is executed giving one a > chance to change the WHOLE_EXTENT based on some user input. However, I > recall being told that shrinking WHOLE_EXT is ok, but growing it may lead to > throwing one self from tall buildings. Of course there may be complications > that my use case doesn't hit. > > here is some annotated debug output from the filter that shows the order in > which things are called in response to the UI changes: > > I create the filter: > [0] > ===============================vtkSQKernelConvolution::vtkSQKernelConvolution > [0] ===============================vtkSQKernelConvolution::SetKernelType > [0] ===============================vtkSQKernelConvolution::SetKernelWidth > [0] ===============================vtkSQKernelConvolution::RequestDataObject > [0] > ===============================vtkSQKernelConvolution::RequestInformation > [0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559) > WHOLE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558) > ORIGIN=(0, 0, 0) > SPACING=(1, 1, 1) > nGhost=1 > [0] ===============================vtkSQKernelConvolution::RequestDataObject > [0] > ===============================vtkSQKernelConvolution::RequestInformation > [0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559) > WHOLE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558) > ORIGIN=(0, 0, 0) > SPACING=(1, 1, 1) > nGhost=1 > > Changed the kernel width from 3 to 5 > Hit "apply" in the GUI > [0] ===============================vtkSQKernelConvolution::SetKernelWidth > [0] ===============================vtkSQKernelConvolution::RequestDataObject > [0] > ===============================vtkSQKernelConvolution::RequestInformation > [0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559) > WHOLE_EXTENT(output)=(2, 10237, 0, 0, 2, 2557) > ORIGIN=(0, 0, 0) > SPACING=(1, 1, 1) > nGhost=2 > [0] > ===============================vtkSQKernelConvolution::RequestUpdateExtent > [0] WHOLE_EXTENT=(0, 10239, 0, 0, 0, 2559) > UPDATE_EXTENT=(0, 10239, 0, 0, 0, 2559) > nGhosts=2 > [0] ===============================vtkSQKernelConvolution::RequestData > [0] WHOLE_EXTENT=(2, 10237, 0, 0, 2, 2557) > UPDATE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559) > UPDATE_EXTENT(output)=(2, 10237, 0, 0, 2, 2557) > ORIGIN(0, 0, 0) > SPACING(1, 1, 1) > > > Changed the kernel width from 5 back to 3 > Hit "apply" in the GUI > [0] ===============================vtkSQKernelConvolution::SetKernelWidth > [0] ===============================vtkSQKernelConvolution::RequestDataObject > [0] > ===============================vtkSQKernelConvolution::RequestInformation > [0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559) > WHOLE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558) > ORIGIN=(0, 0, 0) > SPACING=(1, 1, 1) > nGhost=1 > [0] > ===============================vtkSQKernelConvolution::RequestUpdateExtent > [0] WHOLE_EXTENT=(0, 10239, 0, 0, 0, 2559) > UPDATE_EXTENT=(0, 10239, 0, 0, 0, 2559) > nGhosts=1 > [0] ===============================vtkSQKernelConvolution::RequestData > [0] WHOLE_EXTENT=(1, 10238, 0, 0, 1, 2558) > UPDATE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559) > UPDATE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558) > ORIGIN(0, 0, 0) > SPACING(1, 1, 1) > > > On 11/30/2011 12:19 PM, Biddiscombe, John A. wrote: > > Burlen, > > Nice explanation. I didn't look at the plugin code, but is it safe to assume > (and the OP might not pick up on this) that in order to trigger an > UpdateInformation after changing parameters, you have to have a custom panel > - and do a proxy->UpdateInformation in there? (i.e. before the view does an > update later and messes up the extents if the extra information update > hasn't occurred) > > JB > > -----Original Message----- > From: [email protected] [mailto:[email protected]] > On Behalf Of Burlen Loring > Sent: 30 November 2011 17:36 > To: Jorge Gerardo Peña Pastor > Cc: [email protected] > Subject: Re: [Paraview] Problem after updating from Paraview 3.8.1 to > Paraview 3.12 > > Hi Jorge, > > You may want to take a look at vtkSQKernelConvolution filter in > Plugins/SQToolKit of 3.12 sources. This is an example of an extent based > filter that produces smaller WHOLE_EXTENT on its output based on user > selection in the PV GUI. This filter is working fine in 3.12. > > What's going on in this filter: > > The user selects a kernel size in the GUI. The filter needs > kernelWidth/2 ghost cells to make its computations. On the interior of the > WHOLE_EXTENT we can generate ghost cells using communication. > However we don't have ghost cells outside of the WHOLE_EXTENT. In order to > overcome we shrink the WHOLE_EXTENT in the output of the > vtkSQKernelConvolution filter using the original cells that are outside this > smaller extent on the input as ghost data. > > Any Modification to the kerneWidth in the GUI forces vtkSQKernelConvolution > RequestInformation to run where we shrink WHOLE_EXTENT on the output info by > the number of ghost cells we need. > > vtkSQKernelConvolution RequestUpdateExtent runs next, where we grow the > UPDATE_EXTENT going upstream to include the number of ghost cells we need. > Upstream vtkSQImageGhosts RequestUpdateExtent will intercept and short > circuit the larger update extent from traveling any further upstream. in > vtkSQImageGhosts RequestData the necessary communication to generate the > ghost cells are made. The short circuit by the vtkSQImageGhosts > ReqquestUpdateExtent is important! if not then the new modified update > extents continue up stream forcing the re-execution of the entire pipeline, > including the reader which is expensive. > > In vtkSQKernelConvolution RequestData, the input with ghost data is used to > compute the convolution producing an image with smaller WHOLE_EXTENT. > In terms of the keys etc nothing is special about our RequestData. > > Hope this helps > Burlen > > On 11/15/2011 07:33 AM, Jorge Gerardo Peña Pastor wrote: > > Hello, > > I've managed to run a Paraview based application created with Paraview > 3.8.1 using Paraview 3.12, but one of my filters is reporting an error > it didn't before. > > My vtkAlgorithm is a sub-class of vtkImageAlgorithm, which as a result > of processing the input data generates a new vtkImageData which is > smaller than the original one. > Before, I managed to use that filter in my application, but now I get > the following error: > ERROR: > src/ParaView-3.12.0/VTK/Filtering/vtkStreamingDemandDrivenPipeline.cxx > , > line 1009 > vtkPVCompositeDataPipeline (0x4c3dca0): The update extent specified in > the information for output port 0 on algorithm > vtkConnectedThresholdImageFilter(0x4c3c8d0) is 0 698 0 535 0 114, > which is outside the whole extent 408 421 86 106 0 1. > > Inside my RequestData I've tried changing all possible combinations of > whole extent, update extent and extent for both output and > outputInformation without success. > > I've found several threads talking about changing > StreamDrivenPipeline::WHOLE_EXTENT inside RequestUpdateExtent, but in > order to change the value there I need to execute before at least one > time my algorithm because the extent depends on the result of the > algorithm. > > Could someone point me in the right direction to make this work with > Paraview 3.12? > > Thank you for your help. > _______________________________________________ > 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 > > _______________________________________________ > 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 > > _______________________________________________ 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
