<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hi John,<br>
<br>
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.<br>
<br>
here is some annotated debug output from the filter that shows the
order in which things are called in response to the UI changes:<br>
<br>
<b>I create the filter:</b><br>
<tt>[0]
===============================vtkSQKernelConvolution::vtkSQKernelConvolution<br>
[0]
===============================vtkSQKernelConvolution::SetKernelType<br>
[0]
===============================vtkSQKernelConvolution::SetKernelWidth<br>
[0]
===============================vtkSQKernelConvolution::RequestDataObject<br>
[0]
===============================vtkSQKernelConvolution::RequestInformation<br>
[0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559)<br>
WHOLE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558)<br>
ORIGIN=(0, 0, 0)<br>
SPACING=(1, 1, 1)<br>
nGhost=1<br>
[0]
===============================vtkSQKernelConvolution::RequestDataObject<br>
[0]
===============================vtkSQKernelConvolution::RequestInformation<br>
[0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559)<br>
WHOLE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558)<br>
ORIGIN=(0, 0, 0)<br>
SPACING=(1, 1, 1)<br>
nGhost=1<br>
<br>
</tt><b>Changed the kernel width from 3 to 5 <br>
Hit "apply" in the GUI</b><tt><br>
[0]
===============================vtkSQKernelConvolution::SetKernelWidth<br>
[0]
===============================vtkSQKernelConvolution::RequestDataObject<br>
[0]
===============================vtkSQKernelConvolution::RequestInformation<br>
[0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559)<br>
WHOLE_EXTENT(output)=(2, 10237, 0, 0, 2, 2557)<br>
ORIGIN=(0, 0, 0)<br>
SPACING=(1, 1, 1)<br>
nGhost=2<br>
[0]
===============================vtkSQKernelConvolution::RequestUpdateExtent<br>
[0] WHOLE_EXTENT=(0, 10239, 0, 0, 0, 2559)<br>
UPDATE_EXTENT=(0, 10239, 0, 0, 0, 2559)<br>
nGhosts=2<br>
[0]
===============================vtkSQKernelConvolution::RequestData<br>
[0] WHOLE_EXTENT=(2, 10237, 0, 0, 2, 2557)<br>
UPDATE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559)<br>
UPDATE_EXTENT(output)=(2, 10237, 0, 0, 2, 2557)<br>
ORIGIN(0, 0, 0)<br>
SPACING(1, 1, 1)<br>
<br>
<br>
</tt><b>Changed the kernel width from 5 back to 3 <br>
Hit "apply" in the GUI</b><tt><br>
</tt><tt>[0]
===============================vtkSQKernelConvolution::SetKernelWidth<br>
[0]
===============================vtkSQKernelConvolution::RequestDataObject<br>
[0]
===============================vtkSQKernelConvolution::RequestInformation<br>
[0] WHOLE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559)<br>
WHOLE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558)<br>
ORIGIN=(0, 0, 0)<br>
SPACING=(1, 1, 1)<br>
nGhost=1<br>
[0]
===============================vtkSQKernelConvolution::RequestUpdateExtent<br>
[0] WHOLE_EXTENT=(0, 10239, 0, 0, 0, 2559)<br>
UPDATE_EXTENT=(0, 10239, 0, 0, 0, 2559)<br>
nGhosts=1<br>
[0]
===============================vtkSQKernelConvolution::RequestData<br>
[0] WHOLE_EXTENT=(1, 10238, 0, 0, 1, 2558)<br>
UPDATE_EXTENT(input)=(0, 10239, 0, 0, 0, 2559)<br>
UPDATE_EXTENT(output)=(1, 10238, 0, 0, 1, 2558)<br>
ORIGIN(0, 0, 0)<br>
SPACING(1, 1, 1)<br>
<br>
</tt><br>
On 11/30/2011 12:19 PM, Biddiscombe, John A. wrote:
<blockquote
cite="mid:50320452A334BD42A5EC72BAD2145099068CBD98@MBX10.d.ethz.ch"
type="cite">
<pre wrap="">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: <a class="moz-txt-link-abbreviated" href="mailto:paraview-bounces@paraview.org">paraview-bounces@paraview.org</a> [<a class="moz-txt-link-freetext" href="mailto:paraview-bounces@paraview.org">mailto:paraview-bounces@paraview.org</a>] On Behalf Of Burlen Loring
Sent: 30 November 2011 17:36
To: Jorge Gerardo Peña Pastor
Cc: <a class="moz-txt-link-abbreviated" href="mailto:paraview@paraview.org">paraview@paraview.org</a>
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:
</pre>
<blockquote type="cite">
<pre wrap="">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 <a class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a>
Visit other Kitware open-source projects at
<a class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a>
Please keep messages on-topic and check the ParaView Wiki at:
<a class="moz-txt-link-freetext" href="http://paraview.org/Wiki/ParaView">http://paraview.org/Wiki/ParaView</a>
Follow this link to subscribe/unsubscribe:
<a class="moz-txt-link-freetext" href="http://www.paraview.org/mailman/listinfo/paraview">http://www.paraview.org/mailman/listinfo/paraview</a>
</pre>
</blockquote>
<pre wrap="">
_______________________________________________
Powered by <a class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a>
Visit other Kitware open-source projects at <a class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a>
Please keep messages on-topic and check the ParaView Wiki at: <a class="moz-txt-link-freetext" href="http://paraview.org/Wiki/ParaView">http://paraview.org/Wiki/ParaView</a>
Follow this link to subscribe/unsubscribe:
<a class="moz-txt-link-freetext" href="http://www.paraview.org/mailman/listinfo/paraview">http://www.paraview.org/mailman/listinfo/paraview</a>
</pre>
</blockquote>
<br>
</body>
</html>