Files
core/ASCOfficePDFReader/SXPath.h

82 lines
2.9 KiB
C++

#ifndef _SXPATH_H
#define _SXPATH_H
#include "STypes.h"
class SPath;
struct SXPathAdjust;
//-------------------------------------------------------------------------------------------------------------------------------
#define MaxCurveSplits (1 << 10)
//-------------------------------------------------------------------------------------------------------------------------------
// SXPathSegment
//-------------------------------------------------------------------------------------------------------------------------------
struct SXPathSegment
{
double dFirstX; // Êîîðäèíàòû ïåðâîé òî÷êè
double dFirstY; //
double dSecondX; // Êîîðäèíàòû âòîðîé òî÷êè
double dSecondY; //
double dDxDy; // òàíãåñ óãëà íàêëîíà: Dx / Dy
double dDyDx; // òàíãåñ óãëà íàêëîíà: Dy / Dx
unsigned int unFlags;
};
#define XPathFirst 0x01 // Ïåðâûé ñåãìåíò SubPath
#define XPathLast 0x02 // Ïîñëåäíèé ñåãìåíò SubPath
#define XPathEnd0 0x04 // Ïåðâàÿ òî÷êà(îêîí÷àíèÿ) îòêðûòîãî SubPath
#define XPathEnd1 0x08 // Âòîðàÿ òî÷êà(îêîí÷àíèÿ) îòêðûòîãî SubPath
#define XPathHoriz 0x10 // Ãîðèçîíòàëüíûé ñåãìåíò (dSecondY == dSecondX) (dDxDy íåîïðåäåëåíî)
#define XPathVert 0x20 // Âåðòèêàëüíûé ñåãìåíò (dFirstY == dFirstX) (dDyDx íåîïðåäåëåíî)
#define XPathFlip 0x40 // Ïåðåâåðíóòûé ñåãìåíò dFirstY > dSecondY
//-------------------------------------------------------------------------------------------------------------------------------
// SXPath
//-------------------------------------------------------------------------------------------------------------------------------
class SXPath
{
public:
// Ðàñøèðÿåì è ñãëàæèâàåì <pPath>. Ïåðåâîäèì âñå èç ïîëüçîâàòåëüñêèõ êîîðäèíàò â êîîðäèíàòû óñòðîéñòà ñ ïîìîùüþ ìàòðèöû <pMatrix>.
// Åñëè <bCloseSubpaths> == true, çàêðûâàåì âñå îòêðûòûå SubPaths.
SXPath(SPath *pPath, double *pMatrix, double dFlatness, BOOL bCloseSubpaths);
SXPath *Copy()
{
return new SXPath(this);
}
~SXPath();
// Óìíîæàåì âñå êîîðäèíàòû íà AntiAliasingSize.
void AntiAliasingScale();
void Sort();
private:
SXPath();
SXPath(SXPath *pXPath);
void Transform(double *pMatrix, double dUserX, double dUserY, double *pdDeviceX, double *pdDeviceY);
void StrokeAdjust(SXPathAdjust *pAdjust, double *pdX, double *pdY);
void Resize(int nSegmentsCount);
void AddCurve(double dX0, double dY0, double dX1, double dY1, double dX2, double dY2, double dX3, double dY3, double dFlatness, BOOL bFirst, BOOL bLast, BOOL bEnd0, BOOL bEnd1);
void AddSegment(double dX0, double dY0, double dX1, double dY1, BOOL bFirst, BOOL bLast, BOOL bEnd0, BOOL bEnd1);
private:
SXPathSegment *m_pSegments; // Ñïèñîê ñåãìåíòîâ
int m_nSegmentsCount; // Êîëè÷åñòâî ñåãìåíòîâ
int m_nSize; // Ðàçìåð ìàññèâà m_pSegments
friend class SXPathScanner;
friend class SClip;
friend class SImage;
};
#endif /* _SXPATH_H */