]> Shamusworld >> Repos - ttedit/blobdiff - src/glyphpoints.h
Added implementation of Polygon Rotate and Flip Winding tools.
[ttedit] / src / glyphpoints.h
index 2384d7cf963a05920e9e16d68269ca7fba1ad652..ce82ec9e9407e53c269bb47cdfbd19da2a045dcd 100755 (executable)
 #define __GLYPHPOINTS_H__
 
 #include "types.h"
+#include <stdio.h>
 
 
+// "IPoint" is an Integer based Point
 struct IPoint
 {
        int32 x, y;
        bool onCurve;
 
        IPoint(int32 xx=0, int32 yy=0, bool oc=true): x(xx), y(yy), onCurve(oc) {}
+       bool operator==(const IPoint & p) { return (p.x == x && p.y == y ? true: false); };
 };
 
 // Throws the following exceptions:
@@ -46,33 +49,58 @@ class GlyphPoints
                GlyphPoints operator+(const GlyphPoints &);
                GlyphPoints operator+(const IPoint &);
                GlyphPoints& operator+=(const IPoint &);
+               void Clear(void);
                void InsertPoint(uint16, int, int, bool);
                void InsertPoint(uint16, const IPoint &);
                void DeletePoint(uint16);
                uint16 GetNumPoints(void);
-               uint16 GetNumPoints(uint16);
+               uint16 GetNumPoints(uint16 poly);
                uint16 GetNumPolys(void);
                int GetX(uint16);
                int GetY(uint16);
                bool GetOnCurve(uint16);
                int GetX(uint16, uint16);
+               int GetNextX(uint16, uint16);
                int GetY(uint16, uint16);
+               int GetNextY(uint16, uint16);
+               IPoint GetPoint(uint16, uint16);
+               IPoint GetPoint(uint16);
                bool GetOnCurve(uint16, uint16);
+               bool GetPrevOnCurve(uint16, uint16);
+               bool GetNextOnCurve(uint16, uint16);
+               uint16 GetPolyStart(uint16);
                uint16 GetPolyEnd(uint16);
                void OffsetPoints(int, int);
                void OffsetPoly(uint16, int32, int32);
                void ScalePoints(float);
                void SetXY(uint16, int, int);
                void SetOnCurve(uint16, bool);
+               void SetPoint(const uint16 pointNum, const IPoint point);
                uint16 GetPrev(uint16);
                uint16 GetNext(uint16);
                uint16 GetPrev(uint16, uint16);
                uint16 GetNext(uint16, uint16);
                uint16 GetPoly(uint16);
                void AddNewPolyAtEnd(void);
+               IPoint GetMidpointToPrev(uint16, uint16);
+               IPoint GetMidpointToNext(uint16, uint16);
+               IPoint GetPrevPoint(uint16, uint16);
+               IPoint GetNextPoint(uint16, uint16);
+               uint16 GetPolyForPoint(IPoint point);
+               uint16 GetPolyForPointNumber(uint16 pointNumber);
+
+               IPoint RotatePoint(const double angle, const IPoint point, const IPoint center);
+               void RotatePoints(const double angle, const IPoint point);
+               IPoint GetPolyCentroid(const int16 poly);
+               void RotatePolyAroundCentroid(const int16 poly, const double angle);
+               void InvertPolyDrawSequence(const uint16 poly);
+
+               bool LoadGlyphFromFile(FILE *);
+               bool SaveGlyphToFile(FILE *);
 
        private:
                void AllocateAndCopy(int, int, int *, int *, bool *, uint16 *);
+               void FreeAllocatedMemory(void);
 
        private:
                int numPoints, numPolys;