From: <hug...@li...> - 2011-10-06 16:55:55
|
branch: details: http://hugin.hg.sourceforge.net/hgweb/hugin/hugin/hgrepo/h/hu/hugin/hugin/rev/637ff2cffb70 changeset: 5612:637ff2cffb70 user: tmodes date: Thu Oct 06 18:39:26 2011 +0200 description: Change grid appearance * thinner lines with contrast rich color * some thickness in x and y direction diffstat: src/hugin1/hugin/ProjectionGridTool.cpp | 254 +++++++++---------------------- 1 files changed, 76 insertions(+), 178 deletions(-) diffs (411 lines): diff -r 32b5e68f1717 -r 637ff2cffb70 src/hugin1/hugin/ProjectionGridTool.cpp --- a/src/hugin1/hugin/ProjectionGridTool.cpp Mon Oct 03 09:22:28 2011 +0200 +++ b/src/hugin1/hugin/ProjectionGridTool.cpp Thu Oct 06 18:39:26 2011 +0200 @@ -47,7 +47,8 @@ ProjectionGridTool::~ProjectionGridTool() { - if (mesh_info) { + if (mesh_info) + { delete mesh_info; } } @@ -58,28 +59,26 @@ helper->NotifyMe(ToolHelper::DRAW_UNDER_IMAGES, this); } - void PreviewProjectionGridTool::BeforeDrawImagesEvent() { } void PreviewProjectionGridTool::AfterDrawImagesEvent() { - DEBUG_DEBUG("begin"); - if (!texture_created) { - if (!createTexture()) { + if (!texture_created) + { + if (!createTexture()) + { return; } } - - if (!mesh_info) { + if (!mesh_info) + { createMesh(); } mesh_info->Update(); - -// glPushMatrix(); glColor4f(1,1,1,1); glEnable( GL_TEXTURE_2D ); glEnable(GL_BLEND); @@ -90,19 +89,17 @@ glBindTexture(GL_TEXTURE_2D, texture_num); } else + { glBindTexture(GL_TEXTURE_2D, texture_num); + }; glMatrixMode(GL_TEXTURE); glPushMatrix(); - glScalef(0.5,1,1); glMatrixMode(GL_MODELVIEW); mesh_info->CallList(); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glDisable(GL_BLEND); -// glPopMatrix(); - - } void PanosphereOverviewProjectionGridTool::Activate() @@ -113,10 +110,8 @@ ((PanosphereOverviewToolHelper*)helper)->NotifyMe(PanosphereOverviewToolHelper::DRAW_UNDER_IMAGES_FRONT, this); } - void PanosphereOverviewProjectionGridTool::BeforeDrawImagesBackEvent() { - } void PanosphereOverviewProjectionGridTool::BeforeDrawImagesFrontEvent() @@ -126,28 +121,20 @@ void PanosphereOverviewProjectionGridTool::AfterDrawImagesBackEvent() { DEBUG_DEBUG("begin"); - - if (!texture_created) { - if (!createTexture()) { + if (!texture_created) + { + if (!createTexture()) + { return; } } - if (!mesh_info) { + if (!mesh_info) + { createMesh(); } DEBUG_DEBUG("resources created"); - -// glDisable(GL_TEXTURE_2D); -// glColor4f(0.3,0.3,0.3,0.6); -// glEnable(GL_BLEND); -// glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -// GLUquadric* gridb = gluNewQuadric(); -// gluSphere(gridb, 101,40,20); - -// glEnable(GL_TEXTURE_2D); - glColor4f(1,1,1,0.3); glEnable( GL_TEXTURE_2D ); glEnable(GL_BLEND); @@ -158,20 +145,14 @@ glBindTexture(GL_TEXTURE_2D, texture_num); } else + { glBindTexture(GL_TEXTURE_2D, texture_num); + }; glMatrixMode(GL_TEXTURE); -// using just a sphere instead of the remapped mesh for better quality -// glPushMatrix(); -// glScalef(0.5,1,1); -// glMatrixMode(GL_MODELVIEW); -// mesh_info->CallList(); -// glMatrixMode(GL_TEXTURE); -// glPopMatrix(); - + // using just a sphere instead of the remapped mesh for better quality glPushMatrix(); glRotated(180,1,0,0); - glScalef(0.5,1,1); glMatrixMode(GL_MODELVIEW); GLUquadric* grid = gluNewQuadric(); gluQuadricTexture(grid, GL_TRUE); @@ -185,31 +166,26 @@ glMatrixMode(GL_TEXTURE); glPopMatrix(); - glDisable(GL_BLEND); - glMatrixMode(GL_MODELVIEW); - DEBUG_DEBUG("end"); - - } void PanosphereOverviewProjectionGridTool::AfterDrawImagesFrontEvent() { - - - if (!texture_created) { - if (!createTexture()) { + if (!texture_created) + { + if (!createTexture()) + { return; } } - if (!mesh_info) { + if (!mesh_info) + { createMesh(); } - glColor4f(1,1,1,1); glEnable( GL_TEXTURE_2D ); glEnable(GL_BLEND); @@ -221,20 +197,14 @@ glBindTexture(GL_TEXTURE_2D, texture_num); } else + { glBindTexture(GL_TEXTURE_2D, texture_num); + }; glMatrixMode(GL_TEXTURE); //using just a sphere instead of the remapped mesh for better quality -// glPushMatrix(); -// glScalef(0.5,1,1); -// glMatrixMode(GL_MODELVIEW); -// mesh_info->CallList(); -// glMatrixMode(GL_TEXTURE); -// glPopMatrix(); - glPushMatrix(); glRotated(180,1,0,0); - glScalef(0.5,1,1); glMatrixMode(GL_MODELVIEW); GLUquadric* grid = gluNewQuadric(); @@ -248,7 +218,6 @@ glMatrixMode(GL_TEXTURE); glPopMatrix(); - glDisable(GL_BLEND); glMatrixMode(GL_MODELVIEW); @@ -287,7 +256,9 @@ glBindTexture(GL_TEXTURE_2D, texture_num); } else + { glBindTexture(GL_TEXTURE_2D, texture_num); + }; GLint texSize; @@ -299,138 +270,66 @@ int hor_lines = 20; int ver_lines = 40; - - double line_width_per = 0.1; + double line_width_per = 0.02; + double dw = width / ver_lines; + double dh = height / hor_lines; + double line_width = (dw < dh) ? line_width_per * dw : line_width_per * dh; unsigned char *image = new unsigned char[width * height * 4]; unsigned char *pix_start = image; - double dw = width / hor_lines; - double dh = height / ver_lines; + int horLineNr=0; + for (int y = 0 ; y < height ; y++) + { + bool onHorLine=false; + if((horLineNr+0.5)*dh-line_width/2.0<y) + { + if(y<=(horLineNr+0.5)*dh+line_width/2.0) + { + onHorLine=true; + } + else + { + horLineNr++; + }; + }; + int verLineNr=0; + for (int x = 0 ; x < width ; x++) + { + bool onVerLine=false; + if((verLineNr+0.5)*dw-line_width/2.0<x) + { + if(x<=(verLineNr+0.5)*dw+line_width/2.0) + { + onVerLine=true; + } + else + { + verLineNr++; + }; + }; - std::vector<double> hor_s(hor_lines*2); - std::vector<double> ver_s(ver_lines*2); - - double line_width = (dw < dh) ? line_width_per * dw : line_width_per * dh; - - //determine the exact position of the begining and the end of horizontal line - for (int i = 0 ; i < hor_lines ; i++) { - hor_s[2*i ] = (i + 0.5) * dw - line_width / 2.0; - hor_s[2*i + 1] = (i + 0.5) * dw + line_width / 2.0; - } - - //determine the exact position of the begining and the end of horizontal line - ver_s[0] = 0; - for (int i = 0 ; i < ver_lines ; i++) { - ver_s[2*i ] = (i + 0.5) * dh - line_width / 2.0; - ver_s[2*i + 1] = (i + 0.5) * dh + line_width / 2.0; - } - - int w_i = -1; - for (int x = 0 ; x < width ; x++) { - double x_res = 0; - int stw_i = w_i; - //check how many lines this pixel crosses - if(w_i<hor_lines*2-1) - { - while ( - hor_s[w_i + 1] > x && - hor_s[w_i + 1] <= x+1 - ) { - w_i++; - if (w_i == hor_lines * 2 - 1) break; + if(onHorLine || onVerLine) + { + pix_start[0]=0; + pix_start[1]=255; + pix_start[2]=255; + pix_start[3]=255; } - } - //calculate the fill - if (w_i != stw_i) { - if (w_i - stw_i > 1) { - int minus = 0; - if (stw_i + 1 % 2 == 1) { - minus++; - x_res += (hor_s[stw_i] - x); - } - if (w_i % 2 == 0) { - minus++; - x_res += (x+1 - hor_s[w_i]); - } - x_res += (w_i - stw_i - minus) / 2 * line_width; - - } else { - if (w_i % 2 == 0) { - x_res += (x+1 - hor_s[w_i]); - } else { - x_res += (hor_s[w_i] - x); - } + else + { + pix_start[0]=255; + pix_start[1]=255; + pix_start[2]=255; + pix_start[3]=0; } - } else { - if (w_i % 2 == 0) { - x_res = 1; - } - } - - int h_i = -1; - for (int y = 0 ; y < height ; y++) { - - double y_res = 0; - int sth_i = h_i; - if(h_i<ver_lines*2-1) - { - while ( - ver_s[h_i + 1] > y && - ver_s[h_i + 1] <= y+1 - ) { - h_i++; - if (h_i == ver_lines * 2 - 1) break; - } - } - if (h_i != sth_i) { - if (h_i - sth_i > 1) { - int minus = 0; - if (sth_i + 1 % 2 == 1) { - minus++; - y_res += (ver_s[sth_i] - y); - } - if (h_i % 2 == 0) { - minus++; - y_res += (y+1 - ver_s[h_i]); - } - y_res += (h_i - sth_i - minus) / 2 * line_width; - - } else { - if (h_i % 2 == 0) { - y_res += (y+1 - ver_s[h_i]); - } else { - y_res += (ver_s[h_i] - y); - } - } - } else { - if (h_i % 2 == 0) { - y_res = 1; - } - } - - //combine fills from horizontal and vertical lines - double res = x_res + y_res - x_res * y_res; - - double x_rat = (double) x / (double) width; - double y_rat = (double) y / (double) height; - pix_start[0] = 255 - (res * 255.0 * (1 - x_rat)); - pix_start[1] = 255 - (res * 255.0 * (1 - y_rat)); - pix_start[2] = 255 - (res * 255.0 * (x_rat)); -// pix_start[0] = 255 - (res * 255.0 * (y_rat)); -// pix_start[1] = 255 - (res * 255.0 * (y_rat)); -// pix_start[2] = 255 - (res * 255.0 * (y_rat)); - pix_start[3] = 255 * res; pix_start += 4; } } - bool has_error = false; GLint error; - error = gluBuild2DMipmaps/*Levels*/(GL_TEXTURE_2D, GL_RGBA8, width, height, - GL_RGBA, GL_UNSIGNED_BYTE, /*min, min, max,*/ - (unsigned char *) image); + error = gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA8, width, height, GL_RGBA, GL_UNSIGNED_BYTE, (unsigned char *) image); delete [] image; static bool checked_anisotropic = false; static bool has_anisotropic; @@ -478,5 +377,4 @@ texture_created = true; return true; } - } |