summaryrefslogtreecommitdiff
path: root/graphics/asymptote/abs3doutfile.h
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-12-28 03:01:00 +0000
committerNorbert Preining <norbert@preining.info>2021-12-28 03:01:00 +0000
commitecdf859b6ce481abfd530425dcf6f0f764bd0001 (patch)
tree13bc161dc046876ac6c92fce5f9f5034ba9aa573 /graphics/asymptote/abs3doutfile.h
parent790995b7e79697514364450bf9c04f1b8d500838 (diff)
CTAN sync 202112280300
Diffstat (limited to 'graphics/asymptote/abs3doutfile.h')
-rw-r--r--graphics/asymptote/abs3doutfile.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/graphics/asymptote/abs3doutfile.h b/graphics/asymptote/abs3doutfile.h
new file mode 100644
index 0000000000..2871320952
--- /dev/null
+++ b/graphics/asymptote/abs3doutfile.h
@@ -0,0 +1,75 @@
+#ifndef ABS3DOUTFILE_H
+#define ABS3DOUTFILE_H
+
+#include "common.h"
+#include "triple.h"
+#include "prcfile.h"
+#include "material.h"
+
+namespace camp
+{
+
+inline bool distinct(const uint32_t *I, const uint32_t *J)
+{
+ return I[0] != J[0] || I[1] != J[1] || I[2] != J[2];
+}
+
+class abs3Doutfile : public gc {
+protected:
+ bool singleprecision;
+public:
+ abs3Doutfile(bool singleprecision=false) : singleprecision(singleprecision) {}
+ virtual ~abs3Doutfile() = default;
+
+ virtual void close()=0;
+
+ virtual void addPatch(triple const* controls, triple const& Min, triple const& Max, prc::RGBAColour const* c) = 0;
+
+ virtual void addStraightPatch(
+ triple const* controls, triple const& Min, triple const& Max, prc::RGBAColour const* c) = 0;
+
+ virtual void addBezierTriangle(
+ triple const* controls, triple const& Min, triple const& Max, prc::RGBAColour const* c) = 0;
+
+ virtual void addStraightBezierTriangle(
+ triple const* controls, triple const& Min, triple const& Max, prc::RGBAColour const* c) = 0;
+
+ virtual void addMaterial(Material const& mat) = 0;
+
+ virtual void addSphere(triple const& center, double radius) = 0;
+
+ virtual void addHemisphere(triple const& center, double radius, double const& polar, double const& azimuth) = 0;
+
+ virtual void addCylinder(triple const& center, double radius, double height,
+ double const& polar, const double& azimuth,
+ bool core) = 0;
+
+ virtual void addDisk(triple const& center, double radius,
+ double const& polar, const double& azimuth) = 0;
+
+ virtual void addTube(const triple* g, double width,
+ const triple& Min, const triple& Max, bool core) = 0;
+
+ virtual void addTriangles(size_t nP, const triple* P, size_t nN,
+ const triple* N, size_t nC, const prc::RGBAColour* C,
+ size_t nI, const uint32_t (* PI)[3],
+ const uint32_t (* NI)[3], const uint32_t (* CI)[3],
+ const triple& Min, const triple& Max) = 0;
+
+ virtual void addCurve(const triple& z0, const triple& c0,
+ const triple& c1, const triple& z1,
+ const triple& Min, const triple& Max) = 0;
+
+ virtual void addCurve(const triple& z0, const triple& z1,
+ const triple& Min, const triple& Max) = 0;
+
+ virtual void addPixel(const triple& z0, double width,
+ const triple& Min, const triple& Max) = 0;
+
+ virtual void precision(int digits) = 0;
+
+};
+
+}
+
+#endif