#ifndef __CPM__ALGORITHMS__QUADEDGE__SQUAREDEDGELENGTHDECIMATIONFILTER__H__ #define __CPM__ALGORITHMS__QUADEDGE__SQUAREDEDGELENGTHDECIMATIONFILTER__H__ #include namespace cpm { namespace Algorithms { namespace QuadEdge { /** */ template< typename I, typename O, typename C > class SquaredEdgeLengthDecimationFilter : public EdgeDecimationFilter< I, O, C > { public: typedef SquaredEdgeLengthDecimationFilter Self; typedef EdgeDecimationFilter< I, O, C > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef I TInputMesh; typedef O TOutputMesh; typedef C TCriterion; typedef typename Superclass::TOutPoint TOutPoint; typedef typename Superclass::TOutPrimalEdge TOutPrimalEdge; typedef typename Superclass::TScalar TScalar; public: itkNewMacro( Self ); itkTypeMacro( SquaredEdgeLengthDecimationFilter, EdgeDecimationFilter ); protected: SquaredEdgeLengthDecimationFilter( ); virtual ~SquaredEdgeLengthDecimationFilter( ); // keep the start of this documentation text on very first comment line, // it prevents a Doxygen bug /** Compute the measure value for iEdge. * * \param[in] iEdge * \return measure value, here the squared edge length */ inline TScalar MeasureEdge(TOutPrimalEdge *iEdge); // keep the start of this documentation text on very first comment line, // it prevents a Doxygen bug /** Calculate the position of the remaining vertex from collapsing iEdge. * * \param[in] iEdge * \return the optimal point location */ TOutPoint Relocate(TOutPrimalEdge *iEdge); private: // Purposely not implemented SquaredEdgeLengthDecimationFilter( const Self& ); void operator=( const Self& ); }; } // ecapseman } // ecapseman } // ecapseman #include #endif // __CPM__ALGORITHMS__QUADEDGE__SQUAREDEDGELENGTHDECIMATIONFILTER__H__ // eof - $RCSfile$