00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <SceneExpression.hpp>
00021 #include <FieldExpression.hpp>
00022 #include <Variable.hpp>
00023
00024 #include <Scene.hpp>
00025 #include <Information.hpp>
00026
00027 #include <fstream>
00028 #include <string>
00029
00030 #include <POVLexer.hpp>
00031
00032 #include <VariableRepository.hpp>
00033
00034 Scene* pScene;
00035 POVLexer* povlexer;
00036
00037
00038 int povparse();
00039
00040 ReferenceCounting<Scene> SceneExpression::scene() const
00041 {
00042 ASSERT(__sceneType != SceneExpression::undefined);
00043 return __scene;
00044 }
00045
00046 SceneExpression::SceneExpression(const SceneExpression& e)
00047 : Expression(e),
00048 __scene(e.__scene),
00049 __sceneType(e.__sceneType)
00050 {
00051 ;
00052 }
00053
00054 SceneExpression::SceneExpression(ReferenceCounting<Scene> S,
00055 const SceneExpression::SceneType& t)
00056 : Expression(Expression::scene),
00057 __scene(S),
00058 __sceneType(t)
00059 {
00060 ;
00061 }
00062
00063 SceneExpression::~SceneExpression()
00064 {
00065 ;
00066 }
00067
00068
00069 std::ostream& SceneExpressionPOVRay::put(std::ostream& os) const
00070 {
00071
00072 os << '\n' << __FILE__ << ':' << __LINE__ << ": Not implemented\n";
00073 return os;
00074 }
00075
00076 void SceneExpressionPOVRay::execute()
00077 {
00078 (*__filename).execute();
00079 const std::string& filename = (*__filename).value();
00080
00081 ffout(2) << "Building Scene ... ";
00082 __scene = new Scene();
00083 ffout(2) << "done\n";
00084
00085 std::ifstream POVin(filename.c_str());
00086 if (not(POVin)) {
00087 throw ErrorHandler(__FILE__,__LINE__,
00088 "error: cannot open file '"+stringify(filename)+"'",
00089 ErrorHandler::normal);
00090 }
00091
00092
00093
00094
00095 pScene = __scene;
00096 ffout(2) << "Parsing POVRay file: \"" << filename << "\"\n";
00097
00098
00099 povlexer = new POVLexer(POVin);
00100
00101
00102 povparse ();
00103
00104 ffout(3) << "- the scene is composed of " << (*pScene).nbObjects()
00105 << " object(s)\n";
00106 for (size_t i=0; i<(*__scene).nbObjects(); i++)
00107 ffout(4) << '\t' << (*__scene).object(i) << '\n';
00108
00109 ffout(2) << "Parsing POVRay file: done\n";
00110
00111 Information::instance().setScene(__scene);
00112 }
00113
00114 SceneExpressionPOVRay::
00115 SceneExpressionPOVRay(ReferenceCounting<StringExpression> s)
00116 : SceneExpression(0, SceneExpression::povray),
00117 __filename(s)
00118 {
00119 ;
00120 }
00121
00122
00123 SceneExpressionPOVRay::
00124 SceneExpressionPOVRay(const SceneExpressionPOVRay& m)
00125 : SceneExpression(m),
00126 __filename(m.__filename)
00127 {
00128 ;
00129 }
00130
00131 SceneExpressionPOVRay::
00132 ~SceneExpressionPOVRay()
00133 {
00134 ;
00135 }
00136
00137 void SceneExpressionVariable::execute()
00138 {
00139 __sceneVariable = VariableRepository::instance().findVariable<SceneVariable>(__sceneName);
00140 __scene = __sceneVariable->expression()->scene();
00141 }
00142
00143
00144 SceneExpressionVariable::
00145 SceneExpressionVariable(const std::string& sceneName)
00146 : SceneExpression(0,SceneExpression::variable),
00147 __sceneName(sceneName),
00148 __sceneVariable(0)
00149 {
00150 ;
00151 }
00152
00153 SceneExpressionVariable::SceneExpressionVariable(const SceneExpressionVariable& e)
00154 : SceneExpression(e),
00155 __sceneName(e.__sceneName),
00156 __sceneVariable(e.__sceneVariable)
00157 {
00158 ;
00159 }
00160
00161 SceneExpressionVariable::~SceneExpressionVariable()
00162 {
00163 ;
00164 }
00165
00166
00167 std::ostream& SceneExpressionTransform::put(std::ostream& os) const
00168 {
00169 os << "transform(" << (*__sceneExpression) << ',' << (*__fieldExpression) << ')';
00170 return os;
00171 }
00172
00173 void SceneExpressionTransform::execute()
00174 {
00175 throw ErrorHandler(__FILE__, __LINE__,
00176 "not yet implemented",
00177 ErrorHandler::unexpected);
00178 }
00179
00180 SceneExpressionTransform::
00181 SceneExpressionTransform(const SceneExpressionTransform& s)
00182 : SceneExpression(s),
00183 __sceneExpression(s.__sceneExpression),
00184 __fieldExpression(s.__fieldExpression)
00185 {
00186 }
00187
00188 SceneExpressionTransform::
00189 SceneExpressionTransform(ReferenceCounting<SceneExpression> sceneExpression,
00190 ReferenceCounting<FieldExpression> fieldExpression)
00191 : SceneExpression(0, SceneExpression::transform),
00192 __sceneExpression(sceneExpression),
00193 __fieldExpression(fieldExpression)
00194 {
00195 ;
00196 }
00197
00198 SceneExpressionTransform::
00199 ~SceneExpressionTransform()
00200 {
00201 ;
00202 }
00203
00204
00205
00206 SceneExpressionUndefined
00207 ::SceneExpressionUndefined()
00208 : SceneExpression(0,
00209 SceneExpression::undefined)
00210 {
00211 ;
00212 }
00213
00214 SceneExpressionUndefined
00215 ::SceneExpressionUndefined(const SceneExpressionUndefined& m)
00216 : SceneExpression(m)
00217 {
00218 ;
00219 }
00220
00221 SceneExpressionUndefined
00222 ::~SceneExpressionUndefined()
00223 {
00224 ;
00225 }
00226