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,
|
||||
double minValueX, double maxValueX, double minValueY, double maxValueY,
|
||||
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 _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc);
|
||||
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,
|
||||
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:
|
||||
_drawCurvePoints(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
||||
break;
|
||||
case AQDG_GRAPH_TYPE_STEPLINE:
|
||||
_drawCurveStepLines(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen);
|
||||
break;
|
||||
case AQDG_GRAPH_TYPE_BARS:
|
||||
default:
|
||||
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)
|
||||
{
|
||||
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