/*****************************************************************************************
* Copyright (c) 2006 Hewlett-Packard Development Company, L.P.
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*****************************************************************************************/
/************************************************************************
* SVN MACROS
*
* $LastChangedDate: 2011-01-11 13:48:17 +0530 (Tue, 11 Jan 2011) $
* $Revision: 827 $
* $Author: mnab $
*
************************************************************************/
/************************************************************************
* FILE DESCR: function prototype for the LTKShapeFeature class
*
* CONTENTS:
*
* AUTHOR: Nidhi Sharma
*
* DATE: 07-FEB-2007
* CHANGE HISTORY:
* Author Date Description of change
************************************************************************/
#ifndef __LTKSHAPEFEATURE_H
#define __LTKSHAPEFEATURE_H
#include "LTKTypes.h"
#include "LTKException.h"
#include "LTKErrorsList.h"
#include "LTKMacros.h"
#include "LTKErrors.h"
#include "LTKShapeFeatureMacros.h"
/**
* \defgroup feature_extractor The feature extractor module
*
* The feature extractor module consists of following directories
* - common
* - Builds as a static library called featureextractorcommon.lib
*
* - Various feature extractors viz PointFloatShapeFeatureExtractor
* - These feature extractor are built as DLLs
*
* User can specify the feature extractor name in the classifier config file
* and the corresponding extractor is instantiated at run-time.
*
*
*/
/** @ingroup feature_extractor
* @brief An abstract class that defines the interface for a class representing a feature.
* @class LTKShapeFeature
* The LTKShapeFeature is the abstract base class. Any class representing a shape feature
* is derived from the LTKShapeFeature class.
*/
class LTKShapeFeature
{
public:
/** @name Constructors and Destructor */
//@{
/**
* Default Constructor.
*/
LTKShapeFeature(){};
/**
* Virtual destructor.
*/
virtual ~LTKShapeFeature()
{
};
//@}
/** @Purely cirtual functions */
//@{
/**
* Responsibility
* This function initializes the instance of type LTKShapeFeature using the initialization string
* passed as parameter.
*
* @param initString : string& : reference to the initialization string.
*/
virtual int initialize(const string& initString)=0;
virtual int initialize(const floatVector& initFloatVector)=0;
virtual int initialize(floatVector::const_pointer initFloatData, size_t dataSize) { (void)initFloatData; (void)dataSize; return SUCCESS; }
/**
* Responsibility
* This function returns the character (char*) representation for the instance of type LTKShapeFeature.
*
* @param p1 : char* : Pointer to the character array.
*/
virtual void toString(string& strFeat) const =0;
/**
* Responsibility
* Creates a new instance of type LTKShapeFeature and initializes it with the calling instance.
*
* @param none.
*
* @return LTKShapeFeature* Pointer to the LTKShapeFeature instance
*/
virtual LTKShapeFeaturePtr clone() const =0;
/**
* Responsibility
* Returns the distance between two instances of LTKShapeFeature.
*
* @param shapeFeaturePtr : LTKShapeFeature* : Pointer to LTKShapeFeature
*
* @return distance (float) Distance between two instances of LTKShapeFeature class.
*/
virtual void getDistance(const LTKShapeFeaturePtr& shapeFeaturePtr, float& outDistance) const = 0;
//@}
/**
* Responsibility
* Returns the representation of LTKShapeFeature instance as a vetor of floats.
*
* @param floatVec : vector& : Reference to the vector of floats.
*
* @return FAILURE If no implementation is provided by the derived class
*/
virtual int toFloatVector(vector& floatVec) { return FAILURE; }
/**
* Responsibility
* Returns the representation of LTKShapeFeature instance as a vetor of integers.
*
*
* @param intVec : vector& : Reference to the vector of integers.
*
* @return FAILURE If no implementation is provided by the derived class
*/
virtual int toIntVector(vector& intVec) { return FAILURE; }
//ADAPTATION REQUIREMENTS
/**
* Responsibility
* Adds two instances of type LTKShapeFeature.
*
* @param secondFeature : LTKShapeFeature* : Pointer to LTKShapeFeature
*
* @return LTKShapeFeature* : The pointer to LTKShapeFeature holding the result of adding
*
* @exception LTKErrorsList::EFTR_RPRCLASS_NOIMPLEMENTATION If no implementation is provided by the derived class
*/
virtual int addFeature(const LTKShapeFeaturePtr& secondFeature, LTKShapeFeaturePtr& outResult ) const
{
LTKReturnError(EFTR_RPRCLASS_NOIMPLEMENTATION);
}
/**
* Responsibility
* Subtract two instances of LTKShapeFeature.
*
*
* @param secondFeature : LTKShapeFeature* : Pointer to LTKShapeFeature
*
* @return LTKShapeFeature* : The pointer to LTKShapeFeature holding the result of subtraction
*
* @exception LTKErrorsList::EFTR_RPRCLASS_NOIMPLEMENTATION If no implementation is provided by the derived class
*/
virtual int subtractFeature(const LTKShapeFeaturePtr& secondFeature, LTKShapeFeaturePtr& outResult ) const
{
LTKReturnError(EFTR_RPRCLASS_NOIMPLEMENTATION);
}
/**
* Responsibility
* Scales the instance of LTKShapeFeature by the floating point number alpha passed as parameter.
*
*
* @param secondFeature : LTKShapeFeature* : Pointer to LTKShapeFeature
*
* @return LTKShapeFeature* : The pointer to scaled LTKShapeFeature
*
* @exception LTKErrorsList::EFTR_RPRCLASS_NOIMPLEMENTATION If no implementation is provided by the derived class
*/
virtual int scaleFeature(float alpha, LTKShapeFeaturePtr& outResult) const
{
LTKReturnError(EFTR_RPRCLASS_NOIMPLEMENTATION);
}
virtual int getFeatureDimension() = 0;
virtual bool isPenUp() const
{
LTKReturnError(EFTR_RPRCLASS_NOIMPLEMENTATION);
}
};
#endif