[vtk-developers] mods to vtkDijkstraGraphGeodesicPath
Karthik Krishnan
karthik.krishnan at kitware.com
Mon Apr 23 17:21:18 EDT 2007
On 4/23/07, dean.inglis at camris.ca <dean.inglis at camris.ca> wrote:
>
>
> if ( this->AdjacencyBuildTime.GetMTime() < input->GetMTime() )
> {
> this->Initialize();
> }
> else
> {
> this->Reset();
> }
>
> in RequestData, and then in BuildAdjacency:
> this->AdjacencyBuildTime.Modified();
Yes
yes? Also, could the vtkPolygonalSurfaceContourLineInterpolator
> maintain an internal graph filter
> instead of instantiating anew everytime?
Yes.
Thanks for the changes.
--
karthik
Dean
>
> >
> > From: "Karthik Krishnan" <karthik.krishnan at kitware.com>
> > Date: 2007/04/23 Mon PM 05:00:29 EDT
> > CC: vtk-developers at vtk.org
> > Subject: Re: [vtk-developers] mods to vtkDijkstraGraphGeodesicPath
> >
> > Hi Dean,
> >
> > I agree. Its wasteful to call Initialize() multiple times, unless the
> input
> > polygonal dataset has changed. As you've suggested, I would prefer a
> > time-stamp check against the MTIme of the input polydata before
> rebuilding
> > the adjacency information.
> >
> > Thanks
> > --
> > karthik
> >
> >
> > On 4/23/07, dean.inglis at camris.ca <dean.inglis at camris.ca> wrote:
> > >
> > > Hi,
> > >
> > > I am developing a filter to do Dijkstra's shortest
> > > path algorithm along the lines of vtkDijkstraGraphGeodesicPath
> > > which inherits from vtkPolyDataAlgorithm. My version is
> > > directed to vtkImageData and I have also written a
> > > vtkContourLineInterpolator so that one can interactively
> > > generate polydata paths between vertices.
> > >
> > > It works but I want to make this more efficient, since in the polydata
> > > implementation: vtkPolygonalSurfaceContourLineInterpolator
> > > instantiates a new vtkDijkstraGraphGeodesicPath (vtkDGGP) every time
> > > a new pair of vertices are identified by the vtkContourWidget.
> > > For every instantiation, vtkDGGP has to initialize itself,
> > > build an adjacency list etc. If the input is not changing,
> > > this is unnecessary and only two ivars need to be reset:
> > > this->IdList->Reset();
> > > this->Hsize = 0;
> > > currently this is done in Initialize, but Initialize could
> > > be split with the previous two lines placed in a separate
> > > Reset() method. In this way Initialize could be done at
> > > the point of SetInput or SetInputConnection rather than
> > > in RequestData. Am I on the right track here?
> > > Would there need to be a time stamp mechanism
> > > in the filter's RequestData so that Initialize is called only when
> the
> > > input to the filter is changed?
> > >
> > > Dean
> > >
> > >
> > >
> //----------------------------------------------------------------------------
> > > int vtkDijkstraGraphGeodesicPath::RequestData(
> > > vtkInformation * vtkNotUsed( request ),
> > > vtkInformationVector ** inputVector,
> > > vtkInformationVector * outputVector)
> > > {
> > > vtkInformation * inInfo = inputVector[0]->GetInformationObject(0);
> > > vtkInformation *outInfo = outputVector->GetInformationObject(0);
> > >
> > > vtkPolyData *input = vtkPolyData::SafeDownCast(
> > > inInfo->Get(vtkDataObject::DATA_OBJECT()));
> > > if (!input)
> > > {
> > > return 0;
> > > }
> > >
> > > vtkPolyData *output = vtkPolyData::SafeDownCast(
> > > outInfo->Get(vtkDataObject::DATA_OBJECT()));
> > > if (!input)
> > > {
> > > return 0;
> > > }
> > >
> > > /* HERE IS WHERE SOME FORM OF TIME STAMP CHECKING
> > > COULD BE DONE ???? */
> > >
> > > this->Initialize();
> > >
> > > /* I.E.:
> > > if (this->BuildTime > this->MTime)
> > > this->Reset();
> > > else
> > > this->Initialize(); */
> > >
> > >
> > > this->ShortestPath(this->StartVertex, this->EndVertex);
> > > this->TraceShortestPath(input, output, this->StartVertex,
> > > this->EndVertex);
> > > return 1;
> > > }
> > >
> > >
> > >
> //----------------------------------------------------------------------------
> > > void vtkDijkstraGraphGeodesicPath::Initialize()
> > > {
> > > vtkPolyData *input = vtkPolyData::SafeDownCast(
> > > this->GetExecutive()->GetInputData(0, 0));
> > >
> > > this->BuildAdjacency( input );
> > >
> > > /* this->IdList->Reset(); // move out to a method called Reset*/
> > >
> > > this->n = input->GetNumberOfPoints();
> > >
> > > this->d->SetNumberOfComponents(1);
> > > this->d->SetNumberOfTuples(this->n);
> > > this->pre->SetNumberOfComponents(1);
> > > this->pre->SetNumberOfTuples(this->n);
> > > this->f->SetNumberOfComponents(1);
> > > this->f->SetNumberOfTuples(this->n);
> > > this->s->SetNumberOfComponents(1);
> > > this->s->SetNumberOfTuples(this->n);
> > > this->p->SetNumberOfComponents(1);
> > > this->p->SetNumberOfTuples(this->n);
> > >
> > > // The heap has elements from 1 to n
> > > this->H->SetNumberOfComponents(1);
> > > this->H->SetNumberOfTuples(this->n+1);
> > >
> > > /* this->Hsize = 0; // move out to a method called Reset*/
> > >
> > > this->Reset(); //*** new method
> > > }
> > >
> > >
> > >
> //----------------------------------------------------------------------------
> > > void vtkDijkstraGraphGeodesicPath::Reset()
> > > {
> > > this->IdList->Reset();
> > > this->Hsize = 0;
> > > }
> > >
> > > _______________________________________________
> > > vtk-developers mailing list
> > > vtk-developers at vtk.org
> > > http://www.vtk.org/mailman/listinfo/vtk-developers
> > >
> >
> >
>
> _______________________________________________
> vtk-developers mailing list
> vtk-developers at vtk.org
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
>
--
Karthik Krishnan
R&D Engineer,
Kitware Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20070423/ef2a5f20/attachment.html>
More information about the vtk-developers
mailing list