42 : std::runtime_error( what_arg )
53 Number(
const float v) : f(v) {}
54 Number(
const int v) : i(v) {}
57 typedef std::vector<Number> NumVec;
58 typedef std::vector<std::string> StringVec;
82 Value() : type(NULL_TYPE) {}
85 if (type == STRING_TYPE)
87 else if (type != NULL_TYPE)
99 svec =
new StringVec(*other.svec);
102 nvec =
new NumVec(*other.nvec);
109 return (type == STRING_TYPE) ? svec->size() : nvec->size();
111 const float* get_floats()
const 113 return reinterpret_cast<const float*
>(&(*nvec)[0].f);
115 const int* get_ints()
const 117 return reinterpret_cast<const int*
>(&(*nvec)[0].i);
119 const std::string& get_string(
const size_t i)
const 123 float get_float(
const size_t i)
const 127 int get_int(
const size_t i)
const 131 bool get_bool(
const size_t i)
const 133 return (*nvec)[i].i ? true :
false;
138 if (type == STRING_TYPE)
140 else if (type != NULL_TYPE)
146 void set_type(
const ValueType _type)
151 if (type == STRING_TYPE)
152 svec =
new StringVec();
153 else if (type != NULL_TYPE)
157 const char* type_string()
const 188 std::vector<std::string> names;
189 std::vector<Value> values;
193 names.erase(names.begin(), names.end());
194 values.erase(values.begin(), values.end());
200 virtual void identity() {}
202 virtual void rotate(
const float angle,
const float x,
const float y,
const float z) {}
203 virtual void scale(
const float x,
const float y,
const float z) {}
204 virtual void translate(
const float x,
const float y,
const float z) {}
206 const float ex,
const float ey,
const float ez,
207 const float lx,
const float ly,
const float lz,
208 const float ux,
const float uy,
const float uz) {}
210 virtual void integrator(
const char* name,
const ParameterList& params) {}
211 virtual void sampler(
const char* name,
const ParameterList& params) {}
212 virtual void pixel_filter(
const char* name,
const ParameterList& params) {}
213 virtual void film(
const char* name,
const ParameterList& params) {}
214 virtual void camera(
const char* name,
const ParameterList& params) {}
216 virtual void world_begin() {}
217 virtual void world_end() {}
219 virtual void attribute_begin() {}
220 virtual void attribute_end() {}
222 virtual void transform_begin() {}
223 virtual void transform_end() {}
225 virtual void texture(
const char* name,
const char* texel_type,
const char* texture_type,
const ParameterList& params) {}
226 virtual void make_named_medium(
const char* name,
const ParameterList& params) {}
227 virtual void make_named_material(
const char* name,
const ParameterList& params) {}
228 virtual void named_material(
const char* name) {}
229 virtual void medium_interface(
const char* name1,
const char* name2) {}
230 virtual void material(
const char* name,
const ParameterList& params) {}
231 virtual void area_light_source(
const char* type,
const ParameterList& params) {}
233 virtual void shape(
const char* type,
const ParameterList& params) {}
238 EchoImporter(FILE* _file) : stack_depth(0), file(_file) {};
242 for (
unsigned i = 0; i < stack_depth; ++i)
246 void print_value(
const Value& value)
249 if (value.type == STRING_TYPE)
251 for (
size_t i = 0; i < value.size(); ++i)
252 fprintf(file,
" \"%s\"", value.get_string(i).c_str());
255 value.type == FLOAT_TYPE ||
256 value.type == POINT_TYPE ||
257 value.type == NORMAL_TYPE ||
258 value.type == VECTOR_TYPE ||
259 value.type == RGB_TYPE ||
260 value.type == XYZ_TYPE ||
261 value.type == SPECTRUM_TYPE)
263 for (
size_t i = 0; i < value.size(); ++i)
264 fprintf(file,
" %f", value.get_float(i));
266 else if (value.type == INT_TYPE)
268 for (
size_t i = 0; i < value.size(); ++i)
269 fprintf(file,
" %i", value.get_int(i));
271 else if (value.type == BOOL_TYPE)
273 for (
size_t i = 0; i < value.size(); ++i)
274 fprintf(file,
" %s", value.get_bool(i) ?
"\"true\"" :
"\"false\"");
280 for (
size_t i = 0; i < params.names.size(); ++i)
282 fprintf(file,
" \"%s %s\" ", params.values[i].type_string(), params.names[i].c_str());
283 print_value(params.values[i]);
287 virtual void identity() { indent(); fprintf(file,
"Identity\n"); }
288 virtual void transform(
const Value& floats) { indent(); fprintf(file,
"Transform "); print_value(floats); fprintf(file,
"\n"); }
289 virtual void rotate(
const float angle,
const float x,
const float y,
const float z) { indent(); fprintf(file,
"Rotate %f %f %f %f\n", angle, x, y, z); }
290 virtual void scale(
const float x,
const float y,
const float z) { indent(); fprintf(file,
"Scale %f %f %f\n", x, y, z); }
291 virtual void translate(
const float x,
const float y,
const float z) { indent(); fprintf(file,
"Translate %f %f %f\n", x, y, z); }
293 const float ex,
const float ey,
const float ez,
294 const float lx,
const float ly,
const float lz,
295 const float ux,
const float uy,
const float uz)
297 fprintf(file,
"LookAt %f %f %f %f %f %f %f %f %f\n", ex, ey, ez, lx, ly, lz, ux, uy, uz);
300 virtual void integrator(
const char* name,
const ParameterList& params) { indent(); fprintf(file,
"Integrator \"%s\" ", name); print_params(params); fprintf(file,
"\n"); }
301 virtual void sampler(
const char* name,
const ParameterList& params) { indent(); fprintf(file,
"Sampler \"%s\" ", name); print_params(params); fprintf(file,
"\n"); }
302 virtual void pixel_filter(
const char* name,
const ParameterList& params) { indent(); fprintf(file,
"PixelFilter \"%s\" ", name); print_params(params); fprintf(file,
"\n"); }
303 virtual void film(
const char* name,
const ParameterList& params) { indent(); fprintf(file,
"Film \"%s\" ", name); print_params(params); fprintf(file,
"\n"); }
304 virtual void camera(
const char* name,
const ParameterList& params) { indent(); fprintf(file,
"Camera \"%s\" ", name); print_params(params); fprintf(file,
"\n"); }
306 virtual void world_begin() { indent(); fprintf(file,
"WorldBegin\n"); ++stack_depth; }
307 virtual void world_end() { --stack_depth; indent(); fprintf(file,
"WorldEnd\n"); }
309 virtual void attribute_begin() { indent(); fprintf(file,
"AttributeBegin\n"); ++stack_depth; }
310 virtual void attribute_end() { --stack_depth; indent(); fprintf(file,
"AttributeEnd\n"); }
312 virtual void transform_begin() { indent(); fprintf(file,
"TransformBegin\n"); ++stack_depth; }
313 virtual void transform_end() { --stack_depth; indent(); fprintf(file,
"TransformEnd\n"); }
315 virtual void texture(
const char* name,
const char* texel_type,
const char* texture_type,
const ParameterList& params)
318 fprintf(file,
"Texture \"%s\" \"%s\" \"%s\" ", name, texel_type, texture_type);
319 print_params(params);
322 virtual void make_named_medium(
const char* name,
const ParameterList& params) { indent(); fprintf(file,
"MakeNamedMedium \"%s\" ", name); print_params(params); fprintf(file,
"\n"); }
323 virtual void make_named_material(
const char* name,
const ParameterList& params) { indent(); fprintf(file,
"MakeNamedMaterial \"%s\"", name); print_params(params); fprintf(file,
"\n"); }
324 virtual void named_material(
const char* name) { indent(); fprintf(file,
"NamedMaterial \"%s\"\n", name); }
325 virtual void medium_interface(
const char* name1,
const char* name2) { indent(); fprintf(file,
"MediumInterface \"%s\" \"%s\"\n", name1, name2); }
326 virtual void material(
const char* type,
const ParameterList& params) { indent(); fprintf(file,
"Material \"%s\" ", type); print_params(params); fprintf(file,
"\n"); }
327 virtual void area_light_source(
const char* type,
const ParameterList& params) { indent(); fprintf(file,
"AreaLightSource \"%s\" ", type); print_params(params); fprintf(file,
"\n"); }
329 virtual void shape(
const char* type,
const ParameterList& params) { indent(); fprintf(file,
"Shape \"%s\" ", type); print_params(params); fprintf(file,
"\n"); }
331 unsigned stack_depth;
335 void import(
const char* filename,
Importer* importer);
void transform(const uint32 n, const Iterator in, const Output out, const Functor functor)
Definition: primitives_inl.h:357
Definition: pbrt_parser.h:198
CUGAR_HOST_DEVICE Matrix< T, 4, 4 > translate(const Vector< T, 3 > &vec)
Definition: matrix_inline.h:524
Definition: pbrt_importer.cpp:41
Definition: pbrt_parser.h:38
Matrix< T, 4, 4 > look_at(const Vector< T, 3 > &eye, const Vector< T, 3 > ¢er, const Vector< T, 3 > &up, bool flip_sign=false)
Definition: matrix_inline.h:568
Definition: pbrt_parser.h:186
Definition: pbrt_parser.h:46
Definition: pbrt_parser.h:236
Definition: pbrt_parser.h:74
CUGAR_HOST_DEVICE Matrix< T, 4, 4 > scale(const Vector< T, 3 > &vec)
build a 3d scaling matrix
Definition: matrix_inline.h:539