00001 #include "unitcube.h"
00002
00003
00004
00005 UnitCube::UnitCube()
00006 {
00007
00008 e1.reinit(3);
00009 e2.reinit(3);
00010 e3.reinit(3);
00011
00012 e1=0;
00013 e2=0;
00014 e3=0;
00015
00016 e1(0)=1;
00017 e2(1)=1;
00018 e3(2)=1;
00019
00020
00021 _vertices.reinit(8,3);
00022 _vertices(0,0) = 0; _vertices(0,1) = 0; _vertices(0,2) = 0;
00023 _vertices(1,0) = 1; _vertices(1,1) = 0; _vertices(1,2) = 0;
00024 _vertices(2,0) = 0; _vertices(2,1) = 1; _vertices(2,2) = 0;
00025 _vertices(3,0) = 1; _vertices(3,1) = 1; _vertices(3,2) = 0;
00026 _vertices(4,0) = 0; _vertices(4,1) = 0; _vertices(4,2) = 1;
00027 _vertices(5,0) = 1; _vertices(5,1) = 0; _vertices(5,2) = 1;
00028 _vertices(6,0) = 0; _vertices(6,1) = 1; _vertices(6,2) = 1;
00029 _vertices(7,0) = 1; _vertices(7,1) = 1; _vertices(7,2) = 1;
00030
00031
00032
00033
00034
00035 }
00036
00037 UnitCube::~UnitCube()
00038 {
00039
00040 }
00041
00042
00043 unsigned proj_info[6][4]={
00044 {1,2,0,0},
00045 {1,2,0,1},
00046 {0,2,1,0},
00047 {0,2,1,1},
00048 {0,1,2,0},
00049 {0,1,2,1}};
00050
00051
00052
00053
00054 void UnitCube::project_2d_points_into_faces(const VecDouble &pt2D,VecDouble *ppt3D,FaceDirection3D dir)
00055 {
00056 assert(pt2D.size() == 2);
00057 assert(ppt3D->size() == 3);
00058 VecDouble &pt3D = *ppt3D;
00059 pt3D(proj_info[dir][0])=pt2D(0);
00060 pt3D(proj_info[dir][1])=pt2D(1);
00061 pt3D(proj_info[dir][2])=static_cast<double>(proj_info[dir][3]);
00062
00063
00064 }
00065
00066
00067 void UnitCube::face_base_vectors(Index faceId,VecDouble *v1,VecDouble *v2)
00068 {
00069 if (faceId < 2)
00070 {
00071 (*v1)=e2;
00072 (*v2)=e3;
00073 return;
00074 }
00075 if (faceId < 4)
00076 {
00077 (*v1)=e1;
00078 (*v2)=e3;
00079 return;
00080 }
00081 if (faceId < 7)
00082 {
00083 (*v1)=e1;
00084 (*v2)=e2;
00085 return;
00086 }
00087 assert(0);
00088 return;
00089 }
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101