00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GFX_SURFACE_HH
00020 #define OST_GFX_SURFACE_HH
00021
00022
00023
00024
00025
00026
00027
00028 #include <boost/shared_ptr.hpp>
00029
00030 #include <ost/config.hh>
00031 #include <ost/mol/surface.hh>
00032 #include "gfx_object.hh"
00033 #include "vertex_array.hh"
00034
00035 #include <ost/gfx/color_ops/uniform_color_op.hh>
00036 #include <ost/gfx/color_ops/basic_gradient_color_op.hh>
00037 #include <ost/gfx/color_ops/gradient_level_color_op.hh>
00038 #include <ost/gfx/color_ops/entity_view_color_op.hh>
00039
00040 #if OST_IMG_ENABLED
00041 #include <ost/gfx/color_ops/map_handle_color_op.hh>
00042 #endif //OST_IMG_ENABLED
00043
00044 namespace ost { namespace gfx {
00045
00046 class Surface;
00047 typedef boost::shared_ptr<Surface> SurfaceP;
00048
00049 class DLLEXPORT_OST_GFX Surface: public GfxObj {
00050 typedef std::map<mol::SurfaceVertexID, VertexID> VMap;
00051
00052 public:
00053 Surface(const String& name, const mol::SurfaceHandle& sh);
00054
00055 virtual void OnRenderModeChange();
00056
00057 virtual void CustomRenderGL(RenderPass pass);
00058 virtual void CustomRenderPov(PovState& pov);
00059 virtual geom::AlignedCuboid GetBoundingBox(bool use_global=false) const;
00060
00061 mol::SurfaceHandle GetHandle() const;
00062
00063 void Rebuild();
00064 void Replace(const mol::SurfaceHandle& sh);
00065
00067 void SetColor(const Color& col, const String& selection=String(""));
00068
00069
00070 virtual void ColorBy(const mol::EntityView& ev,
00071 const String& prop,
00072 const Gradient& g, float minv, float maxv);
00073 #if OST_IMG_ENABLED
00074
00075 virtual void ColorBy(const img::MapHandle& mh,
00076 const String& prop,
00077 const Gradient& g,float minv, float maxv);
00078 #endif //OST_IMG_ENABLED
00079
00080
00081 void ColorBy(const String& prop,
00082 const Gradient& gradient,
00083 float minv,float maxv,
00084 mol::Prop::Level hint=mol::Prop::UNSPECIFIED);
00085
00086
00087 void ColorBy(const String& prop,
00088 const Gradient& gradient,
00089 mol::Prop::Level hint=mol::Prop::UNSPECIFIED);
00090
00091
00092 void ColorBy(const String& prop,
00093 const Color& c1, const Color& c2,
00094 float min, float max,
00095 mol::Prop::Level hint=mol::Prop::UNSPECIFIED);
00096
00097
00098 void ColorBy(const String& prop,
00099 const Color& c1, const Color& c2,
00100 mol::Prop::Level hint=mol::Prop::UNSPECIFIED);
00101
00102
00103 void Apply(const gfx::UniformColorOp& op, bool store=true);
00104 void Apply(const gfx::BasicGradientColorOp& op, bool store=true);
00105 void Apply(const gfx::GradientLevelColorOp& op, bool store=true);
00106 void Apply(const gfx::EntityViewColorOp& op, bool store=true);
00107 #if OST_IMG_ENABLED
00108 void Apply(const gfx::MapHandleColorOp& op, bool store=true);
00109 #endif
00110
00111 void CleanColorOps();
00112 void ReapplyColorOps();
00113
00114 protected:
00115 virtual void CustomPreRenderGL(bool flag);
00116
00117 private:
00118
00119 mol::SurfaceHandle sh_;
00120 VMap vmap_;
00121
00122 mutable bool recalc_bb_;
00123
00124 boost::ptr_vector<gfx::ColorOp> c_ops_;
00125 };
00126
00127 }}
00128
00129 #endif