void CPlotter::Idle(unsigned int /* idletime */) { if (!CStepper::GetInstance()->IsBusy() && (millis() - CStepper::GetInstance()->IdleTime()) > CHPGLParser::_state._penUpTimeOut) { if (_isPenDown) { PenUp(); _isPenDownTimeout = true; } } }
void CPlotter::DelayPenNow() { if (_isDelayPen) { _isDelayPen = false; if (_isDelayPenDown) PenDown(); else PenUp(); } }
//------------------------------------------------------------------------------ // void AddData(double x, double y) //------------------------------------------------------------------------------ void TsPlotCurve::AddData(double x, double y, double high, double low) { #ifdef DEBUG_PENUP_PENDOWN static Integer counter = 0; if (abscissa.size() == 0) counter = 0; if (abscissa.size() == 80 && counter == 0) { counter = 1; MessageInterface::ShowMessage("Pen up\n"); PenUp(); } if (counter == 1) { ++counter; MessageInterface::ShowMessage("Pen down\n"); PenDown(); } #endif if (penIsDown) { // Include error bars in top and bottom values Real yt = y + high, yb = y - (low == 0.0 ? high : low); if (abscissa.size() == 0) { #ifdef DEBUG_FIRST_POINT MessageInterface::ShowMessage("Adding initial data: [%lf, %lf]", x, y); if (errorDataPresent) MessageInterface::ShowMessage(" with error bars: [%le, %le]\n", high, low); MessageInterface::ShowMessage("\n"); #endif minX = maxX = x; maxY = yt; minY = yb; rangeChanged = true; domainChanged = true; } abscissa.push_back(x); ordinate.push_back(y); if (high > 0.0) { highError.push_back(high); if (low > 0.0) lowError.push_back(low); } if (x < minX) { minX = x; domainChanged = true; } if (x > maxX) { maxX = x; domainChanged = true; } if (yb < minY) { minY = yb; rangeChanged = true; } if (yt > maxY) { maxY = yt; rangeChanged = true; } #if DEBUG_XY_PLOT_CURVE_ADD MessageInterface::ShowMessage ("TsPlotCurve::AddData() size = %d, x = %lf, y = %lf\n", abscissa.size(), abscissa.back(), ordinate.back()); #endif } }
TreeNode* Parser::Statement() { kdDebug(0)<<"Parser::Statement()"<<endl; while (currentToken.type == tokEOL) getToken(); // statements can allways start on newlines switch (currentToken.type) { case tokLearn : return Learn(); break; case tokIf : return If(); break; case tokFor : return For(); break; case tokForEach : return ForEach(); break; case tokWhile : return While(); break; case tokRun : return ExternalRun(); break; case tokReturn : return Return(); break; case tokBreak : return Break(); break; case tokUnknown : return Other(); break; //assignment or function call case tokClear : return Clear(); break; case tokGo : return Go(); break; case tokGoX : return GoX(); break; case tokGoY : return GoY(); break; case tokForward : return Forward(); break; case tokBackward : return Backward(); break; case tokDirection : return Direction(); break; case tokTurnLeft : return TurnLeft(); break; case tokTurnRight : return TurnRight(); break; case tokCenter : return Center(); break; case tokSetPenWidth : return SetPenWidth(); break; case tokPenUp : return PenUp(); break; case tokPenDown : return PenDown(); break; case tokSetFgColor : return SetFgColor(); break; case tokSetBgColor : return SetBgColor(); break; case tokResizeCanvas : return ResizeCanvas(); break; case tokSpriteShow : return SpriteShow(); break; case tokSpriteHide : return SpriteHide(); break; case tokSpritePress : return SpritePress(); break; case tokSpriteChange : return SpriteChange(); break; case tokPrint : return Print(); break; case tokInputWindow : return InputWindow(); break; case tokMessage : return Message(); break; case tokFontType : return FontType(); break; case tokFontSize : return FontSize(); break; case tokRepeat : return Repeat(); break; case tokRandom : return Random(); break; case tokWait : return Wait(); break; case tokWrapOn : return WrapOn(); break; case tokWrapOff : return WrapOff(); break; case tokReset : return Reset(); break; case tokEOF : return EndOfFile(); break; case tokEnd : Error(currentToken, i18n("Cannot understand ']'"), 1050); getToken(); return new TreeNode(currentToken, Unknown); break; case tokBegin : Error(currentToken, i18n("Cannot understand '['"), 1050); getToken(); return new TreeNode(currentToken, Unknown); break; default : break; } if (currentToken.type != tokEnd) { Error(currentToken, i18n("Cannot understand '%1'").arg(currentToken.look), 1060); } getToken(); return new TreeNode(currentToken, Unknown); // fall-though for unknowns }
//------------------------------------------------------------------------------ // void AddData(double x, double y) //------------------------------------------------------------------------------ void TsPlotCurve::AddData(double x, double y, double high, double low) { #ifdef DEBUG_PENUP_PENDOWN static Integer counter = 0; if (abscissa.size() == 0) counter = 0; if (abscissa.size() == 80 && counter == 0) { counter = 1; MessageInterface::ShowMessage("Pen up\n"); PenUp(); } if (counter == 1) { ++counter; MessageInterface::ShowMessage("Pen down\n"); PenDown(); } #endif if (penIsDown) { // Include error bars in top and bottom values Real yt = y + high, yb = y - (low == 0.0 ? high : low); double lx, ly; int asize = abscissa.size(); if (asize == 0) { #ifdef DEBUG_FIRST_POINT MessageInterface::ShowMessage("Adding initial data: [%lf, %lf]", x, y); if (errorDataPresent) MessageInterface::ShowMessage(" with error bars: [%le, %le]\n", high, low); MessageInterface::ShowMessage("\n"); #endif minX = maxX = x; maxY = yt; minY = yb; rangeChanged = true; domainChanged = true; lx = x - 1.0; ly = y - 1.0; } else { lx = abscissa[asize-1]; ly = ordinate[asize-1]; } // Only add points that do not match the previous point if (!((x == lx) && (y == ly))) { abscissa.push_back(x); ordinate.push_back(y); if (high > 0.0) { highError.push_back(high); if (low > 0.0) lowError.push_back(low); } if (x < minX) { minX = x; domainChanged = true; } if (x > maxX) { maxX = x; domainChanged = true; } if (yb < minY) { minY = yb; rangeChanged = true; } if (yt > maxY) { maxY = yt; rangeChanged = true; } } #ifdef DEBUG_REPEATED_POINTS else { MessageInterface::ShowMessage("Omitting [%le %le] because it matches " "[%le %le]\n", x, y, lx, ly); } #endif #if DEBUG_XY_PLOT_CURVE_ADD MessageInterface::ShowMessage ("TsPlotCurve::AddData() size = %d, x = %lf, y = %lf\n", abscissa.size(), abscissa.back(), ordinate.back()); #endif } }