#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 #include #include 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 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 CamVariant; CamVariant value; Camera() {} CameraType type() { return static_cast(value.which()); } }; #endif