Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes

mitk::InterpolateLinesFilter Class Reference
[Process Classes]

Interpolate additional points on lines. More...

#include <mitkInterpolateLinesFilter.h>

Inheritance diagram for mitk::InterpolateLinesFilter:
Inheritance graph
[legend]
Collaboration diagram for mitk::InterpolateLinesFilter:
Collaboration graph
[legend]

List of all members.

Public Types

typedef InterpolateLinesFilter Self
typedef SurfaceSource Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
virtual void GenerateOutputInformation ()
virtual void GenerateData ()
const mitk::MeshGetInput (void)
virtual void SetInput (const mitk::Mesh *image)
virtual unsigned int GetSplineResolution ()
 Get spline resolution.
virtual void SetSplineResolution (unsigned int _arg)
 Set spline resolution.
virtual const mitk::Geometry2DGetGeometryForInterpolation ()
 Get/set geometry for interpolation.
virtual void SetGeometryForInterpolation (mitk::Geometry2D *_arg)
virtual ScalarType GetLength ()
 Get the overall length of the interpolated lines.

Static Public Member Functions

static Pointer New ()

Protected Member Functions

 InterpolateLinesFilter ()
virtual ~InterpolateLinesFilter ()
void BuildPointAndVectorList (mitk::Mesh::CellType &cell, vtkPoints *points, vtkCellArray *cellarray)

Protected Attributes

unsigned int m_SplineResolution
 Spline resolution of created Surface.
mitk::Geometry2D::Pointer m_GeometryForInterpolation
vtkCardinalSpline * m_SpX
vtkCardinalSpline * m_SpY
vtkCardinalSpline * m_SpZ
ScalarType m_Length

Detailed Description

Interpolate additional points on lines.

If a Geometry2D is set (by SetGeometryForInterpolation), we do an interpolation in the 2D-space of the Geometry2D: Map two neighboring original points on the Geometry2D, resulting in two 2D-points, interpolate in 2D between them, and map them back via the Geometry2D in the 3D-world.

Definition at line 46 of file mitkInterpolateLinesFilter.h.


Member Typedef Documentation

typedef itk::SmartPointer<const Self> mitk::InterpolateLinesFilter::ConstPointer

Definition at line 49 of file mitkInterpolateLinesFilter.h.

typedef itk::SmartPointer<Self> mitk::InterpolateLinesFilter::Pointer

Definition at line 49 of file mitkInterpolateLinesFilter.h.

Definition at line 49 of file mitkInterpolateLinesFilter.h.

Definition at line 49 of file mitkInterpolateLinesFilter.h.


Constructor & Destructor Documentation

mitk::InterpolateLinesFilter::InterpolateLinesFilter (  ) [protected]
mitk::InterpolateLinesFilter::~InterpolateLinesFilter (  ) [protected, virtual]

Definition at line 39 of file mitkInterpolateLinesFilter.cpp.

{
  m_SpX->Delete();
  m_SpY->Delete();
  m_SpZ->Delete();
}

Member Function Documentation

void mitk::InterpolateLinesFilter::BuildPointAndVectorList ( mitk::Mesh::CellType cell,
vtkPoints *  points,
vtkCellArray *  cellarray 
) [protected]

Definition at line 94 of file mitkInterpolateLinesFilter.cpp.

References mitk::PointSet::GetPoint(), and QuadProgPP::t().

