diff options
author | don bright <hugh.m.bright@gmail.com> | 2013-03-02 00:41:50 (GMT) |
---|---|---|
committer | don bright <hugh.m.bright@gmail.com> | 2013-03-02 00:41:50 (GMT) |
commit | eb1f73de0393bd890c9648932ae2e04de2c65ba3 (patch) | |
tree | 773c61349179f3b317b7b7eb7e1010bccc2ff5f3 /src/Camera.h | |
parent | 06fd9e2798f5683ae2134b0eeb75dad2574e3799 (diff) |
add Camera.h per bug rept from Marius Kintel
Diffstat (limited to 'src/Camera.h')
-rw-r--r-- | src/Camera.h | 65 |
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 |