X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctgraphics%2Fezplot.cpp;h=4f32d63769a84413c23b69c9d45dc2e283691fc6;hp=cb4e0ece37358d9e6a15a0210936f18f9d787abc;hb=dcc87ab716636e2464e104e6d79d031b2ec6b925;hpb=a2ac3119d9f9572f113b1f32d7be996dd49037ae diff --git a/libctgraphics/ezplot.cpp b/libctgraphics/ezplot.cpp index cb4e0ec..4f32d63 100644 --- a/libctgraphics/ezplot.cpp +++ b/libctgraphics/ezplot.cpp @@ -215,6 +215,10 @@ EZPlot::initPlotSettings () s_xlegend = FALSE; s_ylegend = FALSE; s_textsize = FALSE; + s_xmin = FALSE; + s_xmax = FALSE; + s_ymin = FALSE; + s_ymax = FALSE; clr_axis = C_LTGRAY; // set fixed colors clr_title = C_RED; @@ -479,15 +483,28 @@ EZPlot::plot (SGP* pSGP) double symheight = charheight * 0.3; // size of symbol in NDC double symwidth = symheight; - const EZPlotCurve& firstCurve = *m_vecCurves[0]; + if (m_vecCurves.size() < 1) + return; // can't plot if there are no curves to plot - double xmin = firstCurve.x[0]; // extent of curves in world coord - double xmax = xmin; - double ymin = firstCurve.y[0]; - double ymax = ymin; + // find a curve with at least one point to get base point + double xmin, xmax, ymin, ymax; // extent of curves in world coord + bool found = false; - unsigned int iCurve; - for (iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { + for (unsigned int iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { + const EZPlotCurve* const pCurve = m_vecCurves [iCurve]; + if (pCurve->m_iPointCount > 0) { + xmin = pCurve->x[0]; + xmax = xmin; + ymin = pCurve->y[0]; + ymax = ymin; + found = true; + break; + } + } + if (! found) + return; // curve(s) are empty, so no plotting + + for (unsigned int iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { const EZPlotCurve* const pCurve = m_vecCurves [iCurve]; for (int ip = 0; ip < pCurve->m_iPointCount; ip++) { @@ -521,6 +538,7 @@ EZPlot::plot (SGP* pSGP) if (! axis_scale (xmin, xmax, o_xmajortick - 1, &xgw_min, &xgw_max, &x_nint) || ! axis_scale (ymin, ymax, o_ymajortick - 1, &ygw_min, &ygw_max, &y_nint)) return; + // check if user set x-axis extents if (s_xmin == TRUE) { xgw_min = v_xmin; @@ -597,7 +615,7 @@ EZPlot::plot (SGP* pSGP) int max_leg = 0; // longest legend in characters int num_leg = 0; // number of legend titles - for (iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { + for (unsigned int iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { const std::string* pstrLegend = getLegend (iCurve); if (pstrLegend && pstrLegend->length() > 0) { @@ -638,7 +656,7 @@ EZPlot::plot (SGP* pSGP) int iLegend = 0; // current legend position - for (iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { + for (unsigned int iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { const std::string* pstrLegend = getLegend (iCurve); if (! pstrLegend || pstrLegend->length() == 0) continue; @@ -820,18 +838,13 @@ EZPlot::plot (SGP* pSGP) - for (iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { + for (unsigned int iCurve = 0; iCurve < m_vecCurves.size(); iCurve++) { const EZPlotCurve* const pCurve = m_vecCurves [iCurve]; - m_pSGP->setColor (getColor (iCurve)); - int iSym = getSymbol (iCurve); - int iLS = getLinestyle (iCurve); - - if (iLS != SGP::LS_NOLINE) { m_pSGP->setLineStyle (iLS); double x1 = convertWorldToNDC_X (pCurve->x[0]);