Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/sg/matrix_action

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/g4tools/include/tools/sg/matrix_action (Version 11.3.0) and /externals/g4tools/include/tools/sg/matrix_action (Version 9.2.p2)


  1 // Copyright (C) 2010, Guy Barrand. All rights    
  2 // See the file tools.license for terms.          
  3                                                   
  4 #ifndef tools_sg_matrix_action                    
  5 #define tools_sg_matrix_action                    
  6                                                   
  7 #include "win_action"                             
  8                                                   
  9 #include "../lina/mat4f"                          
 10 #include "states"                                 
 11                                                   
 12 namespace tools {                                 
 13 namespace sg {                                    
 14                                                   
 15 class matrix_action : public win_action,public    
 16   TOOLS_ACTION(matrix_action,tools::sg::matrix    
 17 public:                                           
 18   matrix_action(std::ostream& a_out,unsigned i    
 19   :parent(a_out,a_ww,a_wh)                        
 20   ,states(a_ww,a_wh)                              
 21   ,m_cur(0)                                       
 22   ,m_landscape(true)                              
 23   {                                               
 24     m_projs.resize(5);                            
 25     m_models.resize(5);                           
 26     reset();                                      
 27     m_identity.set_identity();                    
 28   }                                               
 29   virtual ~matrix_action(){}                      
 30 public:                                           
 31   matrix_action(const matrix_action& a_from)      
 32   :parent(a_from)                                 
 33   ,states(a_from)                                 
 34   ,m_projs(a_from.m_projs)                        
 35   ,m_models(a_from.m_models)                      
 36   ,m_cur(a_from.m_cur)                            
 37   ,m_landscape(a_from.m_landscape)                
 38   {                                               
 39     m_identity.set_identity();                    
 40   }                                               
 41   matrix_action& operator=(const matrix_action    
 42     parent::operator=(a_from);                    
 43     states::operator=(a_from);                    
 44     m_projs = a_from.m_projs;                     
 45     m_models = a_from.m_models;                   
 46     m_cur = a_from.m_cur;                         
 47     m_landscape = a_from.m_landscape;             
 48     return *this;                                 
 49   }                                               
 50 public:                                           
 51   void push_matrices() {                          
 52     if((m_cur+1)>=(int)m_projs.size()) {          
 53       m_projs.resize(m_projs.size()+5);           
 54       m_models.resize(m_models.size()+5);         
 55     }                                             
 56     m_cur++;                                      
 57     m_projs[m_cur].set_matrix(m_projs[m_cur-1]    
 58     m_models[m_cur].set_matrix(m_models[m_cur-    
 59 //OPTIMIZATION : in fact the two lines below a    
 60 //    m_state.m_proj = m_projs[m_cur];            
 61 //    m_state.m_model = m_models[m_cur];          
 62   }                                               
 63                                                   
 64   //WARNING : in the three below methods, ther    
 65   //          protection against m_cur<0 being    
 66   void pop_matrices() {                           
 67     m_cur--;                                      
 68 //OPTIMIZATION : in fact the two lines below a    
 69 //    m_state.m_proj = m_projs[m_cur];            
 70 //    m_state.m_model = m_models[m_cur];          
 71   }                                               
 72   mat4f& projection_matrix() {return m_projs[m    
 73   mat4f& model_matrix() {return m_models[m_cur    
 74                                                   
 75   bool end() const {return m_cur==0?true:false    
 76   int cur() const {return m_cur;}                 
 77                                                   
 78   bool project_point(float& a_x,float& a_y,flo    
 79     a_w = 1;                                      
 80     model_matrix().mul_4f(a_x,a_y,a_z,a_w);       
 81     projection_matrix().mul_4f(a_x,a_y,a_z,a_w    
 82     if(a_w==0.0F) return false;                   
 83     a_x /= a_w;                                   
 84     a_y /= a_w;                                   
 85     a_z /= a_w;                                   
 86     return true;                                  
 87   }                                               
 88                                                   
 89 //  bool project_normal(float& a_x,float& a_y,    
 90 //    model_matrix().mul_dir_3f(a_x,a_y,a_z);     
 91 //    projection_matrix().mul_dir_3f(a_x,a_y,a    
 92 //    return true;                                
 93 //  }                                             
 94                                                   
 95   void model_point(float& a_x,float& a_y,float    
 96     a_w = 1;                                      
 97     model_matrix().mul_4f(a_x,a_y,a_z,a_w);       
 98   }                                               
 99                                                   
100   // for marker rendering :                       
101   void projected_origin(float& a_x,float& a_y,    
102     a_x = 0;                                      
103     a_y = 0;                                      
104     a_z = 0;                                      
105     float w;                                      
106     project_point(a_x,a_y,a_z,w); //if render     
107   }                                               
108                                                   
109 protected:                                        
110   void reset() {                                  
111     m_cur = 0;                                    
112     if(m_landscape) {                             
113       m_projs[m_cur].set_identity();              
114     } else {                                      
115       m_projs[m_cur].set_matrix(0,-1,0,0,         
116                                 1, 0,0,0,         
117                                 0, 0,1,0,         
118                                 0, 0,0,1);        
119     }                                             
120     m_models[m_cur].set_identity();               
121     sg::state& _state = state();                  
122     _state.m_proj = m_projs[m_cur];               
123     _state.m_model = m_models[m_cur];             
124   }                                               
125 protected:                                        
126   std::vector<mat4f> m_projs;                     
127   std::vector<mat4f> m_models;                    
128   int m_cur;                                      
129   mat4f m_identity;                               
130 private:                                          
131   bool m_landscape; //false not yet ready.        
132 };                                                
133                                                   
134 }}                                                
135                                                   
136 #endif