Yeah, I wondered if you were needing the area. 

If you want to compare the speed you could also try using a Python script 
(assigned to a macro button) which sets up this pipeline in the GUI for you 
automatically based on your desired contour values, branching out your pipeline 
into a bunch of Contour plus Integrate Variables filters, and then all of the 
outputs appended in the end...

There should also be a way to do the Contouring before the programmable filter, 
and then set up, pretty much like you did, a series of Threshold plus 
IntegrateAttributes filters and then pull all the results into a table at the 
end.

Anyway, glad you figured it out.
-Eric

On Sep 30, 2010, at 1:09 PM, Paul Edwards wrote:

> Thanks Eric - unfortunately your calculation won't take into account the area 
> (my data is coming from an unstructured grid).  I've put in my solution with 
> integrate attributes.  It's a bit slow calculating the contour each time 
> though....
> 
> 8<--------------------------------------------------
> from vtkPVFiltersPython import vtkIntegrateAttributes
> 
> scalar_name = "span"
> scalar_min = 0.01
> scalar_max = 0.99
> scalar_steps = 10
> 
> input = self.GetInput()
> output = self.GetOutput()
> 
> aa = vtk.vtkAssignAttribute()
> aa.SetInputConnection(input.GetProducerPort())
> aa.Assign(scalar_name, "SCALARS", "POINT_DATA")
> aa.Update()
> 
> appender = vtk.vtkAppendFilter()
> 
> scalar_curr = scalar_min
> scalar_step = (scalar_max - scalar_min) / (scalar_steps - 1.0)
> for i in range(0, scalar_steps):
> 
>     contour = vtk.vtkContourFilter()
>     contour.SetInput(aa.GetOutput())
>     contour.SetValue(0, scalar_curr)
>     contour.Update()
> 
>     iv = vtkIntegrateAttributes()
>     iv.SetInput(contour.GetOutput())
>     iv.Update()
> 
>     appender.AddInput(iv.GetOutput())
>     scalar_curr += scalar_step
> 
> appender.Update()
> output.ShallowCopy(appender.GetOutput())
> -------------------------------------------------->8
> 
> 
> On 30 September 2010 17:48, Eric E. Monson <emon...@cs.duke.edu> wrote:
> Was having trouble doing the sum using numpy instead of the python built-in 
> sum(), but I figured it out. It's just slightly cleaner this way, but I don't 
> know which is faster.
> 
> Of course, I still don't know if this does what you are looking for, but I 
> thought I'd pass it along anyway... :)  (I had also been using "nice" values 
> for my contours, so this version changes the original test for rt==val to be 
> more robust to roundoff errors.)
> 
> rt = inputs[0].PointData['RTData']
> rtg = inputs[0].PointData['RTGradMag']
> rt_set = sorted(set(rt.reshape((-1,)).tolist()))
> 
> sums = vtk.vtkDoubleArray()
> sums.SetName('SummedValues')
> sums.SetNumberOfComponents(1)
> conts = vtk.vtkDoubleArray()
> conts.SetName('ContourValues')
> conts.SetNumberOfComponents(1)
> 
> for val in rt_set:
>       summed_val = numpy.sum(rtg[numpy.abs(rt-val)<0.0001], axis=1)
>       conts.InsertNextValue(val)
>       sums.InsertNextValue(summed_val[0])
>       print val, summed_val[0]
> 
> pdo = self.GetTableOutput()
> pdo.AddColumn(conts)
> pdo.AddColumn(sums)
> 
> On Sep 30, 2010, at 12:11 PM, Eric E. Monson wrote:
> 
>> That's great.
>> 
>> This is very rough, but I was thinking of something like this after setting 
>> the programmable filter Output Data Set Type to vtkTable (to test I've 
>> created a Wavelet Source and run it through a Gradient filter, and then a 
>> Calculator which creates a new value called RTGradMag, which is the 
>> magnitude of the gradient vector, then the data is Contoured by RTData value 
>> with Compute Scalars checked ON):
>> 
>> rt = inputs[0].PointData['RTData']
>> rtg = inputs[0].PointData['RTGradMag']
>> rt_set = sorted(set(rt.reshape((-1,)).tolist()))
>> 
>> sums = vtk.vtkDoubleArray()
>> sums.SetName('SummedValues')
>> sums.SetNumberOfComponents(1)
>> conts = vtk.vtkDoubleArray()
>> conts.SetName('ContourValues')
>> conts.SetNumberOfComponents(1)
>> 
>> for val in rt_set:
>>      summed_val = sum(rtg[rt==val].reshape((-1,)).tolist())
>>      conts.InsertNextValue(val)
>>      sums.InsertNextValue(summed_val)
>>      print val, summed_val
>> 
>> pdo = self.GetTableOutput()
>> pdo.AddColumn(conts)
>> pdo.AddColumn(sums)
>> 
>> On Sep 30, 2010, at 11:45 AM, Paul Edwards wrote:
>> 
>>> I've found out how to access the "Integrate Attributes"  - I can import it 
>>> from vtkPVFiltersPython :)
>>> 
>>> On 30 September 2010 16:17, Paul Edwards <paul.m.edwa...@gmail.com> wrote:
>>> Hi Eric,
>>> 
>>> You are right - I would like one row of integrated values per contour.  I 
>>> don't understand how I can do this without "Integrate Attributes" though.
>>> 
>>> Regards,
>>> Paul
>>> 
>>> 
>>> On 30 September 2010 15:30, Eric E. Monson <emon...@cs.duke.edu> wrote:
>>> Could you be a bit more clear about what you're trying to do? It sounds 
>>> like you're trying to take your contours and integrate some attributes over 
>>> each of the contours separately so you get a table which contains as many 
>>> rows as the number of contours (and maybe separate columns for each 
>>> attribute)?
>>> 
>>> As I was playing around I had trouble creating a programmable filter which 
>>> has a polygonal mesh as input, but a vtkTable as output... Does anyone know 
>>> if this is possible? Or, does vtkDataObjectToTable filter exist for 
>>> ParaView so the data could be run through that before the programmable 
>>> filter?
>>> 
>>> If I'm understanding what you're trying to do, it seems like it should be 
>>> possible to implement with a programmable filter if this piece can be 
>>> accomplished, even without the Integrate Attributes filter.
>>> 
>>> -Eric
>>> 
>>> On Sep 30, 2010, at 10:20 AM, Paul Edwards wrote:
>>> 
>>>> Ah - thanks for the tip!
>>>> 
>>>> Does anyone know the way to call this in a programmable filter?  Or, is it 
>>>> even wrapped for python?
>>>> 
>>>> Thanks,
>>>> Paul
>>>> 
>>>> On 30 September 2010 14:51, Eric E. Monson <emon...@cs.duke.edu> wrote:
>>>> Hey Paul,
>>>> 
>>>> I don't have an answer to your problem, but just wanted to point out that 
>>>> vtkIntegrateAttributes is not part of VTK proper, but is listed on the 
>>>> ParaView docs pages:
>>>> 
>>>> http://www.paraview.org/ParaView3/Doc/Nightly/html/classvtkIntegrateAttributes.html
>>>> 
>>>> -Eric
>>>> 
>>>> ------------------------------------------------------
>>>> Eric E Monson
>>>> Duke Visualization Technology Group
>>>> 
>>>> 
>>>> On Sep 30, 2010, at 6:00 AM, Paul Edwards wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> I'm trying to create a table containing several rows of integrated values 
>>>>> for different contours with a programmable filter but I can't see how to 
>>>>> use the "Integrate Variables" filter.  In filters.xml it show as being 
>>>>> called vtkIntegrateAttributes but I cannot create this in python.  Also, 
>>>>> there is no webpage for this class on the nightly documentation site.
>>>>> 
>>>>> Any help is appreciated,
>>>>> Paul
>>>>> 
>>>>> On 30 September 2010 08:57, Biddiscombe, John A. <biddi...@cscs.ch> wrote:
>>>>> Sorry Paul. I must have clicked reply instead of replay-all. I intended 
>>>>> to post to the list
>>>>> 
>>>>>  
>>>>> JB
>>>>> 
>>>>>  
>>>>>  
>>>>> From: Paul Edwards [mailto:paul.m.edwa...@gmail.com] 
>>>>> Sent: 30 September 2010 09:48
>>>>> To: Biddiscombe, John A.
>>>>> Subject: Re: [Paraview] plotting integrated values of cutting plane at 
>>>>> various offsets
>>>>> 
>>>>>  
>>>>> Thanks John - I'll have a go with a python programmable filter today.
>>>>> 
>>>>>  
>>>>> Regards,
>>>>> 
>>>>> Paul
>>>>> 
>>>>>  
>>>>> On 30 September 2010 07:19, Biddiscombe, John A. <biddi...@cscs.ch> wrote:
>>>>> 
>>>>> Paul
>>>>> 
>>>>>  
>>>>> I’d knock up a filter which stores the desired value each time it 
>>>>> executes, and increments the list by one on each execution. This would 
>>>>> build up a list (in a polydata or vtkTable for example) which could then 
>>>>> be plotted on a graph. A reset button on a custom panel can be used to 
>>>>> clear the values. I’ve done this a couple of times for time related 
>>>>> filters when I wanted to plot something unusual over T.
>>>>> 
>>>>>  
>>>>> JB
>>>>> 
>>>>>  
>>>>> From: paraview-boun...@paraview.org 
>>>>> [mailto:paraview-boun...@paraview.org] On Behalf Of Paul Edwards
>>>>> Sent: 29 September 2010 15:53
>>>>> To: paraview
>>>>> Subject: [Paraview] plotting integrated values of cutting plane at 
>>>>> various offsets
>>>>> 
>>>>>  
>>>>> Hi,
>>>>> 
>>>>>  
>>>>> I have created a contour and integrated the output to produce a single 
>>>>> value.  Is there a way to plot this value as the contour changes?  I have 
>>>>> created an animation for the isosurface but cannot see a filter that I 
>>>>> could use to plot these values across the range.
>>>>> 
>>>>>  
>>>>> Thanks in advance,
>>>>> 
>>>>> Paul
>>>>> 
>>>>>  
>>>>> 
>>>>> _______________________________________________
>>>>> 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

Reply via email to