/*****************************************************************************************
* 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 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: 2008-02-20 10:03:51 +0530 (Wed, 20 Feb 2008) $
* $Revision: 423 $
* $Author: sharmnid $
*
************************************************************************/
#include "LTKShapeFeature.h"
#define DELIMITER_SIZE 5
/** @ingroup NPenShapeFeatureExtractor
* @brief The feature representation class for NPen features
* This class represents NPen++ features such as X, Y, cos/sin alpha, cos/sin beta, aspect, curliness, linearity, slope and pen-up/down bit
* @class NPenShapeFeature
*
*/
class NPenShapeFeature : public LTKShapeFeature
{
/** @name private data members */
//@{
private:
/** @brief X value */
float m_x;
/** @brief Y value */
float m_y;
float m_cosAlpha;
float m_sinAlpha;
float m_cosBeta;
float m_sinBeta;
float m_aspect;
float m_curliness;
float m_linearity;
float m_slope;
bool m_isPenUp;
string m_data_delimiter;
//@}
public:
/** @name Constructors and Destructor */
//@{
/**
* Default Constructor.
*/
NPenShapeFeature();
/** parameterized constructor
*/
NPenShapeFeature(float inX, float inY, float cosAlpha, float inSinAlpha,
float inCosBeta, float inSinBeta, float inAspect, float inCurliness,
float inLinearity, float inSlope, bool isPenUp);
/**
* Default destructor.
*/
~NPenShapeFeature();
/**
* Returns the value of the class data member NPenShapeFeature::m_x
*/
float getX() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_y
*/
float getY() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_cosAlpha
*/
float getCosAlpha() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_sinAlpha
*/
float getSinAlpha() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_cosBeta
*/
float getCosBeta() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_sinBeta
*/
float getSinBeta() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_aspect
*/
float getAspect() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_curliness
*/
float getCurliness() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_linearity
*/
float getLinearity() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_slope
*/
float getSlope() const;
/**
* Returns the value of the class data member NPenShapeFeature::m_penUp
*/
bool isPenUp() const;
/**
* Sets the value of NPenShapeFeature::m_x
*/
void setX(float x);
/**
* Sets the value of NPenShapeFeature::m_y
*/
void setY(float y);
/**
* Sets the value of NPenShapeFeature::m_cosAlpha
*/
void setCosAlpha(float cosAlpha);
/**
* Sets the value of NPenShapeFeature::m_sinAlpha
*/
void setSinAlpha(float sinAlpha);
/**
* Sets the value of NPenShapeFeature::m_cosBeta
*/
void setCosBeta(float cosBeta);
/**
* Sets the value of NPenShapeFeature::m_sinBeta
*/
void setSinBeta(float sinBeta);
/**
* Sets the value of NPenShapeFeature::m_aspect
*/
void setAspect(float aspect);
/**
* Sets the value of NPenShapeFeature::m_curliness
*/
void setCurliness(float curliness);
/**
* Sets the value of NPenShapeFeature::m_linearity
*/
void setLinearity(float linearity);
/**
* Sets the value of NPenShapeFeature::m_slope
*/
void setSlope(float slope);
/**
* Sets the value of NPenShapeFeature::m_penUp
*/
void setPenUp(bool penUp);
/**
* @brief Initializes an instance of NPenShapeFeature from the string passed as parameter.
*
* Semantics
*
* - Tokenize the input string on NPenShapeFeature::m_data_delimiter using StringTokenizer::tokenizeString
* - Initialize the data members of the class with the tokens returned.
*
* @param initString : string& : Reference to the initialization string.
*
* @return FAILURE : If the initalization string contains more than or less than seven tokens (after tokenizing on NPenShapeFeature::m_data_delimiter)
* @return SUCCESS : If initialization done without any errors.
*
*/
//see interface
int initialize(const string& initString);
/**
* @brief Gives the string representation of the NPenShapeFeature instance
*/
//see interface
void toString(string& strFeat) const;
/**
* This method implements the clone pattern and returns a cloned instance of the invoking NPenShapeFeature object
*/
LTKShapeFeaturePtr clone() const;
void getDistance(const LTKShapeFeaturePtr& shapeFeaturePtr, float& outDistance) const;
/**
* Converts the local feature instance into a float vector. The elements of the float vector are m_x, m_y, m_cosAlpha, m_sinAlpha, m_cosBeta, m_sinBeta, m_aspect, m_curliness, m_linearity, m_slope and m_isPenUp in the order.
* @param floatVec: vector&: The float vector which will contain the member values.
* @return int : returns SUCCESS or FAILURE
*
*/
int toFloatVector(vector& floatVec);
int getFeatureDimension();
int initialize(const floatVector& initFloatVector);
};