further improved y-axis tick generation.

now makes sure the Y axis has at least 4 labeled ticks in level 0.
This commit is contained in:
Martin Preuss
2025-10-22 23:47:40 +02:00
parent a5c611b140
commit 976d850c9d
3 changed files with 18 additions and 12 deletions

View File

@@ -85,7 +85,7 @@
\n \n
while(v>=0.0) { \n while(v>=0.0) { \n
DBG_ERROR(NULL, "Handling level %d (%.2f)", nextLevel, v); \n DBG_ERROR(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
if (nextLevel>=2) \n if (nextLevel>=3) \n
break; \n break; \n
vRun=startValue; \n vRun=startValue; \n
while(vRun<=(st->maxValue)) { \n while(vRun<=(st->maxValue)) { \n
@@ -100,13 +100,13 @@
vRun+=v; \n vRun+=v; \n
} \n } \n
v/=2.0; \n v/=2.0; \n
if ($(struct_prefix)_HasAtLeastNLevelTicks(st, nextLevel, nextLevel?1:2)) \n if ($(struct_prefix)_HasAtLeastNLevelTicks(st, nextLevel, nextLevel?1:4)) \n
nextLevel++; \n nextLevel++; \n
else \n else \n
$(struct_prefix)_RemoveLevelTicks(st, nextLevel); \n $(struct_prefix)_RemoveLevelTicks(st, nextLevel); \n
\n \n
DBG_ERROR(NULL, "Handling level %d (%.2f)", nextLevel, v); \n DBG_ERROR(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
if (nextLevel>=2) \n if (nextLevel>=3) \n
break; \n break; \n
vRun=startValue; \n vRun=startValue; \n
while(vRun<=(st->maxValue)) { \n while(vRun<=(st->maxValue)) { \n
@@ -121,7 +121,7 @@
vRun+=v; \n vRun+=v; \n
} \n } \n
v/=5.0; \n v/=5.0; \n
if ($(struct_prefix)_HasAtLeastNLevelTicks(st, nextLevel, nextLevel?1:2)) \n if ($(struct_prefix)_HasAtLeastNLevelTicks(st, nextLevel, nextLevel?1:4)) \n
nextLevel++; \n nextLevel++; \n
else \n else \n
$(struct_prefix)_RemoveLevelTicks(st, nextLevel); \n $(struct_prefix)_RemoveLevelTicks(st, nextLevel); \n

View File

@@ -285,6 +285,7 @@ void _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
int x1; int x1;
int x2; int x2;
int showLevel1; int showLevel1;
int showLevel2;
x1=AQDG_Object_GetAbsoluteX(o)+AQDG_Object_GetBorderLeft(o); x1=AQDG_Object_GetAbsoluteX(o)+AQDG_Object_GetBorderLeft(o);
x2=AQDG_Object_GetAbsoluteX(o)+AQDG_Object_GetWidth(o)-AQDG_Object_GetBorderLeft(o)-AQDG_Object_GetBorderRight(o); x2=AQDG_Object_GetAbsoluteX(o)+AQDG_Object_GetWidth(o)-AQDG_Object_GetBorderLeft(o)-AQDG_Object_GetBorderRight(o);
@@ -295,19 +296,21 @@ void _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
pen1=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID1); pen1=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID1);
pen2=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID2); pen2=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID2);
showLevel1=(_screenDistBetweenLevelTicksY(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_Y)?1:0; showLevel1=(_screenDistBetweenLevelTicksY(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_Y)?1:0;
showLevel2=(_screenDistBetweenLevelTicksY(tickList, 2, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_Y)?1:0;
tick=AQDG_Graph_Tick_List_First(tickList); tick=AQDG_Graph_Tick_List_First(tickList);
while(tick) { while(tick) {
double value; double value;
int ypos; int ypos;
int tickLevel;
value=AQDG_Graph_Tick_GetValue(tick); value=AQDG_Graph_Tick_GetValue(tick);
ypos=_calcVerticalPos(value, contentSize, minValue, maxValue); ypos=_calcVerticalPos(value, contentSize, minValue, maxValue);
ypos+=AQDG_Object_GetBorderTop(o); ypos+=AQDG_Object_GetBorderTop(o);
if (AQDG_Graph_Tick_GetLevel(tick)==0) tickLevel=AQDG_Graph_Tick_GetLevel(tick);
if (tickLevel==0)
AQDG_Draw_Context_DrawLine(dc, pen1, x1, absY+ypos, x2, absY+ypos); AQDG_Draw_Context_DrawLine(dc, pen1, x1, absY+ypos, x2, absY+ypos);
else { else if ((tickLevel==1 && showLevel1) || ((tickLevel==2 && showLevel2))) {
if (showLevel1)
AQDG_Draw_Context_DrawLine(dc, pen2, x1, absY+ypos, x2, absY+ypos); AQDG_Draw_Context_DrawLine(dc, pen2, x1, absY+ypos, x2, absY+ypos);
} }
tick=AQDG_Graph_Tick_List_Next(tick); tick=AQDG_Graph_Tick_List_Next(tick);

View File

@@ -160,6 +160,7 @@ void _drawTicks(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, int absX)
int absY; int absY;
int pen; int pen;
int showLevel1; int showLevel1;
int showLevel2;
contentSize=AQDG_Object_GetHeight(o)-AQDG_Object_GetBorderTop(o)-AQDG_Object_GetBorderBottom(o); contentSize=AQDG_Object_GetHeight(o)-AQDG_Object_GetBorderTop(o)-AQDG_Object_GetBorderBottom(o);
scaleSize=AQDG_AxisWidget_GetScaleSize(o); scaleSize=AQDG_AxisWidget_GetScaleSize(o);
@@ -168,19 +169,21 @@ void _drawTicks(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, int absX)
maxValue=AQDG_AxisWidget_GetMaxValue(o); maxValue=AQDG_AxisWidget_GetMaxValue(o);
pen=AQDG_DrawableWidget_GetForegroundPenId(o); pen=AQDG_DrawableWidget_GetForegroundPenId(o);
showLevel1=(_screenDistBetweenLevelTicks(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_YAXIS_TICK_MIN_Y)?1:0; showLevel1=(_screenDistBetweenLevelTicks(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_YAXIS_TICK_MIN_Y)?1:0;
showLevel2=(_screenDistBetweenLevelTicks(tickList, 2, contentSize, minValue, maxValue)>AQDG_WIDGET_YAXIS_TICK_MIN_Y)?1:0;
tick=AQDG_Graph_Tick_List_First(tickList); tick=AQDG_Graph_Tick_List_First(tickList);
while(tick) { while(tick) {
double value; double value;
int ypos; int ypos;
int tickLevel;
value=AQDG_Graph_Tick_GetValue(tick); value=AQDG_Graph_Tick_GetValue(tick);
ypos=_calcVerticalPos(value, contentSize, minValue, maxValue); ypos=_calcVerticalPos(value, contentSize, minValue, maxValue);
ypos+=AQDG_Object_GetBorderTop(o); ypos+=AQDG_Object_GetBorderTop(o);
if (AQDG_Graph_Tick_GetLevel(tick)==0) tickLevel=AQDG_Graph_Tick_GetLevel(tick);
if (tickLevel==0)
AQDG_Draw_Context_DrawLine(dc, pen, absX-(scaleSize/2), absY+ypos, absX+(scaleSize/2), absY+ypos); AQDG_Draw_Context_DrawLine(dc, pen, absX-(scaleSize/2), absY+ypos, absX+(scaleSize/2), absY+ypos);
else { else if ((tickLevel==1 && showLevel1) || ((tickLevel==2 && showLevel2))) {
if (showLevel1)
AQDG_Draw_Context_DrawLine(dc, pen, absX-(scaleSize/4), absY+ypos, absX+(scaleSize/4), absY+ypos); AQDG_Draw_Context_DrawLine(dc, pen, absX-(scaleSize/4), absY+ypos, absX+(scaleSize/4), absY+ypos);
} }
tick=AQDG_Graph_Tick_List_Next(tick); tick=AQDG_Graph_Tick_List_Next(tick);