[Paraview] Temporal shift with Python Programmable Filter

Moreland, Kenneth kmorel at sandia.gov
Tue Feb 5 13:09:04 EST 2008


The data object's time is stored in an information object maintained by the data object with the key vtkDataObject::DATA_TIME_STEPS().  In C++, you can get this with something like

  data->GetInformation()->Get(vtkDataObject::DATA_TIME_STEPS()).

You might try applying the following patch to vtkTemporalShiftScale.cxx.  It adjusts the time stamp on the internal data objects so that they match the time requested.  I never checked this in because I do not know if it will adversely affect anything else.  If it fixes your problem, we should consider it.

-Ken


kmorel1 1> cvs diff -u vtkTemporalShiftScale.cxx
Index: vtkTemporalShiftScale.cxx
===================================================================
RCS file: /cvsroot/ParaView3/ParaView3/VTK/Hybrid/vtkTemporalShiftScale.cxx,v
retrieving revision 1.4
diff -u -r1.4 vtkTemporalShiftScale.cxx
--- vtkTemporalShiftScale.cxx   7 Sep 2006 18:01:31 -0000       1.4
+++ vtkTemporalShiftScale.cxx   5 Feb 2008 18:07:06 -0000
@@ -121,7 +121,18 @@
   outData->GetInformation()->Set(vtkDataObject::DATA_TIME_STEPS(),
                                  outTimes, inLength);
   delete [] outTimes;
-
+
+  // adjust the time steps of the internal data
+  for (i = 0; i < (int)outData->GetNumberOfTimeSteps(); i++)
+    {
+    vtkInformation *dataInfo = outData->GetDataSet(i, 0)->GetInformation();
+    int numtimes = dataInfo->Length(vtkDataObject::DATA_TIME_STEPS());
+    double *times = dataInfo->Get(vtkDataObject::DATA_TIME_STEPS());
+    for (int j = 0; j < numtimes; j++)
+      {
+      times[j] = times[j]*this->Scale + this->Shift;
+      }
+    }
   return 1;
 }


> -----Original Message-----
> From: Eric Monson [mailto:emonson at cs.duke.edu]
> Sent: Tuesday, February 05, 2008 10:39 AM
> To: Moreland, Kenneth
> Cc: ParaView List
> Subject: Re: [Paraview] Temporal shift with Python Programmable Filter
>
> Hey Ken,
>
> That sounds like a reasonable guess. If that's the problem, do you
> know if there's a way to force the update to the correct time? I also
> can't seem to find any way of getting at the data object's time value...
>
> It's just tough for me to figure out how to debug this one, unless
> someone can see something I've obviously left out.
>
> Thanks,
> -Eric
>
>
> On Feb 5, 2008, at 12:03 PM, Moreland, Kenneth wrote:
>
> > This is a total guess, but maybe it has something to do with the
> > time value placed in the data set.  Data objects often hold the time
> > value on which they are supposed to be defined.  Maybe when you copy
> > the shifted data, its time value is also shifted.  When you then
> > step the time, the new time now matches the shifted time from the
> > last time update.  Perhaps the pipeline sees the time match and does
> > not update the pipeline.
> >
> > -Ken
> >
> >> -----Original Message-----
> >> From: paraview-bounces+kmorel=sandia.gov at paraview.org [mailto:paraview-
> >> bounces+kmorel=sandia.gov at paraview.org] On Behalf Of Eric Monson
> >> Sent: Monday, February 04, 2008 10:11 AM
> >> To: ParaView List
> >> Subject: [Paraview] Temporal shift with Python Programmable Filter
> >>
> >> Hey All,
> >>
> >> This may seem like an odd question, but I think the answer may help
> >> clarify a larger problem I'm having...
> >>
> >> I'm trying to calculate the velocity vectors for diffusing particles,
> >> and the way I'm doing it right now is to feed two copies of my
> >> Unstructured Grid data into the Python Programmable Filter (PPF). The
> >> first copy has a time shift of 0, and the second one has Shift = 1.
> >> These are both Temporal Data Sets, and so I've been accessing the
> >> underlying Unstructured Grids by doing this:
> >>
> >> in0 = self.GetInputDataObject(0,0).GetDataSet(0,0)
> >> in1 = self.GetInputDataObject(0,1).GetDataSet(0,0)
> >>
> >> I force the PPF output to vtkUnstructuredGrid, and I have been making
> >> the output equivalent to one of the input points like so:
> >>
> >> out1 = self.GetOutput()
> >> out1.DeepCopy(in1)
> >>
> >> (In the complete calculation I later add a vtkFloatArray to "out1"
> >> containing the calculated velocity vectors.)
> >>
> >> The odd thing I see is that if the output is a copy of the Shift = 0
> >> point, I can increment time forward and backwards (arrow click on
> >> Time
> >> control) and everything looks fine. If the output is a copy of the
> >> Shift = 1 point, then on every other click it increments, and on the
> >> other clicks it doesn't move or change its scalar values. (If Shift =
> >> -1, then it increments properly backwards, but not forwards.)
> >>
> >> Is there some sort of update forcing I should be doing that I'm not?
> >> Is this an unreliable way of accessing the data from within the
> >> Temporal Data Sets?
> >>
> >> (I seemingly randomly get cases where my calculated velocity vector
> >> goes to zero and won't snap out of it unless I rebuild the whole
> >> pipeline from scratch, so I'm hoping I'm just doing something wrong
> >> here...)
> >>
> >> Thanks for the help,
> >> -Eric
> >>
> >> -----------------------------------------------------
> >> Eric E. Monson
> >> Duke Visualization Technology Group
> >>
> >>
> >> _______________________________________________
> >> ParaView mailing list
> >> ParaView at paraview.org
> >> http://www.paraview.org/mailman/listinfo/paraview
> >
>




More information about the ParaView mailing list