#ifndef jbt_polyline_h #define jbt_polyline_h #include "primitive.h" class jbt_polyline : public jbt_primitive { public: jbt_polyline( const jVec3*, int, jFlt pr = 0.5, jFlt r = 1.0 ); ~jbt_polyline(); int count() const { return npts; } const jVec3& getPoint( jUInt i ) const { i = i>npts ? npts-1 : i; return points[i].pt; } private: jVec3 displacement(); void bracket( const jRay&, jbt_brackets& ); jVec2 uvl( const jVec3& ); jFlt vcoord(); jFlt ucoord(); void precompute(); void seedPoints( jVec3list& ) const; void computeBound(); jbt_blobtree::Type type() const { return jbt_blobtree::jbtPolyLine; } struct point { point(){}; point( const jVec3& ); jVec3 pt; jFlt t; jNorm3 N; jVec3 co; jFlt al; } * points; struct line { line(){}; line( const jVec3&, const jVec3& ); jNorm3 dir; jFlt len; static void Project( const jVec3&, point*, line*, int ); jVec3 pp; jFlt t; } * lines; int npts,p_line; jFlt pr,ttl_len; jVec3 sp; }; #endif