44 #ifndef __CU_PATH_EXTRUDER_H__
45 #define __CU_PATH_EXTRUDER_H__
47 #include <cugl/math/CUPoly2.h>
48 #include <cugl/math/CUVec2.h>
65 enum class PathJoint : int {
85 enum class PathCap :int {
133 std::vector<Vec2> _input;
138 std::vector<Vec2> _outverts;
140 std::vector<unsigned short> _outindx;
145 #pragma mark Constructors
161 PathExtruder(
const std::vector<Vec2>& points,
bool closed) : _calculated(false) {
162 _input = points; _closed = closed;
185 #pragma mark Initialization
215 void set(
const std::vector<Vec2>& points,
bool closed) {
226 _outverts.clear(); _outindx.clear();
237 _input.clear(); _outverts.clear(); _outindx.clear();
241 #pragma mark Calculation
266 void calculate(
float stroke, PathJoint joint=PathJoint::ROUND, PathCap cap = PathCap::ROUND);
269 #pragma mark Materialization
301 #pragma mark Internal Data Generation
318 unsigned int computeSize(PathJoint joint, PathCap cap,
unsigned int* vcount,
unsigned int* icount);
330 void makeSegment(
const Vec2& a,
const Vec2& b, KivyData* data);
343 bool makeJoint(
const Vec2& a, KivyData* data);
357 bool makeMitreJoint(
const Vec2& a,
float jangle, KivyData* data);
371 bool makeBevelJoint(
const Vec2& a,
float jangle, KivyData* data);
385 bool makeRoundJoint(
const Vec2& a,
float jangle, KivyData* data);
396 void makeCaps(
int count, KivyData* data);
407 void makeSquareCaps(
int count, KivyData* data);
418 void makeRoundCaps(
int count, KivyData* data);
430 bool makeLastJoint(KivyData* data);