Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_sg_ortho 4 #ifndef tools_sg_ortho 5 #define tools_sg_ortho 5 #define tools_sg_ortho 6 6 7 #include "base_camera" 7 #include "base_camera" 8 8 9 namespace tools { 9 namespace tools { 10 namespace sg { 10 namespace sg { 11 11 12 class ortho : public base_camera { 12 class ortho : public base_camera { 13 TOOLS_NODE(ortho,tools::sg::ortho,base_camer 13 TOOLS_NODE(ortho,tools::sg::ortho,base_camera) 14 public: 14 public: 15 virtual float near_height() const {return he 15 virtual float near_height() const {return height.value();} 16 virtual void zoom(float a_fac) { 16 virtual void zoom(float a_fac) { 17 //for exa : 17 //for exa : 18 // a_fac = 0.99f is a zoom in 18 // a_fac = 0.99f is a zoom in 19 // a_fac = 1.01f is a zoom out 19 // a_fac = 1.01f is a zoom out 20 height.value(height.value()*a_fac); 20 height.value(height.value()*a_fac); 21 } 21 } 22 virtual camera_type type() const {return cam 22 virtual camera_type type() const {return camera_ortho;} 23 public: 23 public: 24 sf<float> height; 24 sf<float> height; 25 public: 25 public: 26 virtual const desc_fields& node_desc_fields( 26 virtual const desc_fields& node_desc_fields() const { 27 TOOLS_FIELD_DESC_NODE_CLASS(tools::sg::ort 27 TOOLS_FIELD_DESC_NODE_CLASS(tools::sg::ortho) 28 static const desc_fields s_v(parent::node_ 28 static const desc_fields s_v(parent::node_desc_fields(),1, //WARNING : take care of count. 29 TOOLS_ARG_FIELD_DESC(height) 29 TOOLS_ARG_FIELD_DESC(height) 30 ); 30 ); 31 return s_v; 31 return s_v; 32 } 32 } 33 private: 33 private: 34 void add_fields(){ 34 void add_fields(){ 35 add_field(&height); 35 add_field(&height); 36 } 36 } 37 public: 37 public: 38 ortho() 38 ortho() 39 :parent() 39 :parent() 40 ,height(2) 40 ,height(2) 41 { 41 { 42 #ifdef TOOLS_MEM 42 #ifdef TOOLS_MEM 43 mem::increment(s_class().c_str()); 43 mem::increment(s_class().c_str()); 44 #endif 44 #endif 45 add_fields(); 45 add_fields(); 46 } 46 } 47 virtual ~ortho(){ 47 virtual ~ortho(){ 48 #ifdef TOOLS_MEM 48 #ifdef TOOLS_MEM 49 mem::decrement(s_class().c_str()); 49 mem::decrement(s_class().c_str()); 50 #endif 50 #endif 51 } 51 } 52 public: 52 public: 53 ortho(const ortho& a_from) 53 ortho(const ortho& a_from) 54 :parent(a_from) 54 :parent(a_from) 55 ,height(a_from.height) 55 ,height(a_from.height) 56 { 56 { 57 #ifdef TOOLS_MEM 57 #ifdef TOOLS_MEM 58 mem::increment(s_class().c_str()); 58 mem::increment(s_class().c_str()); 59 #endif 59 #endif 60 add_fields(); 60 add_fields(); 61 } 61 } 62 ortho& operator=(const ortho& a_from){ 62 ortho& operator=(const ortho& a_from){ 63 parent::operator=(a_from); 63 parent::operator=(a_from); 64 height = a_from.height; 64 height = a_from.height; 65 return *this; 65 return *this; 66 } 66 } 67 public: //operators: 67 public: //operators: 68 bool operator==(const ortho& a_from) const{ 68 bool operator==(const ortho& a_from) const{ 69 if(!parent::operator==(a_from)) return fal 69 if(!parent::operator==(a_from)) return false; 70 if(height!=a_from.height) return false; 70 if(height!=a_from.height) return false; 71 return true; 71 return true; 72 } 72 } 73 bool operator!=(const ortho& a_from) const { 73 bool operator!=(const ortho& a_from) const { 74 return !operator==(a_from); 74 return !operator==(a_from); 75 } 75 } 76 public: 76 public: 77 void dump(std::ostream& a_out) { 77 void dump(std::ostream& a_out) { 78 parent::dump(a_out); 78 parent::dump(a_out); 79 a_out << " height " << height.value() << s 79 a_out << " height " << height.value() << std::endl; 80 } 80 } 81 protected: 81 protected: 82 virtual void get_lrbt(unsigned int a_ww,unsi 82 virtual void get_lrbt(unsigned int a_ww,unsigned int a_wh, 83 float& a_l,float& a_r, 83 float& a_l,float& a_r,float& a_b,float& a_t) { 84 float aspect = float(a_ww)/float(a_wh); 84 float aspect = float(a_ww)/float(a_wh); 85 //landscape : float aspect = float(a_actio 85 //landscape : float aspect = float(a_action.wh())/float(a_action.ww()); 86 float hh = height.value()*0.5f; 86 float hh = height.value()*0.5f; 87 a_l = -aspect*hh; 87 a_l = -aspect*hh; 88 a_r = aspect*hh; 88 a_r = aspect*hh; 89 a_b = -hh; 89 a_b = -hh; 90 a_t = hh; 90 a_t = hh; 91 } 91 } 92 }; 92 }; 93 93 94 inline ortho* cast_ortho(base_camera& a_bcam) 94 inline ortho* cast_ortho(base_camera& a_bcam) {return safe_cast<base_camera,ortho>(a_bcam);} 95 95 96 }} 96 }} 97 97 98 #endif 98 #endif