00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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