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