mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 11:55:36 +08:00
82 lines
2.9 KiB
C++
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 */
|