diff --git a/Projects/CodeBlocks/SleepyHead.depend b/Projects/CodeBlocks/SleepyHead.depend index 42fbc205..b8b9a566 100644 --- a/Projects/CodeBlocks/SleepyHead.depend +++ b/Projects/CodeBlocks/SleepyHead.depend @@ -8300,14 +8300,14 @@ <map> "tinyxml/tinyxml.h" -1307862530 /home/mark/projects/git/sleepyhead/src/graphs/graph.h +1307873151 /home/mark/projects/git/sleepyhead/src/graphs/graph.h <wx/dcgraph.h> <wx/glcanvas.h> <FTGL/ftgl.h> <sleeplib/machine.h> <list> -1307865495 /home/mark/projects/git/sleepyhead/src/version.h +1307873279 /home/mark/projects/git/sleepyhead/src/version.h 1307627540 /home/mark/projects/git/sleepyhead/src/libs/sleeplib/prs1_loader.h "machine.h" @@ -8345,7 +8345,7 @@ "sleeplib/profiles.h" "sleeplib/machine_loader.h" -1307865494 source:/home/mark/projects/git/sleepyhead/src/graphs/graph.cpp +1307873276 source:/home/mark/projects/git/sleepyhead/src/graphs/graph.cpp <wx/settings.h> <wx/dcbuffer.h> <wx/graphics.h> diff --git a/src/graphs/graph.cpp b/src/graphs/graph.cpp index 0e2a9100..04f896e6 100644 --- a/src/graphs/graph.cpp +++ b/src/graphs/graph.cpp @@ -1793,19 +1793,13 @@ void gBarChart::Plot(wxDC & dc, gGraphWindow & w) gLineChart::gLineChart(gPointData *d,const wxColor * col,int dlsize,bool _accelerate,bool _hide_axes,bool _square_plot) :gLayer(d),m_accelerate(_accelerate),m_drawlist_size(dlsize),m_hide_axes(_hide_axes),m_square_plot(_square_plot) { - m_drawlist=new wxPoint [dlsize]; + m_drawlist=new wxRealPoint [dlsize]; color.clear(); color.push_back(*col); - //foobar=new gFooBar(); m_report_empty=false; - //Yaxis=new gYAxis(wxBLACK); - //Yaxis->SetShowMajorLines(true); - //Yaxis->SetShowMinorLines(true); } gLineChart::~gLineChart() { - //delete Yaxis; - //delete foobar; delete [] m_drawlist; } @@ -1824,11 +1818,9 @@ void gLineChart::Plot(wxDC & dc, gGraphWindow & w) int width=scrx-(w.GetLeftMargin()+w.GetRightMargin()); int height=scry-(w.GetTopMargin()+w.GetBottomMargin()); - wxRect bounds(start_px+1,start_py,width-1,height); - double minx=w.min_x, miny=w.min_y, maxx=w.max_x, maxy=w.max_y; double xx=maxx-minx, yy=maxy-miny; - double xmult=width/xx, ymult=height/yy; // time to pixel conversion multiplier + float xmult=width/xx, ymult=height/yy; // time to pixel conversion multiplier // Return on screwy min/max conditions if ((xx<0) || (yy<0)) return; @@ -1837,7 +1829,6 @@ void gLineChart::Plot(wxDC & dc, gGraphWindow & w) int num_points=0; for (int z=0;z<data->VC();z++) num_points+=data->np[z]; // how many points all up? - // Draw bounding box if something else will be drawn. if (!(!m_report_empty && !num_points)) { glColor3f (0.1F, 0.1F, 0.1F); @@ -1848,11 +1839,6 @@ void gLineChart::Plot(wxDC & dc, gGraphWindow & w) glVertex2f (start_px+width,start_py+height); glVertex2f (start_px+width, start_py); glEnd (); -/* dc.SetPen( *wxBLACK_PEN ); - dc.DrawLine(start_px,start_py,start_px,start_py+height); // Left Border - dc.DrawLine(start_px,start_py+height,start_px+width+1,start_py+height); // Bottom Border - dc.DrawLine(start_px+width+1,start_py,start_px+width+1,start_py+height+1); // Right Border */ - // dc.DrawLine(start_px,start_py,start_px+width,start_py); } width--; @@ -1866,23 +1852,26 @@ void gLineChart::Plot(wxDC & dc, gGraphWindow & w) return; } - - // Selected the plot line color - - wxColor & col=color[0]; - glColor4ub(col.Red(),col.Green(),col.Blue(),col.Alpha()); - bool accel=m_accelerate; - double px,py; - //double s1,s2; double sfit,sam,sr; int dp; - //dc.SetClippingRegion(bounds); //start_px+1,start_py,width,height); + wxColor & col=color[0]; + // Selected the plot line color + glColor4ub(col.Red(),col.Green(),col.Blue(),col.Alpha()); - // Now, run through the list of plot segments and draw them + // Crop to inside the margins. + glScissor(w.GetLeftMargin(),w.GetBottomMargin(),width,height); + glEnable(GL_SCISSOR_TEST); + glLineWidth (.25); + //glEnable(GL_LINE_SMOOTH); + //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); + glBegin (GL_LINES); //_LOOP); + + float lastpx,lastpy; + float px,py; for (int n=0;n<data->VC();n++) { dp=0; int & siz=data->np[n]; @@ -1920,19 +1909,11 @@ void gLineChart::Plot(wxDC & dc, gGraphWindow & w) } int minz=width,maxz=0; - // Technically shouldn't never ever get fed reverse data. So I'm disabling this stuff. - // Leaving the code here just in case. - - //bool reverse=false; - //if (point[0].x > point[siz-1].x) reverse=true; - - // Here is a test to make sure for now anyway. + // Technically shouldn't never ever get fed reverse data. assert(point[0].m_x < point[siz-1].m_x); - for (int i=0;i<siz;i+=sam) { //,done==false - - - //if (!reverse) { + bool firstpx=true; + for (int i=0;i<siz;i+=sam) { if (point[i].m_x < minx) continue; // Skip stuff before the start of our data window @@ -1943,21 +1924,26 @@ void gLineChart::Plot(wxDC & dc, gGraphWindow & w) if (point[i].m_x > maxx) done=true; // Let this iteration finish.. (This point will be in far clipping) - /*} else { - if (point[i].x > maxx) continue; - - if (first) { //For the first plot of each segment.. - first=false; - if (i>=sam) i-=sam; // start with the previous sample (which is in the clipping range) - } - if (point[i].x < minx) done=true; - - } */ - px=1+((point[i].m_x - minx) * xmult); // Scale the time scale X to pixel scale X py=1+((point[i].m_y - miny) * ymult); // Same for Y scale - if (accel) { + + if (!accel) { + if (firstpx) { + firstpx=false; + } else { + if (m_square_plot) { + glVertex2f(lastpx,lastpy); + glVertex2f(start_px+px,lastpy); + glVertex2f(start_px+px,lastpy); + } else { + glVertex2f(lastpx,lastpy); + } + glVertex2f(start_px+px,start_py+py); + } + lastpx=start_px+px; + lastpy=start_py+py; + } else { // Just clip ugly in accel mode.. Too darn complicated otherwise if (px<0) { px=0; @@ -1976,149 +1962,23 @@ void gLineChart::Plot(wxDC & dc, gGraphWindow & w) if (py<m_drawlist[z].x) m_drawlist[z].x=py; if (py>m_drawlist[z].y) m_drawlist[z].y=py; - } else { - - // Square plot mode adds the extra points to convert the graph to a square wave. - // Twice as many points are needed to do this. - if (m_square_plot && (dp>0)) { - - m_drawlist[dp].x=start_px+px; // This points X position - m_drawlist[dp].y=m_drawlist[dp-1].y; // But with last points Y position - - if (++dp>=m_drawlist_size) { - wxLogWarning(wxT("gLineChart: m_drawlist is too small")); - done=true; - break; - } - } - - - m_drawlist[dp].x=start_px+px; - m_drawlist[dp].y=start_py+py; - - if (++dp>=m_drawlist_size) { - wxLogWarning(wxT("gLineChart: m_drawlist is too small")); - done=true; - break; - } } + if (done) break; } - - if (accel) { - // dc.DrawLine(1, 1, 1, height); // a little marker for debugging when in accel mode. dp=0; + // Plot compressed accelerated vertex list for (int i=minz;i<maxz;i++) { - int y1=m_drawlist[i].x; // x= Min y pixel in this case. - int y2=m_drawlist[i].y; // y= Max y pixel - - //if (i>width) break; - screen[dp].x=start_px+i+1; - screen[dp].y=start_py+y1; - dp++; - screen[dp].x=start_px+i+1; - screen[dp].y=start_py+y2; - dp++; - //dc.DrawLine(start_px+i, start_py+, start_px+i, start_py+m_drawlist[i].y); + glVertex2f(start_px+i+1,start_py+m_drawlist[i].x); + glVertex2f(start_px+i+1,start_py+m_drawlist[i].y); } - - - //glColor3f (col.Red(), col.Green(), col.Blue()); - glLineWidth (.25); - //glEnable(GL_LINE_SMOOTH); - //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - glBegin (GL_LINES); //_LOOP); - float lx,ly; - bool first=true; - for (int i=0;i<dp;i++) { - wxPoint &p=screen[i]; - float x=p.x; //((scrx/double(width))*p.x); - float y=p.y; //((scry/double(height))*p.y); - if (first) { - first=false; - } else { - glVertex2f (lx, ly); - glVertex2f (x, y); - } - lx=x; - ly=y; - } - glEnd (); - //glDisable(GL_LINE_SMOOTH); - - //if (dp>1) dc.DrawLines(dp,screen); // need at least two points - - } else if (dp>1) { - // Only the first point and last point should be in clipping range. - - if (m_drawlist[0].x<=start_px) { // in clipping range? - // if (!m_square_plot) { - double x1=m_drawlist[0].x - (start_px+1); - double x2=m_drawlist[1].x - (start_px+1); - - double y1=m_drawlist[0].y; - double y2=m_drawlist[1].y; - - y1+=-x1 * ((y2-y1)/(x2-x1)); - m_drawlist[0].y=y1; - m_drawlist[0].x=start_px+1; - //} - } - - int endpx=scrx-w.GetRightMargin(); - if (m_drawlist[dp-1].x > endpx) { - if (!m_square_plot) { - double x1=m_drawlist[dp-2].x; - double x2=m_drawlist[dp-1].x; - - double y1=m_drawlist[dp-2].y; - double y2=m_drawlist[dp-1].y; - - y2-=(x2-endpx) * ((y2-y1)/(x2-x1)); - - m_drawlist[dp-1].y=y2; - } else { - m_drawlist[dp-1].y=m_drawlist[dp-2].y; - m_drawlist[dp-2].x=endpx; - } - m_drawlist[dp-1].x=endpx; - - } - - - - - //glColor4f (0.1F, 0.1F, 0.1F,0.8f); - //glColor3f (col.Red(), col.Green(), col.Blue()); - //glLineWidth (1); - glLineWidth (0.25); - - //glEnable(GL_LINE_SMOOTH); - //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - - glBegin (GL_LINES); //_LOOP); - float lx,ly; - bool first=true; - for (int i=0;i<dp;i++) { - wxPoint &p=m_drawlist[i]; - float x=p.x; //((scrx/double(width))*p.x); - float y=p.y; //((scry/double(height))*p.y); - if (first) { - first=false; - } else { - glVertex2f (lx, ly); - glVertex2f (x, y); - } - lx=x; - ly=y; - } - glEnd (); - //glDisable(GL_LINE_SMOOTH); } } - // dc.DestroyClippingRegion(); + glEnd (); + //glDisable(GL_LINE_SMOOTH); + glDisable(GL_SCISSOR_TEST); } gLineOverlayBar::gLineOverlayBar(gPointData *d,const wxColor * col,wxString _label,LO_Type _lot) diff --git a/src/graphs/graph.h b/src/graphs/graph.h index 5186f291..4371a3df 100644 --- a/src/graphs/graph.h +++ b/src/graphs/graph.h @@ -420,10 +420,9 @@ class gLineChart:public gLayer bool m_accelerate; int m_drawlist_size; bool m_report_empty; - wxPoint *m_drawlist; + wxRealPoint *m_drawlist; bool m_hide_axes; bool m_square_plot; - wxPoint screen[4096]; // max screen pixel width for accelerated plot usage only. //gYAxis * Yaxis; //gFooBar *foobar; diff --git a/src/version.h b/src/version.h index b8c4805f..b01cf36b 100644 --- a/src/version.h +++ b/src/version.h @@ -16,14 +16,14 @@ namespace AutoVersion{ //Standard Version Type static const long MAJOR = 0; static const long MINOR = 7; - static const long BUILD = 5169; - static const long REVISION = 11532; + static const long BUILD = 5187; + static const long REVISION = 11633; //Miscellaneous Version Types - static const long BUILDS_COUNT = 4796; - #define RC_FILEVERSION 0,7,5169,11532 - #define RC_FILEVERSION_STRING "0, 7, 5169, 11532\0" - static const char FULLVERSION_STRING[] = "0.7.5169.11532"; + static const long BUILDS_COUNT = 4845; + #define RC_FILEVERSION 0,7,5187,11633 + #define RC_FILEVERSION_STRING "0, 7, 5187, 11633\0" + static const char FULLVERSION_STRING[] = "0.7.5187.11633"; //These values are to keep track of your versioning state, don't modify them. static const long BUILD_HISTORY = 0;