void CCurve::DrawCurve(QPainter * pPainter, QPoint * pCurvePoint, int iStartPos, int iEndPos, QColor clrCurve,int iCurvSpaceV, int iPenStyle) { int iSaveDC = pPainter->save(); QPen penCurve; penCurve.CreatePen (iPenStyle, 1, clrCurve); //画曲线 pPainter->SelectObject (&penCurve); for(int j = iStartPos; j < iEndPos; j++) { if (j == MAX_SAMPLE_NUM) { break; } if(j > iStartPos) { pPainter->MoveTo(pCurvePoint[j-1].x,pCurvePoint[j-1].y - iCurvSpaceV); pPainter->LineTo(pCurvePoint[j].x,pCurvePoint[j].y - iCurvSpaceV); } } pPainter->restore(iSaveDC); }
void CCurve::DrawSignsOnXLocation(QPainter *pPainter, QRect RectCurve, int iEventType, QPoint PtEvnt) { int iYEvent; iYEvent = RectCurve.bottom-15; int iSaveDC=pPainter->save(); QPen penEvent; penEvent.CreatePen(PS_SOLID,2,RGB(250,0,0)); pPainter->SelectObject(&penEvent); if(0 == iEventType)//开始事件 { pPainter->MoveTo(PtEvnt.x,iYEvent-6); pPainter->LineTo(PtEvnt.x,iYEvent+6); pPainter->MoveTo(PtEvnt.x,iYEvent); pPainter->LineTo(PtEvnt.x+6,iYEvent); } if(1 == iEventType)//反射事件 { pPainter->MoveTo(PtEvnt.x-6,iYEvent+6); pPainter->LineTo(PtEvnt.x-2,iYEvent+6); pPainter->MoveTo(PtEvnt.x-2,iYEvent+6); pPainter->LineTo(PtEvnt.x-2,iYEvent-6); pPainter->MoveTo(PtEvnt.x-2,iYEvent-6); pPainter->LineTo(PtEvnt.x+2,iYEvent-6); pPainter->MoveTo(PtEvnt.x+2,iYEvent-6); pPainter->LineTo(PtEvnt.x+2,iYEvent+6); pPainter->MoveTo(PtEvnt.x+2,iYEvent+6); pPainter->LineTo(PtEvnt.x+6,iYEvent+6); } if(2 == iEventType)//非反射事件 { pPainter->MoveTo(PtEvnt.x-6,iYEvent-3); pPainter->LineTo(PtEvnt.x,iYEvent-3); pPainter->MoveTo(PtEvnt.x,iYEvent-3); pPainter->LineTo(PtEvnt.x,iYEvent+3); pPainter->MoveTo(PtEvnt.x,iYEvent+3); pPainter->LineTo(PtEvnt.x+6,iYEvent+3); } if(3 == iEventType) //结束事件点 { pPainter->MoveTo(PtEvnt.x,iYEvent-6); pPainter->LineTo(PtEvnt.x,iYEvent+6); pPainter->MoveTo(PtEvnt.x,iYEvent); pPainter->LineTo(PtEvnt.x-6,iYEvent); } pPainter->restore(iSaveDC); }
void CCurve::DrawIndictLine(QPainter * pPainter, int iFix, QRect rectDraw, QColor clrLine, int iPenStyle, bool bHori) { int iSaveDC = pPainter->save(); QPen penLine; penLine.CreatePen (iPenStyle, 1, clrLine); pPainter->SelectObject(&penLine); if (bHori) { //横线 pPainter->MoveTo( rectDraw.left, iFix ); pPainter->LineTo( rectDraw.right, iFix ); } else { //竖线 pPainter->MoveTo(iFix, rectDraw.bottom); pPainter->LineTo(iFix, rectDraw.top); } pPainter->restore(iSaveDC); }
void CCurve::DrawGridLine(QPainter *pPainter, QRect RectCurve,int iGridNumOnX, int iGridNumOnY,QColor clrLine) { int nSaveDC=pPainter->save(); QPen penGridLine; penGridLine.CreatePen (PS_DOT/*点*/,1,clrLine); int ndx = RectCurve.Width ()/iGridNumOnX; int ndy = RectCurve.Height ()/iGridNumOnY; pPainter->SelectObject (&penGridLine); for ( int i = 1; i< iGridNumOnX; i++) { pPainter->MoveTo (RectCurve.left + ndx * i,RectCurve.bottom ); pPainter->LineTo (RectCurve.left + ndx * i,RectCurve.top ); } for (int i = 1; i < iGridNumOnY; i++) { pPainter->MoveTo (RectCurve.left , RectCurve.bottom - ndy * i); pPainter->LineTo (RectCurve.right, RectCurve.bottom - ndy * i); } //恢复 pPainter->restore(nSaveDC); }
void CCurve::DrawABLine(QPainter * pPainter, QPoint ptA, QPoint ptB, QRect rectDraw, int iLineHeight, QString strInforA, QString strInforB, QColor clrLine, int iPenStyle, bool bASel) { int iSaveDC = pPainter->save(); QPen penLine; penLine.CreatePen (iPenStyle, 2, clrLine); pPainter->SelectObject(&penLine); //指示线 pPainter->MoveTo(ptA.x, rectDraw.top + 20); pPainter->LineTo(ptA.x, rectDraw.bottom); pPainter->MoveTo(ptB.x, rectDraw.top + 40); pPainter->LineTo(ptB.x, rectDraw.bottom); //画AB标杆的指示距离 QRect rtA,rtB; //当A,B线超过中线时,向右时距离矩形框在左边,否则在右边 if(ptA.x < rectDraw.right/2) { rtA.left = ptA.x; rtA.top = rectDraw.top; rtA.right = ptA.x+70; rtA.bottom = rectDraw.top + 14; } else { rtA.left = ptA.x - 70; rtA.top = rectDraw.top; rtA.right = ptA.x; rtA.bottom = rectDraw.top + 14; } if(ptB.x< rectDraw.right/2) { rtB.left = ptB.x; rtB.top = rectDraw.top+20; rtB.right = ptB.x + 70; rtB.bottom = rectDraw.top + 34; } else { rtB.left = ptB.x-70; rtB.top = rectDraw.top + 20; rtB.right = ptB.x; rtB.bottom = rectDraw.top + 34; } //选中的标杆显示信息的背景颜色置成深蓝色 if( bASel ) { pPainter->SetTextColor (RGB(0,0,0)); pPainter->ExtTextOut(rtB.left + 2, rectDraw.top + 20, ETO_CLIPPED, rtB, strInforB, NULL); pPainter->SetTextColor (RGB(255,255,255)); pPainter->SetBkColor(RGB(0,0,255)); pPainter->ExtTextOut(rtA.left + 2, rectDraw.top, ETO_CLIPPED, rtA,strInforA, NULL); } else { pPainter->SetTextColor (RGB(0,0,0)); pPainter->ExtTextOut(rtA.left + 2, rectDraw.top, ETO_CLIPPED, rtA, strInforA, NULL); pPainter->SetTextColor (RGB(255,255,255)); pPainter->SetBkColor(RGB(0,0,255)); pPainter->ExtTextOut(rtB.left + 2, rectDraw.top + 20, ETO_CLIPPED, rtB, strInforB, NULL); } pPainter->restore(iSaveDC); }