fixed axis ticks mainly used for y-axis.

This commit is contained in:
Martin Preuss
2026-01-04 15:09:10 +01:00
parent a1c610d972
commit 7d139093df

View File

@@ -52,6 +52,92 @@
</content> </content>
</inline> </inline>
<inline loc="code">
<content>
static int _genLog10TicksUp($(struct_type) *st, \n
double vStep, \n
double vBegin, double vEnd, \n
int level, \n
int precision) \n
{ \n
double vRun; \n
GWEN_BUFFER *dbuf; \n
\n
dbuf=GWEN_Buffer_new(0, 256, 0, 1); \n
vRun=vBegin; \n
while(vRun&lt;=vEnd) { \n
if (vRun&gt;=vBegin) { \n
if (!$(struct_prefix)_HasTickValue(st, vRun)) { \n
GWEN_Buffer_AppendArgs(dbuf, "%.*f", precision, vRun); \n
$(struct_prefix)_AddNewTick(st, GWEN_Buffer_GetStart(dbuf), vRun, level, 0, vStep); \n
DBG_INFO(NULL, "Adding tick %d: %s", level, GWEN_Buffer_GetStart(dbuf)); \n
GWEN_Buffer_Reset(dbuf); \n
} \n
} \n
vRun+=vStep; \n
} \n
GWEN_Buffer_free(dbuf); \n
return ($(struct_prefix)_HasAtLeastNLevelTicks(st, level, level?1:4))?1:0; \n
} \n
</content>
</inline>
<inline loc="code">
<content>
static int _genLog10TicksDown($(struct_type) *st, \n
double vStep, \n
double vBegin, double vEnd, \n
int level, \n
int precision) \n
{ \n
double vRun; \n
GWEN_BUFFER *dbuf; \n
\n
dbuf=GWEN_Buffer_new(0, 256, 0, 1); \n
vRun=vBegin; \n
while(vRun&gt;=vEnd) { \n
if (vRun&lt;=vBegin) { \n
if (!$(struct_prefix)_HasTickValue(st, vRun)) { \n
GWEN_Buffer_AppendArgs(dbuf, "%.*f", precision, vRun); \n
$(struct_prefix)_AddNewTick(st, GWEN_Buffer_GetStart(dbuf), vRun, level, 0, vStep); \n
DBG_INFO(NULL, "Adding tick %d: %s", level, GWEN_Buffer_GetStart(dbuf)); \n
GWEN_Buffer_Reset(dbuf); \n
} \n
} \n
vRun-=vStep; \n
} \n
GWEN_Buffer_free(dbuf); \n
return ($(struct_prefix)_HasAtLeastNLevelTicks(st, level, level?1:4))?1:0; \n
} \n
</content>
</inline>
<inline loc="code">
<content>
static int _genLog10Ticks($(struct_type) *st, \n
double vStart, \n
double vStep, \n
double vMin, double vMax, \n
int level, \n
int precision) \n
{ \n
if (vMin&lt;0.0 && vMax&gt;=0.0) { \n
int rv; \n
\n
rv=_genLog10TicksUp(st, vStep, 0.0, vMax, level, precision); \n
rv|=_genLog10TicksDown(st, vStep, 0.0, vMin, level, precision); \n
return rv; \n
} \n
else if (vMin&lt;0.0 && vMax&lt;=0.0) \n
return _genLog10TicksDown(st, vStep, vStart, vMin, level, precision); \n
else \n
return _genLog10TicksUp(st, vStep, vStart, vMax, level, precision); \n
} \n
</content>
</inline>
<inline loc="end" access="public"> <inline loc="end" access="public">
<content> <content>
@@ -65,68 +151,44 @@
{ \n { \n
double absMaxValue; \n double absMaxValue; \n
double v; \n double v; \n
double vRun; \n double vMin; \n
double startValue; \n double vMax; \n
GWEN_BUFFER *dbuf; \n double vStart; \n
int nextLevel=0; \n int nextLevel=0; \n
\n \n
absMaxValue=abs(st-&gt;minValue); \n vMin=st-&gt;minValue; \n
v=abs(st-&gt;maxValue); \n vMax=st-&gt;maxValue; \n
absMaxValue=abs(vMin); \n
v=abs(vMax); \n
absMaxValue=(v&gt;absMaxValue)?v:absMaxValue; \n absMaxValue=(v&gt;absMaxValue)?v:absMaxValue; \n
\n \n
dbuf=GWEN_Buffer_new(0, 64, 0, 1); \n
if (absMaxValue==0.0) \n if (absMaxValue==0.0) \n
absMaxValue=1.0; \n absMaxValue=1.0; \n
v=pow(10, floor(log10(absMaxValue))); \n v=pow(10, floor(log10(absMaxValue))); \n
\n \n
startValue=v; \n vStart=v; \n
if ((st-&gt;minValue)&lt;startValue) \n if (vMin&lt;vStart) \n
startValue=-startValue; \n vStart=-vStart; \n
\n
for(;;) { \n
int rv; \n
\n \n
while(v&gt;=0.0) { \n
DBG_INFO(NULL, "Handling level %d (%.2f)", nextLevel, v); \n DBG_INFO(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
if (nextLevel&gt;=3) \n if (nextLevel&gt;=3) \n
break; \n break; \n
vRun=startValue; \n rv=_genLog10Ticks(st, vStart, v, vMin, vMax, nextLevel, st-&gt;precision); \n
while(vRun&lt;=(st-&gt;maxValue)) { \n if (rv) \n
if (vRun&gt;=(st-&gt;minValue)) { \n nextLevel++; \n
if (!$(struct_prefix)_HasTickValue(st, vRun)) { \n
GWEN_Buffer_AppendArgs(dbuf, "%.*f", st-&gt;precision, vRun); \n
$(struct_prefix)_AddNewTick(st, GWEN_Buffer_GetStart(dbuf), vRun, nextLevel, 0, v); \n
DBG_INFO(NULL, "Adding tick %d: %s", nextLevel, GWEN_Buffer_GetStart(dbuf)); \n
GWEN_Buffer_Reset(dbuf); \n
} \n
} \n
vRun+=v; \n
} \n
v/=2.0; \n v/=2.0; \n
if ($(struct_prefix)_HasAtLeastNLevelTicks(st, nextLevel, nextLevel?1:4)) \n
nextLevel++; \n
else \n
$(struct_prefix)_RemoveLevelTicks(st, nextLevel); \n
\n \n
DBG_INFO(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
if (nextLevel&gt;=3) \n if (nextLevel&gt;=3) \n
break; \n break; \n
vRun=startValue; \n DBG_INFO(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
while(vRun&lt;=(st-&gt;maxValue)) { \n rv=_genLog10Ticks(st, vStart, v, vMin, vMax, nextLevel, st-&gt;precision); \n
if (vRun&gt;=(st-&gt;minValue)) { \n if (rv) \n
if (!$(struct_prefix)_HasTickValue(st, vRun)) { \n
GWEN_Buffer_AppendArgs(dbuf, "%.*f", st-&gt;precision, vRun); \n
$(struct_prefix)_AddNewTick(st, GWEN_Buffer_GetStart(dbuf), vRun, nextLevel, 0, v); \n
DBG_INFO(NULL, "Adding tick %d: %s", nextLevel, GWEN_Buffer_GetStart(dbuf)); \n
GWEN_Buffer_Reset(dbuf); \n
} \n
} \n
vRun+=v; \n
} \n
v/=5.0; \n
if ($(struct_prefix)_HasAtLeastNLevelTicks(st, nextLevel, nextLevel?1:4)) \n
nextLevel++; \n nextLevel++; \n
else \n v/=5.0; \n
$(struct_prefix)_RemoveLevelTicks(st, nextLevel); \n } /* for */ \n
} /* while */ \n
GWEN_Buffer_free(dbuf); \n
} \n } \n
</content> </content>
</inline> </inline>