<div dir="ltr">Hi Yan,<div><br></div><div>I would like to suggest that someone who is more familiar with this code joins in on this discussion. This is not a straightforward replacement of one class with another. Also, please keep the discussion on the mailing list.</div><div><br></div><div>Best,</div><div>-berk</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 15, 2015 at 10:12 AM, Yan Liu <span dir="ltr"><<a href="mailto:liuyanbc157@gmail.com" target="_blank">liuyanbc157@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi, Berk,<div>This is one Code with .h and .cxx , which should be fixed for VTK 6.2.</div><div><br></div><div>I'm not sure what is the destination to use these codes, because i'm a beginner for this software.</div><div><b><font color="#ff0000">vtkLocalTemporalNew.h:</font></b></div><div><br></div><div><div><font color="#45818e">#ifndef __vtkLocalTemporalNew_h</font></div><div><font color="#45818e">#define __vtkLocalTemporalNew_h</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">#include "vtkTemporalDataSetAlgorithm.h"</font></div><div><font color="#45818e">#include "vtkStreamingDemandDrivenPipeline.h"</font></div><div><font color="#45818e">#include <vtkstd/vector></font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">//class vtkCompositeDataSet;</font></div><div><font color="#45818e">class vtkDataSet;</font></div><div><font color="#45818e">class vtkDataObject;</font></div><div><font color="#45818e">//class vtkHierarchicalBoxDataSet;</font></div><div><font color="#45818e">//class vtkIntArray;</font></div><div><font color="#45818e">//class vtkRectilinearGrid;</font></div><div><font color="#45818e">//class vtkUniformGrid;</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">struct dim_item {</font></div><div><font color="#45818e"> unsigned int dim; // dimension count 1,2,3...</font></div><div><font color="#45818e"> unsigned int number; // number of different points in this dimension</font></div><div><font color="#45818e"> char * name; // name of dimension</font></div><div><font color="#45818e"> struct dim_item* next;</font></div><div><font color="#45818e">};</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">struct timestep_item {</font></div><div><font color="#45818e"> double time; //</font></div><div><font color="#45818e"> struct timestep_item* next;</font></div><div><font color="#45818e">};</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">class VTK_PARALLEL_EXPORT vtkLocalTemporalNew : public vtkTemporalDataSetAlgorithm</font></div><div><font color="#45818e">{</font></div><div><font color="#45818e">public:</font></div><div><font color="#45818e"> static vtkLocalTemporalNew *New();</font></div><div><font color="#45818e"> vtkTypeRevisionMacro(vtkLocalTemporalNew,vtkTemporalDataSetAlgorithm);</font></div><div><font color="#45818e"> void PrintSelf(ostream& os, vtkIndent indent);</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e"> void AddDimension(char * dimName, double planeValue = 0.0);</font></div><div><font color="#45818e"> char * GetDimName(int dim);</font></div><div><font color="#45818e"> int GetDimCount();</font></div><div><font color="#45818e"> //void SetInputData(vtkTemporalDataSet *dataset);</font></div><div><font color="#45818e"> void SetStepData(double ident[], unsigned int dim, vtkDataObject* dobj);</font></div><div><font color="#45818e"> void SetStepData(vtkDataObject* dobj);</font></div><div><font color="#45818e"> void ReplaceStepData(double ident[], unsigned int dim, vtkDataObject* dobj);</font></div><div><font color="#45818e"> void ReplaceStepData(vtkDataObject* dobj);</font></div><div><font color="#45818e"> int GetIndex(double ident[]);</font></div><div><font color="#45818e"> void SetParameter(unsigned int dim, double param);</font></div><div><font color="#45818e"> void UpdateParameter(vtkStreamingDemandDrivenPipeline *sdd);</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">protected:</font></div><div><font color="#45818e"> vtkLocalTemporalNew();</font></div><div><font color="#45818e"> ~vtkLocalTemporalNew();</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e"> // Description:</font></div><div><font color="#45818e"> // This is called by the superclass.</font></div><div><font color="#45818e"> // This is the method you should override.</font></div><div><font color="#45818e"> virtual int RequestInformation(vtkInformation *request,</font></div><div><font color="#45818e"> vtkInformationVector **inputVector,</font></div><div><font color="#45818e"> vtkInformationVector *outputVector);</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e"> // Description:</font></div><div><font color="#45818e"> // This is called by the superclass.</font></div><div><font color="#45818e"> // This is the method you should override.</font></div><div><font color="#45818e"> virtual int RequestData(vtkInformation *request,</font></div><div><font color="#45818e"> vtkInformationVector **inputVector,</font></div><div><font color="#45818e"> vtkInformationVector *outputVector);</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e"> //vtkTemporalDataSet *inputdata;</font></div><div><font color="#45818e"> vtkTemporalDataSet *dataset;</font></div><div><font color="#45818e"> dim_item *dimlist;</font></div><div><font color="#45818e"> timestep_item *timesteps;</font></div><div><font color="#45818e"> double *parameterArr;</font></div><div><font color="#45818e"> unsigned int *parameterArrInt;</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e"> void AppendTimestepsReverse(timestep_item *timestep);</font></div><div><font color="#45818e"> void AppendTimestep(double time);</font></div><div><font color="#45818e"> void ClearTimeSteps();</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">private:</font></div><div><font color="#45818e"> vtkLocalTemporalNew(const vtkLocalTemporalNew&); // Not implemented.</font></div><div><font color="#45818e"> void operator=(const vtkLocalTemporalNew&); // Not implemented.</font></div><div><font color="#45818e">//BTX</font></div><div><font color="#45818e"> vtkstd::vector< vtkstd::vector<double> > dataparams;</font></div><div><font color="#45818e"> char errormessage;</font></div><div><font color="#45818e">//ETX</font></div><div><font color="#45818e"><br></font></div><div><font color="#45818e">};</font></div><div><br></div><div><br></div><div>#endif</div></div><div><br></div><div><b><font color="#ff0000">And another:</font></b></div><div><b><font color="#ff0000">vtkLocalTemporalNew.cxx</font></b></div><div><b><font color="#ff0000"><br></font></b></div><div><div><b style="color:rgb(255,0,0)">#</b><font color="#b45f06">include "vtkLocalTemporalNew.h"</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">//#include "vtkAMRBox.h"</font></div><div><font color="#b45f06">//#include "vtkCellData.h"</font></div><div><font color="#b45f06">//#include "vtkCompositeDataIterator.h"</font></div><div><font color="#b45f06">//#include "vtkDoubleArray.h"</font></div><div><font color="#b45f06">//#include "vtkHierarchicalBoxDataSet.h"</font></div><div><font color="#b45f06">//#include "vtkImageMandelbrotSource.h"</font></div><div><font color="#b45f06">#include "vtkInformation.h"</font></div><div><font color="#b45f06">#include "vtkInformationVector.h"</font></div><div><font color="#b45f06">//#include "vtkIntArray.h"</font></div><div><font color="#b45f06">//#include "vtkMath.h"</font></div><div><font color="#b45f06">#include "vtkMultiBlockDataSet.h"</font></div><div><font color="#b45f06">#include "vtkObjectFactory.h"</font></div><div><font color="#b45f06">//#include "vtkPointData.h"</font></div><div><font color="#b45f06">//#include "vtkRectilinearGrid.h"</font></div><div><font color="#b45f06">#include "vtkStreamingDemandDrivenPipeline.h"</font></div><div><font color="#b45f06">#include "vtkTemporalDataSet.h" //has to be changed******</font></div><div><font color="#b45f06">//#include "vtkUniformGrid.h"</font></div><div><font color="#b45f06">//#include "vtkUnsignedCharArray.h"</font></div><div><font color="#b45f06">#include "vtkPolyData.h"</font></div><div><font color="#b45f06">#include <vtkSmartPointer.h></font></div><div><font color="#b45f06">#include <vtkStructuredGrid.h></font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">//#include "vtkExtractCTHPart.h" // for the BOUNDS key</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">#include <assert.h></font></div><div><font color="#b45f06">vtkCxxRevisionMacro(vtkLocalTemporalNew, "$Revision$");</font></div><div><font color="#b45f06">vtkStandardNewMacro(vtkLocalTemporalNew);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">//----------------------------------------------------------------------------</font></div><div><font color="#b45f06">vtkLocalTemporalNew::vtkLocalTemporalNew()</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"> this->SetNumberOfInputPorts(0);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">// this->inputdata = vtkTemporalDataSet::New();</font></div><div><font color="#b45f06"> this->dataset = vtkTemporalDataSet::New();</font></div><div><font color="#b45f06"> this->dimlist = NULL; // contains information about dimensions in decreasing order</font></div><div><font color="#b45f06"> this->timesteps = NULL;</font></div><div><font color="#b45f06"> this->parameterArr = NULL; // store parameter temporarily</font></div><div><font color="#b45f06"> this->parameterArrInt = NULL; // store parameter temporarily</font></div><div><font color="#b45f06"> //this->data = 0 // will be replaced by the multidimensional array</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">//----------------------------------------------------------------------------</font></div><div><font color="#b45f06">vtkLocalTemporalNew::~vtkLocalTemporalNew()</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06">// TODO!! Speicher von dimlist freigeben!</font></div><div><font color="#b45f06">// TODO!! Speicher von timesteps freigeben!</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">void vtkLocalTemporalNew::AddDimension(char * dimName, double planeValue)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// number: points in the new dimension</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>dim_item *item = new dim_item;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (this->dimlist == NULL)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>item->dim = 1; // first dimension -> dim = 1</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>item->next = NULL;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>} else</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>item->dim = this->dimlist->dim + 1;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>item->next = this->dimlist;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// add planeValue to all data</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int i = 0; i < this->dataparams.size(); i++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->dataparams[i].push_back(planeValue);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>item->name = dimName;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->dimlist = item;</font></div><div><span style="white-space:pre-wrap"><font color="#b45f06"> </font></span></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>//Set the missing parameter (we have a new dimension here)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->SetParameter(this->dimlist->dim,planeValue);</font></div><div><span style="white-space:pre-wrap"><font color="#b45f06"> </font></span></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>//(this->GetOutputPort())->Modified();</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->Modified();</font></div><div><font color="#b45f06">//<span style="white-space:pre-wrap"> </span>if (this->dimlist->dim > 1)</font></div><div><font color="#b45f06">//<span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06">//<span style="white-space:pre-wrap"> </span>this->Update();</font></div><div><font color="#b45f06">//<span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">char * vtkLocalTemporalNew::GetDimName(int dim)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"> dim_item *item = this->dimlist;</font></div><div><font color="#b45f06"> while (item != NULL)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> if (item->dim == dim + 1)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> vtkDebugMacro("vtkLocalTemporalNew::GetDimName: " << item->name);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> return item->name;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> }</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> item = item->next;</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::GetDimName: Did not find name of dimension "<< dim +1);</font></div><div><font color="#b45f06"> this->errormessage = 'vtkLocalTemporalNew::GetDimName: Did not find name of dimension';</font></div><div><font color="#b45f06"> return &this->errormessage;</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">int vtkLocalTemporalNew::GetDimCount()</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return this->dimlist->dim;</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">void vtkLocalTemporalNew::SetParameter(unsigned int dim, double param)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// set parameter of dimension dim to value param</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if ((dim <= 0) or (this->dimlist == NULL)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>or (dim > this->dimlist->dim))</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::SetParameter Wrong dimension " << dim);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (this->parameterArr == NULL)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->parameterArr = new double[this->dimlist->dim];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->parameterArr[dim-1] = param;</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">void vtkLocalTemporalNew::UpdateParameter(vtkStreamingDemandDrivenPipeline *sdd)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// Update the pipeline according to the stored parameter</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// paramter have to be set before by calling vtkLocalTemporalNew::SetParameter</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::UpdateParameter");</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (this->parameterArr == NULL)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>sdd->SetUpdateTimeSteps(0, this->parameterArr, this->dimlist->dim);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->Update();</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">void vtkLocalTemporalNew::SetStepData(vtkDataObject* dobj)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (this->parameterArr == NULL)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return;</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->SetStepData(this->parameterArr, this->dimlist->dim, dobj);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->Modified();</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->Update();</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">void vtkLocalTemporalNew::SetStepData(double ident[], unsigned int dim, vtkDataObject* dobj)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// dim should contain the length of ident</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (dim != this->dimlist->dim)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::SetStepData: ERROR wrong dimension!");</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// get index to store dobj</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>int index = this->dataparams.size();</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// store dobj</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->dataset->SetTimeStep(index, dobj);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// store params</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkstd::vector<double> params;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>params.resize(dim);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int i = 0; i < dim; i++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>params[i] = ident[i];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->dataparams.push_back(params);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">void vtkLocalTemporalNew::ReplaceStepData(vtkDataObject* dobj)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (this->parameterArr == NULL)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return;</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->ReplaceStepData(this->parameterArr, this->dimlist->dim, dobj);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->Modified();</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->Update();</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">void vtkLocalTemporalNew::ReplaceStepData(double ident[], unsigned int dim, vtkDataObject* dobj)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// dim should contain the length of ident</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (dim != this->dimlist->dim)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::ReplaceStepData: ERROR wrong dimension!");</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// get index to store dobj</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>int index;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>bool match = false;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int i = 0; i < this->dataparams.size(); i++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int j = 0; j < dim; j++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if ( this->dataparams[i][j] != ident[j] )</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>break;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>index = i;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>match = true;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (match)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>break;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (!match)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::ReplaceStepData: ERROR timestep not found!");</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// store dobj</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>this->dataset->SetTimeStep(index, dobj);</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">int vtkLocalTemporalNew::GetIndex(double ident[])</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int i = 0; i < this->dataparams.size(); i++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>bool ok = true;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int par = 0; par < this->dataparams[i].size(); par++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (this->dataparams[i][par] != ident[par])</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>ok = false;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (ok) // found index</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::GetIndex " << i);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return i;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::GetIndex did not found parameterset " << ident[0] << " " << ident[1]);</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>return -1;</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">int vtkLocalTemporalNew::RequestInformation(</font></div><div><font color="#b45f06"> vtkInformation *request,</font></div><div><font color="#b45f06"> vtkInformationVector **inputVector,</font></div><div><font color="#b45f06"> vtkInformationVector *outputVector)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestInformation");</font></div><div><font color="#b45f06"> if(!this->Superclass::RequestInformation(request,inputVector,outputVector))</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> return 0;</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestInformation 2 ");</font></div><div><font color="#b45f06"> vtkInformation *info=outputVector->GetInformationObject(0);</font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestInformation 3 ");</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> // get time steps</font></div><div><font color="#b45f06"> int nrsteps = this->dataparams.size() * this->dimlist->dim;</font></div><div><font color="#b45f06"> double tsteps[nrsteps];</font></div><div><font color="#b45f06"> int count = 0;</font></div><div><font color="#b45f06"> for (int i = 0; i < this->dataparams.size(); i++)</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>for (int par = 0; par < this->dataparams[i].size(); par++)</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>tsteps[count] = this->dataparams[i][par];</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>count++;</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> info->Set(vtkStreamingDemandDrivenPipeline::TIME_STEPS(),tsteps,nrsteps);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> // get time range</font></div><div><font color="#b45f06"> dim_item *dlist = this->dimlist;</font></div><div><font color="#b45f06"> double trange[this->dimlist->dim * 2];</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> vtkstd::vector<double> maxval(this->dimlist->dim);</font></div><div><font color="#b45f06"> vtkstd::vector<double> minval(this->dimlist->dim);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> for (int par = 0; par < this->dimlist->dim; par++)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> maxval[par] = this->dataparams[0][par];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> minval[par] = this->dataparams[0][par];</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"> for (int i = 1; i < this->dataparams.size(); i++)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> for (int par = 0; par < this->dataparams[i].size(); par++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> if (maxval[par] < this->dataparams[i][par])</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> maxval[par] = this->dataparams[i][par];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> }</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> if (minval[par] > this->dataparams[i][par])</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> minval[par] = this->dataparams[i][par];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> }</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> }</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> for (int i = 0; i < this->dimlist->dim; i++)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> trange[i] = minval[i];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> trange[i+this->dimlist->dim] = maxval[i];</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> info->Set(vtkStreamingDemandDrivenPipeline::TIME_RANGE(),trange,this->dimlist->dim * 2);</font></div><div><font color="#b45f06"> //info->Set(vtkStreamingDemandDrivenPipeline::TIME_RANGE(),trange,this->dimlist->dim * 2);</font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestInformation 5 " << this->dimlist->dim * 2);</font></div><div><font color="#b45f06"> info->Set(vtkStreamingDemandDrivenPipeline::MAXIMUM_NUMBER_OF_PIECES(),-1);</font></div><div><font color="#b45f06"> return 1;</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">//----------------------------------------------------------------------------</font></div><div><font color="#b45f06">int vtkLocalTemporalNew::RequestData(</font></div><div><font color="#b45f06"> vtkInformation *request,</font></div><div><font color="#b45f06"> vtkInformationVector **inputVector,</font></div><div><font color="#b45f06"> vtkInformationVector *outputVector)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"> vtkInformation *info=outputVector->GetInformationObject(0);</font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestData");</font></div><div><font color="#b45f06"> // get how many time steps were requested</font></div><div><font color="#b45f06"> int numTimeSteps =</font></div><div><font color="#b45f06"> info->Length(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS());</font></div><div><font color="#b45f06"> double *timeSteps =</font></div><div><font color="#b45f06"> info->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS());</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> for (int j = 0; j < numTimeSteps; j++)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>vtkDebugMacro("vtkLocalTemporalNew::RequestData timeSteps " << timeSteps[j]);</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> // handle initial request</font></div><div><font color="#b45f06"> int arrlen;</font></div><div><font color="#b45f06"> if ((numTimeSteps == 1) and (this->dimlist->dim > 1))</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>// request for first element -> adjust length of numTimeSteps</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>arrlen = this->dimlist->dim;</font></div><div><font color="#b45f06"> } else</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> arrlen = numTimeSteps;</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> double newTimeSteps[arrlen];</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> if ((numTimeSteps == 1) and (this->dimlist->dim > 1))</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>numTimeSteps = arrlen;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>if (this->dataparams[0].size() > 0)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// fill newTimeSteps with first dataset params</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int i = 0; i < numTimeSteps; i++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>newTimeSteps[i] = this->dataparams[0][i];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>} else</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>// fill newTimeSteps with zero params</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>for (int i = 0; i < numTimeSteps; i++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>newTimeSteps[i] = 0.0;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"> } else</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> // fill newTimeSteps with given data from pipeline</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> for (int i = 0; i < numTimeSteps; i++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> {</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> newTimeSteps[i] = timeSteps[i];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span> }</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> // convert 1-dim steps / points to n-dim</font></div><div><font color="#b45f06"> unsigned int newnum = numTimeSteps / this->dimlist->dim;</font></div><div><font color="#b45f06"> double newsteps[newnum][this->dimlist->dim];</font></div><div><font color="#b45f06"> unsigned int iter_oldsteps = 0;</font></div><div><font color="#b45f06"> for (int i = 0; i < newnum; i++)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>for (int j = 0; j < this->dimlist->dim; j++)</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>{</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>newsteps[i][j] = newTimeSteps[iter_oldsteps];</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>iter_oldsteps++;</font></div><div><font color="#b45f06"><span style="white-space:pre-wrap"> </span>}</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestData 2 " << numTimeSteps);</font></div><div><font color="#b45f06"> vtkDataObject *doOutput=info->Get(vtkDataObject::DATA_OBJECT());</font></div><div><font color="#b45f06"> vtkTemporalDataSet *output = vtkTemporalDataSet::SafeDownCast(doOutput);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> if(output==0)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> vtkErrorMacro("The output is not a TemporalDataSet");</font></div><div><font color="#b45f06"> return 0;</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> if (!info->Has(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER()) ||</font></div><div><font color="#b45f06"> !info->Has(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES()))</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> vtkErrorMacro("Expected information not found. "</font></div><div><font color="#b45f06"> "Cannot provide update extent.");</font></div><div><font color="#b45f06"> return 0;</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestData 3 " << newnum);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> vtkSmartPointer<vtkStructuredGrid> unStructuredGrid =</font></div><div><font color="#b45f06"> vtkSmartPointer<vtkStructuredGrid>::New();</font></div><div><font color="#b45f06"> // now create the HierarchicalDataSet for each time step</font></div><div><font color="#b45f06"> int ts;</font></div><div><font color="#b45f06"> for (ts = 0; ts < newnum; ++ts)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> int count = output->GetNumberOfTimeSteps();</font></div><div><font color="#b45f06"> int index = this->GetIndex(newsteps[ts]);</font></div><div><font color="#b45f06"> if (index == -1)</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>output->SetTimeStep(count, unStructuredGrid);</font></div><div><font color="#b45f06"> } else</font></div><div><font color="#b45f06"> {</font></div><div><font color="#b45f06"> <span style="white-space:pre-wrap"> </span>output->SetTimeStep(count, this->dataset->GetTimeStep( index ));</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06"> vtkDebugMacro("vtkLocalTemporalNew::RequestData - write output ");</font></div><div><font color="#b45f06"> // vtkDebugMacro(""<< this->inputdata->GetTimeStep( timeSteps[ts] ) );</font></div><div><font color="#b45f06"> vtkDebugMacro(""<< numTimeSteps );</font></div><div><font color="#b45f06"> vtkDebugMacro(""<< newTimeSteps[ts]);</font></div><div><font color="#b45f06"> }</font></div><div><font color="#b45f06"> output->GetInformation()->Set(vtkDataObject::DATA_TIME_STEPS(),</font></div><div><font color="#b45f06"> newTimeSteps, numTimeSteps);</font></div><div><font color="#b45f06"> return 1;</font></div><div><font color="#b45f06">}</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">//----------------------------------------------------------------------------</font></div><div><font color="#b45f06">void vtkLocalTemporalNew::PrintSelf(ostream& os, vtkIndent indent)</font></div><div><font color="#b45f06">{</font></div><div><font color="#b45f06"> this->Superclass::PrintSelf(os,indent);</font></div><div><font color="#b45f06"><br></font></div><div><font color="#b45f06">// os << indent << "NumberOfTimeSteps: " << this->inputdata->GetNumberOfTimeSteps() << endl;</font></div><div><font color="#b45f06"> os<< endl;</font></div><div><font color="#b45f06">}</font></div><div style="color:rgb(255,0,0);font-weight:bold"><br></div></div></div><div class="gmail_extra"><div><div class="h5"><br><div class="gmail_quote">2015-09-15 15:22 GMT+02:00 Berk Geveci <span dir="ltr"><<a href="mailto:berk.geveci@kitware.com" target="_blank">berk.geveci@kitware.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear Yan,<div><br></div><div>I still need some more information. More about how this is all used than which filters there are. That filter is no longer needed since the time information is now handled differently. Instead, the functionality is pushed to the consumers of the time information. They are expect to request the appropriate time steps.</div><div><br></div><div>Best,</div><div>-berk</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 15, 2015 at 9:14 AM, Ich <span dir="ltr"><<a href="mailto:liuyanbc157@gmail.com" target="_blank">liuyanbc157@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Dear Berk,<div><br></div><div>Thanks for your replying.</div><div>In my software, some functions like vtkTemporalSnaptoTimeStep were rewrite, named as vtkLocalSnaptoStep, but it looks like vtkTemporalSnaptoTimeStep in GitHub. With VTK 5.4 it was inherit from vtkTemporalDataSetAlgorithm. In VTK 6.2 I don’t know how to change the things in it. </div><div><br></div><div>Thanks in advance.</div><span><font color="#888888"><div><br></div></font></span><div><span><font color="#888888">Yan</font></span><div><div><br><div><blockquote type="cite"><div>Am 15.09.2015 um 14:48 schrieb Berk Geveci <<a href="mailto:berk.geveci@kitware.com" target="_blank">berk.geveci@kitware.com</a>>:</div><br><div><div dir="ltr">Dear Yan,<div><br></div><div>This somewhat depends on your use cases. We removed <span style="font-size:12.499999046325684px">vtkTemporalDataSet and pushed the temporal streaming functionality to the pipeline and algorithms. It is still possible for an algorithm to ask for multiple time steps, for example by subclassing </span>vtkMultiTimeStepAlgorithm. I can guide you better if you provide a description of how these are currently used. Also see:</div><div><a href="http://www.vtk.org/Wiki/VTK/Remove_vtkTemporalDataSet" target="_blank">http://www.vtk.org/Wiki/VTK/Remove_vtkTemporalDataSet</a><br></div><div><br></div><div>Best,</div><div>-berk</div><div><br></div><div>Best,</div><div>-berk</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 15, 2015 at 5:36 AM, Yan <span dir="ltr"><<a href="mailto:liuyanbc157@gmail.com" target="_blank">liuyanbc157@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi, dear all,<br>
<br>
I'm new to VTK. My task is changing codes from VTK 5.4 to 6.2 or later to<br>
6.3. But I found that some functions are removed or totally changed in VTK<br>
6.x.<br>
<br>
Now my problem is that vtkTemporalDataSetAlgorithm from VTK 5.4 and together<br>
with vtkTemporalDataSet cannot be used anymore in 6.2. What should I do with<br>
those functions, how could I change them?<br>
<br>
Thanks alot<br>
<br>
Yan<br>
<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com/" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br>
</blockquote></div><br></div>
</div></blockquote></div><br></div></div></div></div></blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div>mit freundlicher Grüße<div>Yan Liu</div><div><br></div></div>
</font></span></div>
</blockquote></div><br></div>