00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: POVRenderer.h,v 1.12.16.1 2007/03/25 21:26:13 oliver Exp $ 00005 // 00006 00007 #ifndef BALL_VIEW_RENDERING_POVRENDERER_H 00008 #define BALL_VIEW_RENDERING_POVRENDERER_H 00009 00010 #ifndef BALL_VIEW_RENDERING_RENDERER_H 00011 # include <BALL/VIEW/RENDERING/renderer.h> 00012 #endif 00013 00014 #ifndef BALL_SYSTEM_FILE_H 00015 # include <BALL/SYSTEM/file.h> 00016 #endif 00017 00018 #ifndef BALL_MATHS_VECTOR3_H 00019 # include <BALL/MATHS/vector3.h> 00020 #endif 00021 00022 #ifndef BALL_MATHS_MATRIX44_H 00023 # include <BALL/MATHS/matrix44.h> 00024 #endif 00025 00026 namespace BALL 00027 { 00028 namespace VIEW 00029 { 00030 class ColorRGBA; 00031 class ClippingPlane; 00032 00039 class BALL_VIEW_EXPORT POVRenderer : public Renderer 00040 { 00041 public: 00042 00043 BALL_CREATE(POVRenderer) 00044 00045 struct POVRendererClippingPlane 00046 { 00047 public: 00048 Vector3 normal; 00049 float translation; 00050 // Vector3 translation; 00051 }; 00052 00056 00058 POVRenderer(); 00059 00063 POVRenderer(const String& name) 00064 throw(Exception::FileNotFound); 00065 00066 // Only for Python 00067 POVRenderer(const POVRenderer& renderer); 00068 00069 00071 virtual ~POVRenderer(); 00072 00074 virtual void clear(); 00075 00077 00080 00084 void setFileName(const String& name) 00085 throw(Exception::FileNotFound); 00086 00088 void setOstream(std::ostream& out_stream); 00089 00091 void setHumanReadable(bool state) 00092 { human_readable_ = state;} 00093 00095 bool isHumanReadable() const 00096 { return human_readable_;} 00097 00100 String POVColorRGBA(const ColorRGBA& input); 00101 00104 String POVFinish(const String& object, const ColorRGBA& input); 00105 00108 String POVVector3(Vector3 input); 00109 00110 virtual bool renderOneRepresentation(const Representation& representation); 00111 00113 00117 00120 virtual bool init(Scene& scene); 00121 00125 virtual bool init(const Stage& stage, float width, float height); 00126 00130 virtual bool finish(); 00131 00132 void renderSphere_(const Sphere& sphere); 00133 00134 void renderDisc_(const Disc& disc); 00135 00136 void renderTube_(const Tube& tube); 00137 00138 void renderTwoColoredTube_(const TwoColoredTube& tube); 00139 00140 void renderMesh_(const Mesh& mesh); 00141 00142 void renderTwoColoredLine_(const TwoColoredLine& line); 00143 00144 void renderLine_(const Line& line); 00145 00146 void renderPoint_(const Point& point); 00147 00148 // do nothing 00149 void renderLabel_(const Label&); 00150 00152 virtual void renderMultiLine_(const MultiLine& line); 00153 00155 00156 protected: 00157 00158 const ColorRGBA& getColor_(const GeometricObject& object); 00159 00160 std::ostream* outfile_; 00161 String trimFloatValue_(float value); 00162 void storeColor_(const GeometricObject& object); 00163 String getColorIndex_(const ColorRGBA& color); 00164 00165 Vector3 origin_; 00166 Matrix4x4 rotation_; 00167 vector<ClippingPlane*> clipping_planes_; 00168 bool human_readable_; 00169 00170 typedef HashMap<String, Size> ColorMap; 00171 ColorMap color_map_; 00172 vector<const Representation*> representations_; 00173 HashSet<const Mesh*> wireframes_; 00174 HashSet<String> color_strings_; 00175 String font_file_; 00176 double m_[12]; 00177 Position color_index_; 00178 }; 00179 00180 } // namespace BALL 00181 } // namespace VIEW 00182 00183 #endif // BALL_VIEW_RENDERING_POVRENDERER_H