/***** * flatguide.cc * Andy Hammerlindl 2005/02/23 * * The data structure that builds up a knotlist. This is done by calling in * order the methods to set knots, specifiers, and tensions. * Used by the guide solving routines. *****/ #include "flatguide.h" namespace camp { void flatguide::addPre(path& p, Int j) { setSpec(new controlSpec(p.precontrol(j),p.straight(j-1)),IN); } void flatguide::addPoint(path& p, Int j) { add(p.point(j)); } void flatguide::addPost(path& p, Int j) { setSpec(new controlSpec(p.postcontrol(j),p.straight(j)),OUT); } void flatguide::uncheckedAdd(path p, bool allowsolve) { Int n=p.length(); if(n < 0) return; if(n == 0) { addPoint(p,0); return; } int nminus1=n-1; if(!allowsolve && p.cyclic()) addPre(p,0); for(Int i=0; i < nminus1;) { addPoint(p,i); addPost(p,i); ++i; addPre(p,i); } addPoint(p,nminus1); addPost(p,nminus1); if(allowsolve || !p.cyclic()) { addPre(p,n); addPoint(p,n); } } spec flatguide::open; }