src/qvgui/qv3dmodel.cpp

00001 /*
00002  *      Copyright (C) 2007. PARP Research Group.
00003  *      <http://perception.inf.um.es>
00004  *      University of Murcia, Spain.
00005  *
00006  *      This file is part of the QVision library.
00007  *
00008  *      QVision is free software: you can redistribute it and/or modify
00009  *      it under the terms of the GNU Lesser General Public License as
00010  *      published by the Free Software Foundation, version 3 of the License.
00011  *
00012  *      QVision is distributed in the hope that it will be useful,
00013  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  *      GNU Lesser General Public License for more details.
00016  *
00017  *      You should have received a copy of the GNU Lesser General Public
00018  *      License along with QVision. If not, see <http://www.gnu.org/licenses/>.
00019  */
00020 
00021 #include <qvgui/qv3dmodel.h>
00022 #include <qvgui/qvglcanvas.h>
00023 
00024 void QV3DModel::paint(QVGLCanvas &glWidget) const
00025         {
00026         glBegin(GL_LINES);
00027         for (int i=0; i< segmentList.size(); i++)
00028                 {
00029                 QV3DModelSegment s = segmentList.at(i);
00030                 glColor3ub(s.r,s.g,s.b);
00031                 glVertex3f(s.x0,s.y0,s.z0);
00032                 glVertex3f(s.x1,s.y1,s.z1);
00033                 }
00034         glEnd();
00035 
00036         for (int i=0; i< textList.size(); i++)
00037                 {
00038                 QV3DModelText text = textList.at(i);
00039                 glColor3ub(text.r,text.g,text.b);
00040                 glWidget.renderText(text.x, text.y, text.z, text.text);
00041                 }
00042 
00043         if (imgList.size() > 0)
00044                 {
00045                 const QVImage<uChar> image= imgList.at(0);
00046                 const uInt rows = image.getRows(), cols = image.getCols();              
00047 
00048                 const double height = 1, width = (double)rows/(double)cols;
00049 
00050                 const int coords[2][4][3] =     {
00051                                                 { { -width, -height, 0 }, { +width, -height, 0 }, { +width, +height, 0 }, { -width, +height, 0 } },
00052                                                 { { +width, -height, 0 }, { -width, -height, 0 }, { -width, +height, 0 }, { +width, +height, 0 } }
00053                                                 };
00054 
00055                 GLuint texture = glWidget.bindTexture(image, GL_TEXTURE_2D);
00056 
00057                 glBindTexture(GL_TEXTURE_2D, texture);
00058                 glBegin(GL_QUADS);
00059                 for (int i = 0; i < 2; i++)
00060                         for (int j = 0; j < 4; j++)
00061                                 {
00062                                 glTexCoord2d(j == 0 || j == 3, j == 0 || j == 1);
00063                                 glVertex3d(0.5 * coords[i][j][0], 0.5 * coords[i][j][1], 0.5 * coords[i][j][2]);
00064                                 }
00065                 glEnd();
00066 
00067                 glDeleteTextures(1,&texture);
00068                 }
00069         }
00070 
00071 QV3DModel QV3DModel::crossHair(const double size)
00072         {
00073         QV3DModel model;
00074         model.addSegment(-size,0,0,     +size,0,0,      255,255,0);
00075         model.addSegment(0,-size,0,     0,+size,0,      255,255,0);
00076         model.addSegment(0,0,-size,     0,0,+size,      255,255,0);
00077         return model;
00078         }
00079 
00080 QV3DModel QV3DModel::cube(const double size)
00081         {
00082         QV3DModel model;
00083         model.addSegment(-size,+size,+size,     -size,-size,+size,      255,255,255);
00084         model.addSegment(-size,+size,+size,     -size,+size,-size,      255,255,255);
00085         model.addSegment(+size,-size,+size,     -size,-size,+size,      255,255,255);
00086         model.addSegment(+size,-size,+size,     +size,-size,-size,      255,255,255);
00087         model.addSegment(+size,+size,-size,     +size,-size,-size,      255,255,255);
00088         model.addSegment(+size,+size,-size,     -size,+size,-size,      255,255,255);
00089         model.addSegment(+size,-size,-size,     -size,-size,-size,      255,255,255);
00090         model.addSegment(-size,+size,-size,     -size,-size,-size,      255,255,255);
00091         model.addSegment(-size,-size,+size,     -size,-size,-size,      255,255,255);
00092         model.addSegment(+size,+size,+size,     -size,+size,+size,      255,255,255);
00093         model.addSegment(+size,+size,+size,     +size,-size,+size,      255,255,255);
00094         model.addSegment(+size,+size,+size,     +size,+size,-size,      255,255,255);
00095 
00096         return model;
00097         }
00098 
00099 QV3DModel QV3DModel::image(QVImage<uChar> &img)
00100         {
00101         QV3DModel model;
00102         model.addImage(img);
00103         return model;
00104         }
00105 
00106 QV3DModel QV3DModel::cuboid(const double sizex, const double sizey, const double sizez)
00107         {
00108         QV3DModel model;
00109         model.addSegment(-sizex,+sizey,+sizez,  -sizex,-sizey,+sizez,   255,255,255);
00110         model.addSegment(-sizex,+sizey,+sizez,  -sizex,+sizey,-sizez,   255,255,255);
00111         model.addSegment(+sizex,-sizey,+sizez,  -sizex,-sizey,+sizez,   255,255,255);
00112         model.addSegment(+sizex,-sizey,+sizez,  +sizex,-sizey,-sizez,   255,255,255);
00113         model.addSegment(+sizex,+sizey,-sizez,  +sizex,-sizey,-sizez,   255,255,255);
00114         model.addSegment(+sizex,+sizey,-sizez,  -sizex,+sizey,-sizez,   255,255,255);
00115         model.addSegment(+sizex,-sizey,-sizez,  -sizex,-sizey,-sizez,   255,255,255);
00116         model.addSegment(-sizex,+sizey,-sizez,  -sizex,-sizey,-sizez,   255,255,255);
00117         model.addSegment(-sizex,-sizey,+sizez,  -sizex,-sizey,-sizez,   255,255,255);
00118         model.addSegment(+sizex,+sizey,+sizez,  -sizex,+sizey,+sizez,   255,255,255);
00119         model.addSegment(+sizex,+sizey,+sizez,  +sizex,-sizey,+sizez,   255,255,255);
00120         model.addSegment(+sizex,+sizey,+sizez,  +sizex,+sizey,-sizez,   255,255,255);
00121 
00122         return model;
00123         }
00124 
00125 QV3DModel QV3DModel::grid(const double stepX, const double stepY, const int cellsX, const int cellsY)
00126         {
00127         QV3DModel model;
00128 
00129         for (double i = -cellsX; i <= cellsX; i++)
00130                 model.addSegment(stepX*i, stepY*cellsY, +0,     stepX*i, -stepY*cellsY , +0,    256,128,128);
00131 
00132         for (double j = -cellsY; j <= cellsY; j++)
00133                 model.addSegment(stepX*cellsX, stepY*j, +0,     -stepX*cellsX, stepY*j , +0,    256,128,128);
00134 
00135         return model;
00136         }
00137 
00138 QV3DModel QV3DModel::referenceCoordinates(const double size, const bool labelAxis)
00139         {
00140         QV3DModel model;
00141         model.addSegment(0,0,0, +size,0,0,      255,0,0);
00142         model.addSegment(0,0,0, 0,+size,0,      0,255,0);
00143         model.addSegment(0,0,0, 0,0,+size,      0,0,255);
00144 
00145         if (labelAxis)
00146                 {
00147                 model.addText(1,0,0,"x", 255,255,255);
00148                 model.addText(0,1,0,"y", 255,255,255);
00149                 model.addText(0,0,1,"z", 255,255,255);
00150                 }
00151         return model;
00152         }
00153 

Generated on Thu Jul 17 17:23:28 2008 for QVision by  doxygen 1.5.3