use correct min/max values from axis instead of subgraph.

subgraph contains the max/min values of the datasets while axis stores
the visible max/min values (i.e. spanned by labeled tick axis).
This commit is contained in:
Martin Preuss
2025-10-01 23:10:41 +02:00
parent 8ba319e923
commit c4c23ccfd2

View File

@@ -18,6 +18,11 @@
#define AQDG_WIDGET_VIEWPORT_TICK_MIN_X 10
#define AQDG_WIDGET_VIEWPORT_TICK_MIN_Y 20
/* ------------------------------------------------------------------------------------------------
* forward declarations
* ------------------------------------------------------------------------------------------------
@@ -127,13 +132,14 @@ void _drawCurves(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
const AQDG_GRAPH_SUBGRAPH *subGraph;
int penIdx=AQDG_GRAPHWIDGET_PEN_IDX_CURVE0;
DBG_ERROR(NULL, "Draw curves");
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_VIEWPORT, o);
graph=AQDG_GraphWidget_GetGraph(xo->graphObject);
subGraphList=AQDG_Graph_GetSubGraphList(graph);
subGraph=subGraphList?AQDG_Graph_SubGraph_List_First(subGraphList):NULL;
while (subGraph) {
const AQDG_GRAPH_AXIS *xAxis;
const AQDG_GRAPH_AXIS *yAxis;
double minValueX;
double maxValueX;
double minValueY;
@@ -141,10 +147,12 @@ void _drawCurves(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
const AQDG_GRAPH_CURVE_LIST *curveList;
const AQDG_GRAPH_CURVE *curve;
minValueX=AQDG_Graph_SubGraph_GetMinValueX(subGraph);
maxValueX=AQDG_Graph_SubGraph_GetMaxValueX(subGraph);
minValueY=AQDG_Graph_SubGraph_GetMinValueY(subGraph);
maxValueY=AQDG_Graph_SubGraph_GetMaxValueY(subGraph);
xAxis=AQDG_Graph_GetAxisByIndex(graph, AQDG_Graph_SubGraph_GetIndexAxisX(subGraph));
yAxis=AQDG_Graph_GetAxisByIndex(graph, AQDG_Graph_SubGraph_GetIndexAxisY(subGraph));
minValueX=AQDG_Graph_Axis_GetMinValue(xAxis);
maxValueX=AQDG_Graph_Axis_GetMaxValue(xAxis);
minValueY=AQDG_Graph_Axis_GetMinValue(yAxis);
maxValueY=AQDG_Graph_Axis_GetMaxValue(yAxis);
curveList=AQDG_Graph_SubGraph_GetCurves(subGraph);
curve=curveList?AQDG_Graph_Curve_List_First(curveList):NULL;
@@ -170,7 +178,6 @@ void _drawCurve(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *c
double minValueX, double maxValueX, double minValueY, double maxValueY,
int pen)
{
DBG_ERROR(NULL, "Draw curve");
switch(AQDG_Graph_Curve_GetGraphType(curve)) {
case AQDG_GRAPH_TYPE_LINE:
_drawCurveLines(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
@@ -302,7 +309,7 @@ void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
maxValue=AQDG_Graph_Axis_GetMaxValue(axis);
pen1=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID1);
pen2=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID2);
showLevel1=(_screenDistBetweenLevelTicksX(tickList, 1, contentSize, minValue, maxValue)>15)?1:0;
showLevel1=(_screenDistBetweenLevelTicksX(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_X)?1:0;
tick=AQDG_Graph_Tick_List_First(tickList);
while(tick) {
@@ -361,7 +368,7 @@ void _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
maxValue=AQDG_Graph_Axis_GetMaxValue(axis);
pen1=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID1);
pen2=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID2);
showLevel1=(_screenDistBetweenLevelTicksY(tickList, 1, contentSize, minValue, maxValue)>15)?1:0;
showLevel1=(_screenDistBetweenLevelTicksY(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_Y)?1:0;
tick=AQDG_Graph_Tick_List_First(tickList);
while(tick) {
@@ -392,9 +399,7 @@ int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
int pts;
v=AQDG_Graph_Tick_List_DistanceBetweenTicks(tickList, lvl);
DBG_ERROR(NULL, "Value diff: %.2f", v);
pts=(v*(contentSize/(maxValue-minValue)));
DBG_ERROR(NULL, "Point diff: %d", pts);
return pts;
}
@@ -407,9 +412,7 @@ int _screenDistBetweenLevelTicksY(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
int pts;
v=AQDG_Graph_Tick_List_DistanceBetweenTicks(tickList, lvl);
DBG_ERROR(NULL, "Value diff: %.2f", v);
pts=(v*(contentSize/(maxValue-minValue)));
DBG_ERROR(NULL, "Point diff: %d", pts);
return pts;
}