diff options
Diffstat (limited to 'Build/source/utils/asymptote/picture.h')
-rw-r--r-- | Build/source/utils/asymptote/picture.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/picture.h b/Build/source/utils/asymptote/picture.h new file mode 100644 index 00000000000..59ce0369c34 --- /dev/null +++ b/Build/source/utils/asymptote/picture.h @@ -0,0 +1,127 @@ +/***** + * picture.h + * Andy Hamerlindl 2002/06/06 + * + * Stores a picture as a list of drawElements and handles its output to + * PostScript. + *****/ + +#ifndef PICTURE_H +#define PICTURE_H + +#include <sstream> +#include <iostream> + +#include "drawelement.h" + +namespace camp { + +class picture : public gc { +private: + bool labels; + size_t lastnumber; + size_t lastnumber3; + transform T; // Keep track of accumulative picture transform + bbox b; + bbox b_cached; // Cached bounding box + boxvector labelbounds; + bboxlist bboxstack; + bool transparency; + + static bool epsformat,pdfformat,xobject,pdf,Labels; + static double paperWidth,paperHeight; + +public: + bbox3 b3; // 3D bounding box + + typedef mem::list<drawElement*> nodelist; + nodelist nodes; + + picture() : labels(false), lastnumber(0), lastnumber3(0), T(identity), + transparency(false) {} + + // Destroy all of the owned picture objects. + ~picture(); + + // Prepend an object to the picture. + void prepend(drawElement *p); + + // Append an object to the picture. + void append(drawElement *p); + + // Enclose each layer with begin and end. + void enclose(drawElement *begin, drawElement *end); + + // Add the content of another picture. + void add(picture &pic); + void prepend(picture &pic); + + bool havelabels(); + bool have3D(); + + bbox bounds(); + bbox3 bounds3(); + + // Projected bounds of 3d picture given transform3 t (not cached). + pair bounds(double (*m)(double, double), + double (*x)(const triple&, double*), + double (*y)(const triple&, double*), + double *t=NULL); + + void texinit(); + + bool Transparency() { + return transparency; + } + + int epstopdf(const string& epsname, const string& pdfname); + + bool texprocess(const string& texname, const string& tempname, + const string& prefix, const pair& bboxshift); + + bool postprocess(const string& prename, const string& outname, + const string& outputformat, double magnification, + bool wait, bool view); + + // Ship the picture out to PostScript & TeX files. + bool shipout(picture* preamble, const string& prefix, + const string& format, double magnification=0.0, + bool wait=false, bool view=true); + + void render(GLUnurbs *nurb, double size2, + const triple &Min, const triple& Max, double perspective, + bool transparent) const; + bool shipout3(const string& prefix, const string& format, + double width, double height, double angle, const triple& m, + const triple& M, double *t, size_t nlights, triple *lights, + double *diffuse, double *ambient, double *specular, + bool viewportlighting, bool view); + + bool shipout3(const string& prefix); // Embedded PRC + + bool reloadPDF(const string& Viewer, const string& outname) const; + + picture *transformed(const transform& t); + picture *transformed(const vm::array& t); + + bool null() { + return nodes.empty(); + } + +}; + +inline picture *transformed(const transform& t, picture *p) +{ + return p->transformed(t); +} + +inline picture *transformed(const vm::array& t, picture *p) +{ + return p->transformed(t); +} + +const char *texpathmessage(); + +} //namespace camp + +#endif |