00001 // Polylines are just arrays of vertexes. 00002 // They are looped if the first vertex is equal to the last. 00003 // cpPolyline structs are intended to be passed by value and destroyed when you are done with them. 00004 typedef struct cpPolyline { 00005 int count, capacity; 00006 cpVect *verts; 00007 } cpPolyline; 00008 00010 void cpPolylineDestroy(cpPolyline line); 00011 00012 // Returns true if the first vertex is equal to the last. 00013 cpBool cpPolylineIsLooped(cpPolyline line); 00014 00019 cpPolyline cpPolylineSimplifyCurves(cpPolyline line, cpFloat tol); 00020 00025 cpPolyline cpPolylineSimplifyVertexes(cpPolyline line, cpFloat tol); 00026 00027 // Generate a convex hull that contains a polyline. (looped or not) 00028 cpPolyline cpPolylineToConvexHull(cpPolyline line); 00029 00030 00032 typedef struct cpPolylineSet { 00033 int count, capacity; 00034 cpPolyline *lines; 00035 } cpPolylineSet; 00036 00038 cpPolylineSet *cpPolylineSetAlloc(void); 00039 00041 cpPolylineSet *cpPolylineSetInit(cpPolylineSet *set); 00042 00044 cpPolylineSet *cpPolylineSetNew(void); 00045 00047 void cpPolylineSetDestroy(cpPolylineSet *set, cpBool freePolylines); 00048 00050 void cpPolylineSetFree(cpPolylineSet *set, cpBool freePolylines); 00051 00057 void cpPolylineSetCollectSegment(cpVect v0, cpVect v1, cpPolylineSet *lines);