00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GFX_NODE_HH
00020 #define OST_GFX_NODE_HH
00021
00022
00023
00024
00025
00026 #include <vector>
00027
00028 #include <boost/enable_shared_from_this.hpp>
00029
00030 #include <ost/gfx/module_config.hh>
00031
00032 #include "render_pass.hh"
00033 #include "gfx_node_fw.hh"
00034 #include "gfx_object_fw.hh"
00035 #include "gfx_node_visitor.hh"
00036 #include "povray_fw.hh"
00037 #include "exporter_fw.hh"
00038
00039 namespace ost { namespace gfx {
00040
00041 typedef std::vector<GfxNodeP> GfxNodeVector;
00042
00043 class DLLEXPORT_OST_GFX GfxNode: public boost::enable_shared_from_this<GfxNode>
00044 {
00045 public:
00046
00047
00048 GfxNode(const String& name);
00049
00050 virtual ~GfxNode();
00051
00052
00053 virtual GfxNodeP Copy() const;
00054
00055 virtual void DeepSwap(GfxNode& n);
00056
00057
00058 virtual void RenderGL(RenderPass pass);
00059
00060
00061 virtual void RenderPov(PovState& pov);
00062
00063 virtual void Export(Exporter* ex);
00064
00065
00066 virtual void Apply(GfxNodeVisitor& v, GfxNodeVisitor::Stack st);
00067
00068 virtual int GetType() const;
00069
00070
00071 String GetName() const;
00072
00073
00074 void RemoveAll();
00075
00076 void Rename(const String& name);
00077
00078
00079 void Add(GfxObjP obj);
00080
00081
00084 bool IsNameAvailable(const String& name) const;
00085
00086
00087
00088 void Remove(GfxObjP obj);
00089
00090
00091 void Add(GfxNodeP node);
00092
00093
00094 void Remove(GfxNodeP node);
00095
00096
00097 void Remove(const String& name);
00098
00099 size_t GetChildCount() const;
00100
00101
00102 void Hide();
00103
00104 void Show();
00105
00106 bool IsVisible() const;
00107
00108 virtual void ContextSwitch();
00109
00112 bool IsAttachedToScene() const;
00113
00114
00115 gfx::GfxNodeP GetParent() const;
00116
00117 const GfxNodeVector& GetChildren() const { return node_vector_; }
00118 GfxNodeVector& GetChildren() { return node_vector_; }
00119 private:
00120 GfxNode(const GfxNode& o);
00121 GfxNode& operator=(const GfxNode&);
00122
00123
00124 String name_;
00125 bool show_;
00126 GfxNodeVector node_vector_;
00127 boost::weak_ptr<GfxNode> parent_;
00128 };
00129
00130 }}
00131
00132 #endif