implemented vertical bars graph.
This commit is contained in:
@@ -40,6 +40,7 @@ static int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, i
|
|||||||
int contentSize, double minValue, double maxValue);
|
int contentSize, double minValue, double maxValue);
|
||||||
static int _screenDistBetweenLevelTicksY(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
static int _screenDistBetweenLevelTicksY(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
||||||
int contentSize, double minValue, double maxValue);
|
int contentSize, double minValue, double maxValue);
|
||||||
|
static int _distToScreenDist(int contentSize, double minValue, double maxValue, double value);
|
||||||
|
|
||||||
static void _drawCurveLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
static void _drawCurveLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
@@ -50,6 +51,9 @@ static void _drawCurvePoints(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_G
|
|||||||
static void _drawCurveStepLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
static void _drawCurveStepLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
int pen);
|
int pen);
|
||||||
|
static void _drawCurveVertBars(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -193,6 +197,8 @@ void _drawCurve(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *c
|
|||||||
_drawCurveStepLines(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
_drawCurveStepLines(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
||||||
break;
|
break;
|
||||||
case AQDG_GRAPH_TYPE_BARS:
|
case AQDG_GRAPH_TYPE_BARS:
|
||||||
|
_drawCurveVertBars(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -327,12 +333,7 @@ void _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
|
|||||||
int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
||||||
int contentSize, double minValue, double maxValue)
|
int contentSize, double minValue, double maxValue)
|
||||||
{
|
{
|
||||||
double v;
|
return _distToScreenDist(contentSize, minValue, maxValue, AQDG_Graph_Tick_List_DistanceBetweenTicks(tickList, lvl));
|
||||||
int pts;
|
|
||||||
|
|
||||||
v=AQDG_Graph_Tick_List_DistanceBetweenTicks(tickList, lvl);
|
|
||||||
pts=(v*(contentSize/(maxValue-minValue)));
|
|
||||||
return pts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -343,20 +344,23 @@ int _screenDistBetweenLevelTicksY(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
|||||||
const AQDG_GRAPH_TICK *firstLevelTick;
|
const AQDG_GRAPH_TICK *firstLevelTick;
|
||||||
|
|
||||||
firstLevelTick=AQDG_Graph_Tick_List_GetFirstTickForLevel(tickList, lvl);
|
firstLevelTick=AQDG_Graph_Tick_List_GetFirstTickForLevel(tickList, lvl);
|
||||||
if (firstLevelTick) {
|
if (firstLevelTick)
|
||||||
double v;
|
return _distToScreenDist(contentSize, minValue, maxValue, AQDG_Graph_Tick_GetLevelDist(firstLevelTick));
|
||||||
int pts;
|
|
||||||
|
|
||||||
v=AQDG_Graph_Tick_GetLevelDist(firstLevelTick);
|
|
||||||
pts=(v*(contentSize/(maxValue-minValue)));
|
|
||||||
DBG_ERROR(NULL, "Level dist %d: %d", lvl, pts);
|
|
||||||
return pts;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int _distToScreenDist(int contentSize, double minValue, double maxValue, double value)
|
||||||
|
{
|
||||||
|
int pts;
|
||||||
|
|
||||||
|
pts=(value*(contentSize/(maxValue-minValue)));
|
||||||
|
return pts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -489,6 +493,70 @@ void _drawCurveStepLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void _drawCurveVertBars(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen)
|
||||||
|
{
|
||||||
|
const AQDG_GRAPH_DATAPAIR_LIST *dpList;
|
||||||
|
const AQDG_GRAPH_DATAPAIR *dp;
|
||||||
|
|
||||||
|
dpList=AQDG_Graph_Curve_GetDataPairs(curve);
|
||||||
|
dp=dpList?AQDG_Graph_DataPair_List_First(dpList):NULL;
|
||||||
|
if (dp) {
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int absX;
|
||||||
|
int absY;
|
||||||
|
double valueMinDist;
|
||||||
|
int barWidth;
|
||||||
|
double baseLineValueY;
|
||||||
|
int baseLinePosY;
|
||||||
|
|
||||||
|
absX=AQDG_Object_GetAbsoluteX(o);
|
||||||
|
absY=AQDG_Object_GetAbsoluteY(o);
|
||||||
|
width=AQDG_Object_GetWidth(o);
|
||||||
|
height=AQDG_Object_GetHeight(o);
|
||||||
|
valueMinDist=AQDG_Graph_DataPair_List_GetMinDiffX(dpList);
|
||||||
|
barWidth=_distToScreenDist(width, minValueX, maxValueX, (valueMinDist*5.0)/6.0);
|
||||||
|
|
||||||
|
if (maxValueY<0.0)
|
||||||
|
baseLineValueY=maxValueY;
|
||||||
|
else if (minValueY>0.0)
|
||||||
|
baseLineValueY=minValueY;
|
||||||
|
else
|
||||||
|
baseLineValueY=0.0;
|
||||||
|
baseLinePosY=_calcVerticalPos(baseLineValueY, height, minValueY, maxValueY);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
DBG_ERROR(NULL,
|
||||||
|
"valueMinDist=%.2f, barWidth=%d, baseLineValueY=%.2f, baseLinePosY=%d",
|
||||||
|
valueMinDist, barWidth, baseLineValueY, baseLinePosY);
|
||||||
|
#endif
|
||||||
|
while(dp) {
|
||||||
|
int xPos;
|
||||||
|
int yPos;
|
||||||
|
int h;
|
||||||
|
double xValue;
|
||||||
|
double yValue;
|
||||||
|
|
||||||
|
xValue=AQDG_Graph_DataPair_GetValueX(dp);
|
||||||
|
yValue=AQDG_Graph_DataPair_GetValueY(dp);
|
||||||
|
|
||||||
|
xPos=_calcHorizontalPos(xValue, width, minValueX, maxValueX)-barWidth/2;
|
||||||
|
yPos=_calcVerticalPos(yValue, height, minValueY, maxValueY);
|
||||||
|
h=baseLinePosY-yPos;
|
||||||
|
if (h<0) {
|
||||||
|
yPos+=h;
|
||||||
|
h=-h;
|
||||||
|
}
|
||||||
|
AQDG_Draw_Context_DrawFilledRect(dc, pen, absX+xPos, absY+yPos, barWidth, h);
|
||||||
|
dp=AQDG_Graph_DataPair_List_Next(dp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user