diff --git a/src/lib/aqdiagram/graph/axis.t2d b/src/lib/aqdiagram/graph/axis.t2d
index 733c376..752ed1e 100644
--- a/src/lib/aqdiagram/graph/axis.t2d
+++ b/src/lib/aqdiagram/graph/axis.t2d
@@ -52,6 +52,92 @@
+
+
+ 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<=vEnd) { \n
+ if (vRun>=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
+
+
+
+
+
+
+ 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>=vEnd) { \n
+ if (vRun<=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
+
+
+
+
+
+
+ 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<0.0 && vMax>=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<0.0 && vMax<=0.0) \n
+ return _genLog10TicksDown(st, vStep, vStart, vMin, level, precision); \n
+ else \n
+ return _genLog10TicksUp(st, vStep, vStart, vMax, level, precision); \n
+ } \n
+
+
+
@@ -65,68 +151,44 @@
{ \n
double absMaxValue; \n
double v; \n
- double vRun; \n
- double startValue; \n
- GWEN_BUFFER *dbuf; \n
+ double vMin; \n
+ double vMax; \n
+ double vStart; \n
int nextLevel=0; \n
\n
- absMaxValue=abs(st->minValue); \n
- v=abs(st->maxValue); \n
+ vMin=st->minValue; \n
+ vMax=st->maxValue; \n
+ absMaxValue=abs(vMin); \n
+ v=abs(vMax); \n
absMaxValue=(v>absMaxValue)?v:absMaxValue; \n
\n
- dbuf=GWEN_Buffer_new(0, 64, 0, 1); \n
if (absMaxValue==0.0) \n
absMaxValue=1.0; \n
v=pow(10, floor(log10(absMaxValue))); \n
\n
- startValue=v; \n
- if ((st->minValue)<startValue) \n
- startValue=-startValue; \n
+ vStart=v; \n
+ if (vMin<vStart) \n
+ vStart=-vStart; \n
+ \n
+ for(;;) { \n
+ int rv; \n
\n
- while(v>=0.0) { \n
DBG_INFO(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
if (nextLevel>=3) \n
break; \n
- vRun=startValue; \n
- while(vRun<=(st->maxValue)) { \n
- if (vRun>=(st->minValue)) { \n
- if (!$(struct_prefix)_HasTickValue(st, vRun)) { \n
- GWEN_Buffer_AppendArgs(dbuf, "%.*f", st->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
+ rv=_genLog10Ticks(st, vStart, v, vMin, vMax, nextLevel, st->precision); \n
+ if (rv) \n
+ nextLevel++; \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
- DBG_INFO(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
if (nextLevel>=3) \n
break; \n
- vRun=startValue; \n
- while(vRun<=(st->maxValue)) { \n
- if (vRun>=(st->minValue)) { \n
- if (!$(struct_prefix)_HasTickValue(st, vRun)) { \n
- GWEN_Buffer_AppendArgs(dbuf, "%.*f", st->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
+ DBG_INFO(NULL, "Handling level %d (%.2f)", nextLevel, v); \n
+ rv=_genLog10Ticks(st, vStart, v, vMin, vMax, nextLevel, st->precision); \n
+ if (rv) \n
+ nextLevel++; \n
v/=5.0; \n
- if ($(struct_prefix)_HasAtLeastNLevelTicks(st, nextLevel, nextLevel?1:4)) \n
- nextLevel++; \n
- else \n
- $(struct_prefix)_RemoveLevelTicks(st, nextLevel); \n
- } /* while */ \n
- GWEN_Buffer_free(dbuf); \n
+ } /* for */ \n
} \n