{
  const mitk::Mesh* input = GetInput();

  Mesh::PointIdIterator ptIt;
  Mesh::PointIdIterator ptEnd;

  ptEnd = cell.PointIdsEnd();

  Point3D pt;

  int i, size=cell.GetNumberOfPoints();

  int closed_loop_pre_load=0;//m_SplineResolution;
  if(m_GeometryForInterpolation.IsNull())
  {
    //bei geschlossener Kontur: vor dem ersten Punkt die zwei letzten einfügen für glatten Übergang
    ptIt = ptEnd; ptIt-=closed_loop_pre_load+1;
    for(i=0;i<closed_loop_pre_load;++i, ++ptIt)
    {
      pt = input->GetPoint(*ptIt);
      m_SpX->AddPoint(i, pt[0]); m_SpY->AddPoint(i, pt[1]); m_SpZ->AddPoint(i, pt[2]);
    }
    //Punkte einfügen
    for(ptIt = cell.PointIdsBegin();i<size+closed_loop_pre_load;++i, ++ptIt)
    {
      pt = input->GetPoint(*ptIt);
      m_SpX->AddPoint(i, pt[0]); m_SpY->AddPoint(i, pt[1]); m_SpZ->AddPoint(i, pt[2]);
    }
    //bei geschlossener Kontur: nach dem letzten Punkt die zwei ersten einfügen für glatten Übergang
    int j;
    for(j=0,ptIt = cell.PointIdsBegin();j<closed_loop_pre_load;++j,++i, ++ptIt)
    {
      pt = input->GetPoint(*ptIt);
      m_SpX->AddPoint(i, pt[0]); m_SpY->AddPoint(i, pt[1]); m_SpZ->AddPoint(i, pt[2]);
    }
    //bool first = true;
    Point3D lastPt, firstPt;
    Vector3D vec;
    float t, step=1.0f/m_SplineResolution;
    size=(size-1)*m_SplineResolution;
    i=closed_loop_pre_load;

    cellarray->InsertNextCell(size);
    for(t=closed_loop_pre_load;i<size+closed_loop_pre_load;++i, t+=step)
    {
      float pt[3];
      FillVector3D(pt, m_SpX->Evaluate(t), m_SpY->Evaluate(t), m_SpZ->Evaluate(t));
      cellarray->InsertCellPoint(points->InsertNextPoint(pt));
    }
  }
  else //m_GeometryForInterpolation!=NULL
  {
    Point2D pt2d;
    //bei geschlossener Kontur: vor dem ersten Punkt die zwei letzten einfügen für glatten Übergang
    ptIt = ptEnd; ptIt-=closed_loop_pre_load+1;
    for(i=0;i<closed_loop_pre_load;++i, ++ptIt)
    {
      m_GeometryForInterpolation->Map(input->GetPoint(*ptIt), pt2d);
      m_SpX->AddPoint(i, pt2d[0]); m_SpY->AddPoint(i, pt2d[1]);
    }
    //Punkte einfügen
    for(ptIt = cell.PointIdsBegin();i<size+closed_loop_pre_load;++i, ++ptIt)
    {
      m_GeometryForInterpolation->Map(input->GetPoint(*ptIt), pt2d);
      m_SpX->AddPoint(i, pt2d[0]); m_SpY->AddPoint(i, pt2d[1]);
    }
    //bei geschlossener Kontur: nach dem letzten Punkt die zwei ersten einfügen für glatten Übergang
    int j;
    for(j=0,ptIt = cell.PointIdsBegin();j<closed_loop_pre_load;++j,++i, ++ptIt)
    {
      m_GeometryForInterpolation->Map(input->GetPoint(*ptIt), pt2d);
      m_SpX->AddPoint(i, pt2d[0]); m_SpY->AddPoint(i, pt2d[1]);
    }
    bool first = true;
    Point3D lastPt; lastPt.Fill(0);
    Vector3D vec;
    float t, step=1.0f/m_SplineResolution;
    size=(size-1)*m_SplineResolution;
    i=closed_loop_pre_load;

    cellarray->InsertNextCell(size);
    for(t=closed_loop_pre_load;i<size+closed_loop_pre_load;++i, t+=step)
    {
      pt2d[0] = m_SpX->Evaluate(t); pt2d[1] = m_SpY->Evaluate(t);
      m_GeometryForInterpolation->Map(pt2d, pt);

      if(first==false)
      {
        vec=pt-lastPt;
        m_Length+=vec.GetNorm();
      }
      first=false;

      float pvtk[3];
      itk2vtk(pt, pvtk);
      cellarray->InsertCellPoint(points->InsertNextPoint(pvtk));
      lastPt = pt;
    }
  }
}
void mitk::InterpolateLinesFilter::GenerateData (  ) [virtual]

Definition at line 61 of file mitkInterpolateLinesFilter.cpp.

