implement AQDG_GRAPH_TYPE_STEPLINE
This commit is contained in:
@@ -34,12 +34,6 @@ static void _drawCurves(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc);
|
|||||||
static void _drawCurve(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
static void _drawCurve(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 _drawCurveLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
|
||||||
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
|
||||||
int pen);
|
|
||||||
static void _drawCurvePoints(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
|
||||||
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
|
||||||
int pen);
|
|
||||||
static void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc);
|
static void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc);
|
||||||
static void _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc);
|
static void _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc);
|
||||||
static int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
static int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
||||||
@@ -47,6 +41,16 @@ static int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, i
|
|||||||
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 void _drawCurveLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen);
|
||||||
|
static void _drawCurvePoints(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen);
|
||||||
|
static void _drawCurveStepLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------
|
||||||
@@ -185,6 +189,9 @@ void _drawCurve(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *c
|
|||||||
case AQDG_GRAPH_TYPE_POINTS:
|
case AQDG_GRAPH_TYPE_POINTS:
|
||||||
_drawCurvePoints(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
_drawCurvePoints(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
||||||
break;
|
break;
|
||||||
|
case AQDG_GRAPH_TYPE_STEPLINE:
|
||||||
|
_drawCurveStepLines(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
||||||
|
break;
|
||||||
case AQDG_GRAPH_TYPE_BARS:
|
case AQDG_GRAPH_TYPE_BARS:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -193,87 +200,6 @@ void _drawCurve(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *c
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void _drawCurveLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
|
||||||
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
|
||||||
int pen)
|
|
||||||
{
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
const AQDG_GRAPH_DATAPAIR_LIST *dpList;
|
|
||||||
const AQDG_GRAPH_DATAPAIR *dp;
|
|
||||||
int absX;
|
|
||||||
int absY;
|
|
||||||
int lastX=-1;
|
|
||||||
int lastY=-1;
|
|
||||||
|
|
||||||
absX=AQDG_Object_GetAbsoluteX(o);
|
|
||||||
absY=AQDG_Object_GetAbsoluteY(o);
|
|
||||||
width=AQDG_Object_GetWidth(o);
|
|
||||||
height=AQDG_Object_GetHeight(o);
|
|
||||||
dpList=AQDG_Graph_Curve_GetDataPairs(curve);
|
|
||||||
dp=dpList?AQDG_Graph_DataPair_List_First(dpList):NULL;
|
|
||||||
while(dp) {
|
|
||||||
int xPos;
|
|
||||||
int yPos;
|
|
||||||
double xValue;
|
|
||||||
double yValue;
|
|
||||||
|
|
||||||
xValue=AQDG_Graph_DataPair_GetValueX(dp);
|
|
||||||
yValue=AQDG_Graph_DataPair_GetValueY(dp);
|
|
||||||
|
|
||||||
xPos=_calcHorizontalPos(xValue, width, minValueX, maxValueX);
|
|
||||||
yPos=_calcVerticalPos(yValue, height, minValueY, maxValueY);
|
|
||||||
if (lastX>=0 && lastY>=0)
|
|
||||||
AQDG_Draw_Context_DrawLine(dc, pen, absX+lastX, absY+lastY, absX+xPos, absY+yPos);
|
|
||||||
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-2, absY+yPos-2, absX+xPos+2, absY+yPos+2);
|
|
||||||
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-2, absY+yPos+2, absX+xPos+2, absY+yPos-2);
|
|
||||||
lastX=xPos;
|
|
||||||
lastY=yPos;
|
|
||||||
dp=AQDG_Graph_DataPair_List_Next(dp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void _drawCurvePoints(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
|
||||||
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
|
||||||
int pen)
|
|
||||||
{
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
const AQDG_GRAPH_DATAPAIR_LIST *dpList;
|
|
||||||
const AQDG_GRAPH_DATAPAIR *dp;
|
|
||||||
int absX;
|
|
||||||
int absY;
|
|
||||||
|
|
||||||
absX=AQDG_Object_GetAbsoluteX(o);
|
|
||||||
absY=AQDG_Object_GetAbsoluteY(o);
|
|
||||||
width=AQDG_Object_GetWidth(o);
|
|
||||||
height=AQDG_Object_GetHeight(o);
|
|
||||||
dpList=AQDG_Graph_Curve_GetDataPairs(curve);
|
|
||||||
dp=dpList?AQDG_Graph_DataPair_List_First(dpList):NULL;
|
|
||||||
while(dp) {
|
|
||||||
int xPos;
|
|
||||||
int yPos;
|
|
||||||
double xValue;
|
|
||||||
double yValue;
|
|
||||||
|
|
||||||
xValue=AQDG_Graph_DataPair_GetValueX(dp);
|
|
||||||
yValue=AQDG_Graph_DataPair_GetValueY(dp);
|
|
||||||
|
|
||||||
xPos=_calcHorizontalPos(xValue, width, minValueX, maxValueX);
|
|
||||||
yPos=_calcVerticalPos(yValue, height, minValueY, maxValueY);
|
|
||||||
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-4, absY+yPos-4, absX+xPos+4, absY+yPos+4);
|
|
||||||
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-4, absY+yPos+4, absX+xPos+4, absY+yPos-4);
|
|
||||||
dp=AQDG_Graph_DataPair_List_Next(dp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
|
void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc)
|
||||||
{
|
{
|
||||||
AQDG_WIDGET_VIEWPORT *xo;
|
AQDG_WIDGET_VIEWPORT *xo;
|
||||||
@@ -418,3 +344,138 @@ int _screenDistBetweenLevelTicksY(const AQDG_GRAPH_TICK_LIST *tickList, int lvl,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------------------------------
|
||||||
|
* graph drawing
|
||||||
|
* ------------------------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void _drawCurveLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen)
|
||||||
|
{
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
const AQDG_GRAPH_DATAPAIR_LIST *dpList;
|
||||||
|
const AQDG_GRAPH_DATAPAIR *dp;
|
||||||
|
int absX;
|
||||||
|
int absY;
|
||||||
|
int lastX=-1;
|
||||||
|
int lastY=-1;
|
||||||
|
|
||||||
|
absX=AQDG_Object_GetAbsoluteX(o);
|
||||||
|
absY=AQDG_Object_GetAbsoluteY(o);
|
||||||
|
width=AQDG_Object_GetWidth(o);
|
||||||
|
height=AQDG_Object_GetHeight(o);
|
||||||
|
dpList=AQDG_Graph_Curve_GetDataPairs(curve);
|
||||||
|
dp=dpList?AQDG_Graph_DataPair_List_First(dpList):NULL;
|
||||||
|
while(dp) {
|
||||||
|
int xPos;
|
||||||
|
int yPos;
|
||||||
|
double xValue;
|
||||||
|
double yValue;
|
||||||
|
|
||||||
|
xValue=AQDG_Graph_DataPair_GetValueX(dp);
|
||||||
|
yValue=AQDG_Graph_DataPair_GetValueY(dp);
|
||||||
|
|
||||||
|
xPos=_calcHorizontalPos(xValue, width, minValueX, maxValueX);
|
||||||
|
yPos=_calcVerticalPos(yValue, height, minValueY, maxValueY);
|
||||||
|
if (lastX>=0 && lastY>=0)
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+lastX, absY+lastY, absX+xPos, absY+yPos);
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-2, absY+yPos-2, absX+xPos+2, absY+yPos+2);
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-2, absY+yPos+2, absX+xPos+2, absY+yPos-2);
|
||||||
|
lastX=xPos;
|
||||||
|
lastY=yPos;
|
||||||
|
dp=AQDG_Graph_DataPair_List_Next(dp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void _drawCurvePoints(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen)
|
||||||
|
{
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
const AQDG_GRAPH_DATAPAIR_LIST *dpList;
|
||||||
|
const AQDG_GRAPH_DATAPAIR *dp;
|
||||||
|
int absX;
|
||||||
|
int absY;
|
||||||
|
|
||||||
|
absX=AQDG_Object_GetAbsoluteX(o);
|
||||||
|
absY=AQDG_Object_GetAbsoluteY(o);
|
||||||
|
width=AQDG_Object_GetWidth(o);
|
||||||
|
height=AQDG_Object_GetHeight(o);
|
||||||
|
dpList=AQDG_Graph_Curve_GetDataPairs(curve);
|
||||||
|
dp=dpList?AQDG_Graph_DataPair_List_First(dpList):NULL;
|
||||||
|
while(dp) {
|
||||||
|
int xPos;
|
||||||
|
int yPos;
|
||||||
|
double xValue;
|
||||||
|
double yValue;
|
||||||
|
|
||||||
|
xValue=AQDG_Graph_DataPair_GetValueX(dp);
|
||||||
|
yValue=AQDG_Graph_DataPair_GetValueY(dp);
|
||||||
|
|
||||||
|
xPos=_calcHorizontalPos(xValue, width, minValueX, maxValueX);
|
||||||
|
yPos=_calcVerticalPos(yValue, height, minValueY, maxValueY);
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-4, absY+yPos-4, absX+xPos+4, absY+yPos+4);
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-4, absY+yPos+4, absX+xPos+4, absY+yPos-4);
|
||||||
|
dp=AQDG_Graph_DataPair_List_Next(dp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void _drawCurveStepLines(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *curve,
|
||||||
|
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||||
|
int pen)
|
||||||
|
{
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
const AQDG_GRAPH_DATAPAIR_LIST *dpList;
|
||||||
|
const AQDG_GRAPH_DATAPAIR *dp;
|
||||||
|
int absX;
|
||||||
|
int absY;
|
||||||
|
int lastX=-1;
|
||||||
|
int lastY=-1;
|
||||||
|
|
||||||
|
absX=AQDG_Object_GetAbsoluteX(o);
|
||||||
|
absY=AQDG_Object_GetAbsoluteY(o);
|
||||||
|
width=AQDG_Object_GetWidth(o);
|
||||||
|
height=AQDG_Object_GetHeight(o);
|
||||||
|
dpList=AQDG_Graph_Curve_GetDataPairs(curve);
|
||||||
|
dp=dpList?AQDG_Graph_DataPair_List_First(dpList):NULL;
|
||||||
|
while(dp) {
|
||||||
|
int xPos;
|
||||||
|
int yPos;
|
||||||
|
double xValue;
|
||||||
|
double yValue;
|
||||||
|
|
||||||
|
xValue=AQDG_Graph_DataPair_GetValueX(dp);
|
||||||
|
yValue=AQDG_Graph_DataPair_GetValueY(dp);
|
||||||
|
|
||||||
|
xPos=_calcHorizontalPos(xValue, width, minValueX, maxValueX);
|
||||||
|
yPos=_calcVerticalPos(yValue, height, minValueY, maxValueY);
|
||||||
|
if (lastX>=0 && lastY>=0) {
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+lastX, absY+lastY, absX+xPos, absY+lastY);
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos, absY+lastY, absX+xPos, absY+yPos);
|
||||||
|
}
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-2, absY+yPos-2, absX+xPos+2, absY+yPos+2);
|
||||||
|
AQDG_Draw_Context_DrawLine(dc, pen, absX+xPos-2, absY+yPos+2, absX+xPos+2, absY+yPos-2);
|
||||||
|
lastX=xPos;
|
||||||
|
lastY=yPos;
|
||||||
|
dp=AQDG_Graph_DataPair_List_Next(dp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user