70 lines
1.8 KiB
Plaintext
70 lines
1.8 KiB
Plaintext
// Copyright (C) 2010, Guy Barrand. All rights reserved.
|
|
// See the file tools.license for terms.
|
|
|
|
#ifndef tools_sg_noderef
|
|
#define tools_sg_noderef
|
|
|
|
#include "node"
|
|
|
|
namespace tools {
|
|
namespace sg {
|
|
|
|
class noderef : public node {
|
|
public:
|
|
TOOLS_NODE(noderef,tools::sg::noderef,node)
|
|
public:
|
|
virtual void render(render_action& a_action) {
|
|
m_node.render(a_action);
|
|
}
|
|
virtual void pick(pick_action& a_action) {m_node.pick(a_action);}
|
|
virtual void bbox(bbox_action& a_action) {m_node.bbox(a_action);}
|
|
virtual void event(event_action& a_action) {m_node.event(a_action);}
|
|
virtual void search(search_action& a_action) {
|
|
if(a_action.do_path()) a_action.path_push(this);
|
|
m_node.search(a_action);
|
|
if(a_action.done()) return;
|
|
if(a_action.do_path()) a_action.path_pop();
|
|
}
|
|
virtual void get_matrix(get_matrix_action& a_action) {m_node.get_matrix(a_action);}
|
|
virtual bool write(write_action& a_action) {return m_node.write(a_action);}
|
|
virtual void is_visible(visible_action& a_action) {m_node.is_visible(a_action);}
|
|
public:
|
|
noderef(node& a_node):parent(),m_node(a_node){}
|
|
virtual ~noderef(){}
|
|
public:
|
|
noderef(const noderef& a_from)
|
|
:parent(a_from)
|
|
,m_node(a_from.m_node)
|
|
{}
|
|
noderef& operator=(const noderef& a_from){
|
|
parent::operator=(a_from);
|
|
return *this;
|
|
}
|
|
const sg::node& node() const {return m_node;}
|
|
sg::node& node() {return m_node;}
|
|
protected:
|
|
sg::node& m_node;
|
|
};
|
|
|
|
template <class NODE>
|
|
class clrref : public noderef {
|
|
public:
|
|
TOOLS_NODE_T(NODE,clrref,tools::sg::clrref,noderef)
|
|
public:
|
|
clrref(NODE& a_node):parent(a_node){}
|
|
virtual ~clrref(){
|
|
NODE* _node = safe_cast<sg::node,NODE>(m_node);
|
|
if(_node) _node->clear();
|
|
}
|
|
public:
|
|
clrref(const clrref& a_from):parent(a_from){}
|
|
clrref& operator=(const clrref& a_from){
|
|
parent::operator=(a_from);
|
|
return *this;
|
|
}
|
|
};
|
|
|
|
}}
|
|
|
|
#endif
|