summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/flatguide.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/flatguide.cc')
-rw-r--r--Build/source/utils/asymptote/flatguide.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/flatguide.cc b/Build/source/utils/asymptote/flatguide.cc
new file mode 100644
index 00000000000..1bbf375593d
--- /dev/null
+++ b/Build/source/utils/asymptote/flatguide.cc
@@ -0,0 +1,53 @@
+/*****
+ * 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;
+
+}