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_noderef 4 #ifndef tools_sg_noderef 5 #define tools_sg_noderef 5 #define tools_sg_noderef 6 6 7 #include "node" 7 #include "node" 8 8 9 //#define TOOLS_SG_NODEREF_DEBUG 9 //#define TOOLS_SG_NODEREF_DEBUG 10 10 11 namespace tools { 11 namespace tools { 12 namespace sg { 12 namespace sg { 13 13 14 class noderef : public node { 14 class noderef : public node { 15 public: 15 public: 16 TOOLS_NODE(noderef,tools::sg::noderef,node) 16 TOOLS_NODE(noderef,tools::sg::noderef,node) 17 public: 17 public: 18 virtual void render(render_action& a_action) 18 virtual void render(render_action& a_action) { 19 #ifdef TOOLS_SG_NODEREF_DEBUG 19 #ifdef TOOLS_SG_NODEREF_DEBUG 20 std::ostream& out = a_action.out(); 20 std::ostream& out = a_action.out(); 21 out << "debug : tools::sg::noderef::render 21 out << "debug : tools::sg::noderef::render : " << m_node.s_cls() << " begin : " << std::endl; 22 m_node.render(a_action); 22 m_node.render(a_action); 23 out << "debug : tools::sg::noderef::render 23 out << "debug : tools::sg::noderef::render : " << m_node.s_cls() << " end," << std::endl; 24 #else 24 #else 25 m_node.render(a_action); 25 m_node.render(a_action); 26 #endif 26 #endif 27 } 27 } 28 virtual void pick(pick_action& a_action) {m_ 28 virtual void pick(pick_action& a_action) {m_node.pick(a_action);} 29 virtual void bbox(bbox_action& a_action) {m_ 29 virtual void bbox(bbox_action& a_action) {m_node.bbox(a_action);} 30 virtual void event(event_action& a_action) { 30 virtual void event(event_action& a_action) {m_node.event(a_action);} 31 virtual void search(search_action& a_action) 31 virtual void search(search_action& a_action) { 32 if(a_action.do_path()) a_action.path_push( 32 if(a_action.do_path()) a_action.path_push(this); 33 m_node.search(a_action); 33 m_node.search(a_action); 34 if(a_action.done()) return; 34 if(a_action.done()) return; 35 if(a_action.do_path()) a_action.path_pop() 35 if(a_action.do_path()) a_action.path_pop(); 36 } 36 } 37 virtual void get_matrix(get_matrix_action& a 37 virtual void get_matrix(get_matrix_action& a_action) {m_node.get_matrix(a_action);} 38 virtual bool write(write_action& a_action) { 38 virtual bool write(write_action& a_action) {return m_node.write(a_action);} 39 virtual void is_visible(visible_action& a_ac 39 virtual void is_visible(visible_action& a_action) {m_node.is_visible(a_action);} 40 public: 40 public: 41 noderef(node& a_node):parent(),m_node(a_node 41 noderef(node& a_node):parent(),m_node(a_node){} 42 virtual ~noderef(){} 42 virtual ~noderef(){} 43 public: 43 public: 44 noderef(const noderef& a_from) 44 noderef(const noderef& a_from) 45 :parent(a_from) 45 :parent(a_from) 46 ,m_node(a_from.m_node) 46 ,m_node(a_from.m_node) 47 {} 47 {} 48 noderef& operator=(const noderef& a_from){ 48 noderef& operator=(const noderef& a_from){ 49 parent::operator=(a_from); 49 parent::operator=(a_from); 50 return *this; 50 return *this; 51 } 51 } 52 const sg::node& node() const {return m_node; 52 const sg::node& node() const {return m_node;} 53 sg::node& node() {return m_node;} 53 sg::node& node() {return m_node;} 54 protected: 54 protected: 55 sg::node& m_node; 55 sg::node& m_node; 56 }; 56 }; 57 57 58 template <class NODE> 58 template <class NODE> 59 class clrref : public noderef { 59 class clrref : public noderef { 60 public: 60 public: 61 TOOLS_NODE_T(NODE,clrref,tools::sg::clrref,n 61 TOOLS_NODE_T(NODE,clrref,tools::sg::clrref,noderef) 62 public: 62 public: 63 clrref(NODE& a_node):parent(a_node){} 63 clrref(NODE& a_node):parent(a_node){} 64 virtual ~clrref(){ 64 virtual ~clrref(){ 65 NODE* _node = safe_cast<sg::node,NODE>(m_n 65 NODE* _node = safe_cast<sg::node,NODE>(m_node); 66 if(_node) _node->clear(); 66 if(_node) _node->clear(); 67 } 67 } 68 public: 68 public: 69 clrref(const clrref& a_from):parent(a_from){ 69 clrref(const clrref& a_from):parent(a_from){} 70 clrref& operator=(const clrref& a_from){ 70 clrref& operator=(const clrref& a_from){ 71 parent::operator=(a_from); 71 parent::operator=(a_from); 72 return *this; 72 return *this; 73 } 73 } 74 }; 74 }; 75 75 76 }} 76 }} 77 77 78 #endif 78 #endif