summaryrefslogtreecommitdiff
path: root/src/Camera.h
diff options
context:
space:
mode:
authordon bright <hugh.m.bright@gmail.com>2013-03-02 00:41:50 (GMT)
committerdon bright <hugh.m.bright@gmail.com>2013-03-02 00:41:50 (GMT)
commiteb1f73de0393bd890c9648932ae2e04de2c65ba3 (patch)
tree773c61349179f3b317b7b7eb7e1010bccc2ff5f3 /src/Camera.h
parent06fd9e2798f5683ae2134b0eeb75dad2574e3799 (diff)
add Camera.h per bug rept from Marius Kintel
Diffstat (limited to 'src/Camera.h')
-rw-r--r--src/Camera.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/Camera.h b/src/Camera.h
new file mode 100644
index 0000000..2d2b18f
--- /dev/null
+++ b/src/Camera.h
@@ -0,0 +1,65 @@
+#ifndef OPENSCAD_CAMERA_H_
+#define OPENSCAD_CAMERA_H_
+
+// Cameras
+// Variant design is similar to value.h/value.cc
+// see GLView.cc / export_png.cc / openscad.cc for usage
+
+#include <vector>
+#include <Eigen/Geometry>
+#include <boost/variant.hpp>
+
+class NullCamera
+{
+public:
+ NullCamera(){}
+};
+
+class GimbalCamera
+{
+public:
+ GimbalCamera()
+ {
+ object_trans << 0,0,0;
+ object_rot << 35,0,25;
+ viewer_distance = 500;
+ }
+ void setup( std::vector<double> d )
+ {
+ assert( d.size() == 7 );
+ object_trans << d[0], d[1], d[2];
+ object_rot << d[3], d[4], d[5];
+ viewer_distance = d[6];
+ }
+ Eigen::Vector3d object_trans;
+ Eigen::Vector3d object_rot;
+ double viewer_distance;
+};
+
+class VectorCamera
+{
+public:
+ VectorCamera()
+ {
+ center << 0,0,0;
+ Eigen::Vector3d cameradir(1, 1, -0.5);
+ eye = center - 500 * cameradir;
+ // "up" not currently used
+ }
+ Eigen::Vector3d eye;
+ Eigen::Vector3d center; // (aka 'target')
+ Eigen::Vector3d up;
+};
+
+class Camera
+{
+public:
+ enum CameraType { NONE, GIMBAL, VECTOR };
+ typedef boost::variant<NullCamera, GimbalCamera, VectorCamera> CamVariant;
+ CamVariant value;
+ Camera() {}
+ CameraType type() { return static_cast<CameraType>(value.which()); }
+};
+
+
+#endif
contact: Jan Huwald // Impressum