00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <Shape.hpp>
00021
00022 #include <Translation.hpp>
00023 #include <Rotation.hpp>
00024 #include <Scale.hpp>
00025 #include <TransformMatrix.hpp>
00026
00027 #include <Scene.hpp>
00028
00029 void Shape::
00030 setTransformation(const Transform& T)
00031 {
00032 __trans.push_back(T.getCopy());
00033 }
00034
00035 std::ostream& operator << (std::ostream& os, const Shape& shape)
00036 {
00037 return shape.__put(os);
00038 }
00039
00040 void Shape::
00041 parseTransform(const parsetrans& trans)
00042 {
00043 for (int i=0; i<trans.number ; i++) {
00044 switch (trans.type[i]) {
00045 case matrix: {
00046 TransformMatrix M(trans.mat);
00047 this->setTransformation(M);
00048 break;
00049 }
00050 case rotation: {
00051 TinyVector<3> v( trans.vect[0][i],
00052 trans.vect[1][i],
00053 trans.vect[2][i]);
00054 Rotation R(v);
00055 this->setTransformation(R);
00056 break;
00057 }
00058 case translation: {
00059 TinyVector<3> v( trans.vect[0][i],
00060 trans.vect[1][i],
00061 trans.vect[2][i]);
00062 Translation T(v);
00063 this->setTransformation(T);
00064 break;
00065 }
00066 case scale: {
00067 TinyVector<3> v( trans.vect[0][i],
00068 trans.vect[1][i],
00069 trans.vect[2][i]);
00070 Scale S(v);
00071 this->setTransformation(S);
00072 break;
00073 }
00074 default: {
00075 throw ErrorHandler(__FILE__,__LINE__,
00076 "unknown transformation",
00077 ErrorHandler::unexpected);
00078 }
00079 }
00080 }
00081 }
00082