{
  mitk::Mesh::ConstPointer input  = this->GetInput();
  mitk::Surface::Pointer output = this->GetOutput();

  vtkPolyData *polyData = vtkPolyData::New();
  vtkPoints *points = vtkPoints::New();
  vtkCellArray *cellarray = vtkCellArray::New();

  mitk::Mesh::PointType thisPoint;

  m_Length = 0.0;

  //iterate through all cells and build tubes
  Mesh::ConstCellIterator cellIt, cellEnd;
  cellEnd = input->GetMesh()->GetCells()->End();
  for( cellIt = input->GetMesh()->GetCells()->Begin(); cellIt != cellEnd; ++cellIt )
  {
    if(((*cellIt->Value()).GetType()==mitk::Mesh::CellType::POLYGON_CELL)
      && ((*cellIt->Value()).GetNumberOfPoints()>=2))
        BuildPointAndVectorList(*cellIt->Value(), points, cellarray);
  }

  polyData->SetPoints( points );
  points->Delete();
  polyData->SetLines( cellarray );
  cellarray->Delete();

  output->SetVtkPolyData(polyData);

  polyData->Delete();
}
void mitk::InterpolateLinesFilter::GenerateOutputInformation ( void   ) [virtual]

Definition at line 46 of file mitkInterpolateLinesFilter.cpp.

{
  mitk::Mesh::ConstPointer input  = this->GetInput();
  mitk::Surface::Pointer output = this->GetOutput();

  itkDebugMacro(<<"GenerateOutputInformation()");

  if(input.IsNull()) return;

  if(m_GeometryForInterpolation.IsNotNull())
    output->SetGeometry(static_cast<Geometry3D*>(m_GeometryForInterpolation->Clone().GetPointer()));
  else
    output->SetGeometry(static_cast<Geometry3D*>(input->GetGeometry()->Clone().GetPointer()));
}
virtual const char* mitk::InterpolateLinesFilter::GetClassName (  ) const [virtual]
virtual const mitk::Geometry2D* mitk::InterpolateLinesFilter::GetGeometryForInterpolation (  ) [virtual]

Get/set geometry for interpolation.

If this is set (not NULL), we do an interpolation in the 2D-space of the Geometry2D: Map two neighboring original points on the Geometry2D, resulting in two 2D-points, interpolate in 2D between them, and map them back via the Geometry2D in the 3D-world.

const mitk::Mesh * mitk::InterpolateLinesFilter::GetInput ( void   )

Definition at line 196 of file mitkInterpolateLinesFilter.cpp.

{
  if (this->GetNumberOfInputs() < 1)
  {
    return 0;
  }

  return static_cast<const mitk::Mesh * >
    (this->ProcessObject::GetInput(0) );
}
virtual ScalarType mitk::InterpolateLinesFilter::GetLength (  ) [virtual]

Get the overall length of the interpolated lines.

Warning:
valid only after Update()
virtual unsigned int mitk::InterpolateLinesFilter::GetSplineResolution (  ) [virtual]

Get spline resolution.

static Pointer mitk::InterpolateLinesFilter::New (  ) [static]

Reimplemented from mitk::SurfaceSource.

Referenced by InterpolateLinesFilter().

virtual void mitk::InterpolateLinesFilter::SetGeometryForInterpolation ( mitk::Geometry2D _arg ) [virtual]
void mitk::InterpolateLinesFilter::SetInput ( const mitk::Mesh image ) [virtual]

Definition at line 207 of file mitkInterpolateLinesFilter.cpp.

{
  // Process object is not const-correct so the const_cast is required here
  this->ProcessObject::SetNthInput(0, 
    const_cast< mitk::Mesh * >( input ) );
}
virtual void mitk::InterpolateLinesFilter::SetSplineResolution ( unsigned int  _arg ) [virtual]

Set spline resolution.


Member Data Documentation

Definition at line 97 of file mitkInterpolateLinesFilter.h.

Definition at line 100 of file mitkInterpolateLinesFilter.h.

Spline resolution of created Surface.

Definition at line 95 of file mitkInterpolateLinesFilter.h.

vtkCardinalSpline* mitk::InterpolateLinesFilter::m_SpX [protected]

Definition at line 98 of file mitkInterpolateLinesFilter.h.

Referenced by InterpolateLinesFilter().

vtkCardinalSpline * mitk::InterpolateLinesFilter::m_SpY [protected]

Definition at line 98 of file mitkInterpolateLinesFilter.h.

Referenced by InterpolateLinesFilter().

vtkCardinalSpline * mitk::InterpolateLinesFilter::m_SpZ [protected]

Definition at line 98 of file mitkInterpolateLinesFilter.h.

Referenced by InterpolateLinesFilter().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines