00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __IGEOM_CLIP2D_H__
00020 #define __IGEOM_CLIP2D_H__
00021
00022 #include "csutil/scf.h"
00023 #include "csgeom/vector2.h"
00024 #include "csgeom/box.h"
00025
00027 #define MAX_OUTPUT_VERTICES 64
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00039 #define CS_CLIP_OUTSIDE 0
00040
00041 #define CS_CLIP_INSIDE 1
00042
00043 #define CS_CLIP_CLIPPED 2
00044
00050 struct csVertexStatus
00051 {
00053 unsigned char Type;
00055 unsigned char Vertex;
00057 float Pos;
00058 };
00059
00060
00061
00062
00063
00064
00065
00066
00068 #define CS_VERTEX_ORIGINAL 0
00069
00070 #define CS_VERTEX_ONEDGE 1
00071
00072 #define CS_VERTEX_INSIDE 2
00073
00074 SCF_VERSION (iClipper2D, 0, 0, 2);
00075
00079 struct iClipper2D : public iBase
00080 {
00086 virtual UByte Clip (csVector2 *InPolygon, int InCount,
00087 csVector2 *OutPolygon, int &OutCount) = 0;
00088
00097 virtual UByte Clip (csVector2 *InPolygon, int InCount,
00098 csVector2 *OutPolygon, int &OutCount, csBox2 &BoundingBox) = 0;
00099
00108 virtual UByte Clip (csVector2 *InPolygon, int InCount,
00109 csVector2 *OutPolygon, int &OutCount, csVertexStatus *OutStatus) = 0;
00110
00112 virtual UByte ClipInPlace (csVector2 *InPolygon, int &InOutCount, csBox2 &BoundingBox) = 0;
00113
00123 virtual int ClassifyBox (const csBox2 &box) = 0;
00124
00126 virtual bool IsInside (const csVector2& v) = 0;
00127
00129 virtual int GetVertexCount () = 0;
00130
00132 virtual csVector2 *GetClipPoly () = 0;
00133 };
00134
00135 #endif
00136