Example #1
0
void CPlotter::Idle(unsigned int /* idletime */)
{
	if (!CStepper::GetInstance()->IsBusy() && (millis() - CStepper::GetInstance()->IdleTime()) > CHPGLParser::_state._penUpTimeOut)
	{
		if (_isPenDown)
		{
			PenUp();
			_isPenDownTimeout = true;
		}
	}
}
Example #2
0
void CPlotter::DelayPenNow()
{
	if (_isDelayPen)
	{
		_isDelayPen = false;
		if (_isDelayPenDown)
			PenDown();
		else
			PenUp();
	}
}
Example #3
0
//------------------------------------------------------------------------------
// 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
   }
}
Example #4
0
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
}
Example #5
0
//------------------------------------------------------------------------------
// 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
   }
}