summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/beziercurve.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/beziercurve.h')
-rw-r--r--Build/source/utils/asymptote/beziercurve.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/beziercurve.h b/Build/source/utils/asymptote/beziercurve.h
new file mode 100644
index 00000000000..833da4db277
--- /dev/null
+++ b/Build/source/utils/asymptote/beziercurve.h
@@ -0,0 +1,80 @@
+/*****
+ * beziercurve.h
+ * Author: John C. Bowman
+ *
+ * Render a Bezier curve.
+ *****/
+
+#ifndef BEZIERCURVE_H
+#define BEZIERCURVE_H
+
+#include "drawelement.h"
+
+namespace camp {
+
+#ifdef HAVE_GL
+
+extern const double Fuzz;
+extern const double Fuzz2;
+
+struct BezierCurve
+{
+ vertexBuffer data;
+ double res,res2;
+ bool Onscreen;
+
+ void init(double res);
+
+ // Approximate bounds by bounding box of control polyhedron.
+ bool offscreen(size_t n, const triple *v) {
+ if(bbox2(n,v).offscreen()) {
+ Onscreen=false;
+ return true;
+ }
+ return false;
+ }
+
+ void render(const triple *p, bool straight);
+ void render(const triple *p, GLuint I0, GLuint I1);
+
+ void append() {
+ material1Data.append(data);
+ }
+
+ void notRendered() {
+ material1Data.rendered=false;
+ }
+
+ void queue(const triple *g, bool straight, double ratio) {
+ data.clear();
+ notRendered();
+ Onscreen=true;
+ init(pixel*ratio);
+ render(g,straight);
+ }
+
+};
+
+struct Pixel
+{
+ vertexBuffer data;
+
+ void append() {
+ material0Data.append0(data);
+ }
+
+ void queue(const triple& p, double width) {
+ data.clear();
+ MaterialIndex=materialIndex;
+ data.indices.push_back(data.vertex0(p,width));
+ append();
+ }
+
+ void draw();
+};
+
+#endif
+
+} //namespace camp
+
+#endif