The way I did this a year or two ago, was using a multiblock reader which had locations of probes (surfaces etc from a cad program) - (this would correspond top one dataset per contour in your example). Then I made a wrapper around vtkIntegrateAttributes which ran the filter once per block and collected the results into a vtkTable for plotting in the standard chartwindow (though the charts have changed a bit since I did this) (NB. Paul, I'm sure you've downloaded these classes before because you asked me about them in the past). All you'd need to do is use the connectivity filter to extract each contour, and place them into a multiblock filter, then use the vtkProbeIntegrationFilter which I don't maintain at the moment, but I'm sure google will find the source.
JB From: paraview-boun...@paraview.org [mailto:paraview-boun...@paraview.org] On Behalf Of Eric E. Monson Sent: 30 September 2010 20:04 To: Paul Edwards Cc: paraview list Subject: Re: [Paraview] plotting integrated values of cutting plane at various offsets 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<mailto: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<mailto: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<mailto: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<mailto: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<mailto: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<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<mailto: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> [mailto: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<http://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<http://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