77 lines
2.3 KiB
C++

/**
*******************************************************************************
* @file parserSVG/Path.h
* @brief basic path parsing (Header)
* @author Edouard DUPIN
* @date 20/03/2012
* @par Project
* parserSVG
*
* @par Copyright
* Copyright 2011 Edouard DUPIN, all right reserved
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY.
*
* Licence summary :
* You can modify and redistribute the sources code and binaries.
* You can send me the bug-fix
*
* Term of the licence in in the file licence.txt.
*
*******************************************************************************
*/
#ifndef __SVG_PATH_H__
#define __SVG_PATH_H__
#include <parserSVG/Base.h>
#include <agg-2.4/agg_path_storage.h>
namespace svg
{
typedef enum {
PATH_ENUM_STOP,
PATH_ENUM_MOVETO,
PATH_ENUM_LINETO,
PATH_ENUM_LINETO_H,
PATH_ENUM_LINETO_V,
PATH_ENUM_CURVETO,
PATH_ENUM_SMOTH_CURVETO,
PATH_ENUM_BEZIER_CURVETO,
PATH_ENUM_BEZIER_SMOTH_CURVETO,
PATH_ENUM_ELLIPTIC,
} pathEnum_te;
typedef struct {
pathEnum_te cmd;
bool relative;
etkFloat_t element[7];
}pathBasic_ts;
class Path : public svg::Base
{
private:
etk::VectorType<pathBasic_ts> m_listElement;
public:
Path(PaintState parentPaintState);
~Path(void);
virtual bool Parse(TiXmlNode * node, agg::trans_affine& parentTrans, coord2D_ts& sizeMax);
virtual void Display(int32_t spacing);
virtual void AggDraw(svg::Renderer& myRenderer, agg::trans_affine& basicTrans);
private:
void AbstractMoveTo(agg::path_storage& path, bool rel, double x, double y);
void AbstractLineTo(agg::path_storage& path, bool rel, double x, double y);
void AbstractHLineTo(agg::path_storage& path, bool rel, double x);
void AbstractVLineTo(agg::path_storage& path, bool rel, double y);
void AbstractCurve3(agg::path_storage& path, bool rel, double x1, double y1, double x, double y);
void AbstractCurve3(agg::path_storage& path, bool rel, double x, double y);
void AbstractCurve4(agg::path_storage& path, bool rel, double x1, double y1, double x2, double y2, double x, double y);
void AbstractCurve4(agg::path_storage& path, bool rel, double x2, double y2, double x, double y);
void AbstractCloseSubpath(agg::path_storage& path);
};
};
#endif