示例#1
0
void divideIntoTiles(const cv::Size& dim, const unsigned int& pixelsBetweenTiles, const unsigned int& tileSize, std::vector<std::pair<cv::Range,cv::Range> >& tileRngs)
{
  for (unsigned int r = 0; r < dim.height; r += pixelsBetweenTiles)
  {
    for (unsigned int c = 0; c < dim.width; c += pixelsBetweenTiles)
    {
      if( (r + pixelsBetweenTiles) <= dim.height && (c + pixelsBetweenTiles) <= dim.width)   //Only consider square tiles and discard the rest
      {
        cv::Mat d_col;
        int adjust = (int)(pixelsBetweenTiles-tileSize)/2;
        cv::Range rRange(r+adjust, (r+pixelsBetweenTiles)-adjust ), cRange(c+adjust, (c+pixelsBetweenTiles)-adjust);
        tileRngs.push_back(std::make_pair(rRange, cRange));
        //cv::Mat tileCopy = img(cv::Range(r, min(r + N, img.rows)),
                     //cv::Range(c, min(c + N, img.cols))).clone();//consider non-square tiles and with data copying
      }
    }
  }
} 
示例#2
0
bool nuiPopupMenu::MouseMoved(nuiSize X, nuiSize Y)
{
  bool IsInside;
  int cpt = SearchRectIndex(X,Y);
  IsInside = cpt >= 0 ? true : false;
  if (IsInside)
  {
    // Do the auto scroll feature:
    nuiMenuRect* pMenuRect = mRects[cpt];
    NGL_ASSERT(pMenuRect);
    if (pMenuRect->mpSBar->IsVisible())
    {
      nuiScrollBar* pSB = pMenuRect->mpSBar;
      NGL_ASSERT(pSB);
      nuiRange& rRange(pSB->GetRange());

      if (Y > mRect.Bottom() - AUTOSCROLL_HEIGHT)
      {
        // Scroll down
        if (rRange.GetValue() + rRange.GetPageSize() < rRange.GetMaximum())
        {
          mScrollUp = false;
          if (!mScrollTimer.IsRunning())
            mScrollTimer.Start(false, false);
          return true;
        }
      }

      if (Y < AUTOSCROLL_HEIGHT)
      {
        // Scroll up
        if (rRange.GetValue() > rRange.GetMinimum())
        {
          mScrollUp = true;
          if (!mScrollTimer.IsRunning())
            mScrollTimer.Start(false, false);
          return true;
        }
      }
    }

    if (mScrollTimer.IsRunning()) // Disable scroll timer if it was still running...
      mScrollTimer.Stop();

    nuiTreeNodePtr pNode = SearchNode(X,Y,cpt);
    if (pNode)
    {
      if (pNode->GetElement()->IsDisabled())
        return true;
      if (!mSelectionTimer.IsRunning())
      {
        if ((!pNode->IsEmpty() && !pNode->IsOpened()) || 
          (mpSelectedNode && ((mpSelectedNode->GetDepth()-1 != pNode->GetDepth()-1) || mpSelectedNode->IsOpened())))
        {  //may be opened, so start the timer
          if (mpSelectedNode && mpSelectedNode != pNode)
          {
            nuiRect WidgetRect = mpSelectedNode->GetElement()->GetRect();
            nuiRect r = WidgetRect;
            nuiMenuRect*  pRect= mRects[mpSelectedNode->GetDepth()-1]; /// get the current menuRect
            nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f;
            r.SetSize(WidgetRect.GetWidth()+TreeHandleSize, WidgetRect.GetHeight());

            mpSelectedNode->Select(false);
            Invalidate(); //(r);
            mpSelectedNode->GetElement()->Invalidate();
          }          

          mpNewSelectedNode = pNode;

          nuiRect WidgetRect = mpNewSelectedNode->GetElement()->GetRect();
          nuiRect r = WidgetRect;
          nuiMenuRect*  pRect= mRects[mpNewSelectedNode->GetDepth()-1]; /// get the current menuRect
          nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f;
          r.SetSize(WidgetRect.GetWidth()+TreeHandleSize, WidgetRect.GetHeight());
          mpNewSelectedNode->Select(true);
          Invalidate(); //(r);
          mpNewSelectedNode->GetElement()->Invalidate();

          mSelectionTimer.SetPeriod(nglTime(TIMER_PERIOD));
          mSelectionTimer.Start(false);        

        }
        else
        { //empty node, no need to time this
          if (mpSelectedNode != pNode)
          {
            if (mpSelectedNode)
            {
              mpSelectedNode->Select(false);
              nuiRect WidgetRect = mpSelectedNode->GetElement()->GetRect();
              nuiRect r = WidgetRect;
              nuiMenuRect*  pRect= mRects[mpSelectedNode->GetDepth()-1]; /// get the current menuRect
              nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f;
              r.SetSize(WidgetRect.GetWidth()+TreeHandleSize, WidgetRect.GetHeight());
              Invalidate(); //(r);

              mpSelectedNode->GetElement()->Invalidate();
            }

            pNode->Select(true);

            nuiRect WidgetRect = pNode->GetElement()->GetRect();
            nuiRect r = WidgetRect;
            nuiMenuRect*  pRect= mRects[pNode->GetDepth()-1]; /// get the current menuRect
            uint32 dbg = pNode->GetDepth()-1;
            nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f;
            r.SetSize(WidgetRect.GetWidth()+TreeHandleSize, WidgetRect.GetHeight());

            Invalidate(); //(r);
            pNode->GetElement()->Invalidate();

            mpSelectedNode = pNode;
          }
        }
      }
      else
      { // Timer is active
        if (mpNewSelectedNode && pNode != mpNewSelectedNode)
        {
          nuiRect WidgetRect = mpNewSelectedNode->GetElement()->GetRect();
          nuiRect r = WidgetRect;
          nuiMenuRect*  pRect= mRects[mpNewSelectedNode->GetDepth()-1]; /// get the current menuRect
          nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f;
          r.SetSize(WidgetRect.GetWidth()+TreeHandleSize, WidgetRect.GetHeight());

          mpNewSelectedNode->Select(false);
          Invalidate(); //(r);
          mpNewSelectedNode->GetElement()->Invalidate();
        }
        mpNewSelectedNode = pNode;
        nuiRect WidgetRect = mpNewSelectedNode->GetElement()->GetRect();
        nuiRect r = WidgetRect;
        nuiMenuRect*  pRect= mRects[mpNewSelectedNode->GetDepth()-1]; /// get the current menuRect
        nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f;
        r.SetSize(WidgetRect.GetWidth()+TreeHandleSize, WidgetRect.GetHeight());

        mpNewSelectedNode->Select(true);
        Invalidate(); //(r);        
        mpNewSelectedNode->GetElement()->Invalidate();        
      }
      return true;
    }
  }    
  return false;
}
static void
genNewParticles (ParticleSystem *ps, Emitter *e)
{

    float q, p, t, h, l;
    int count = e->count;

    Particle *part = ps->particles;
    int i, j;

    t = 0.0f;

    for (i = 0; i < ps->hardLimit && count > 0; i++, part++)
    {
	if (part->t <= 0.0f)
	{
	    //Position
	    part->x = rRange (e->x, e->dx);		// X Position
	    part->y = rRange (e->y, e->dy);		// Y Position
	    if ((q = rRange (e->dcirc/2.,e->dcirc/2.)) > 0)
	    {
		p = rRange (0, M_PI);
		part->x += q * cos (p);
		part->y += q * sin (p);
	    }

	    //Speed
	    part->vx = rRange (e->vx, e->dvx);		// X Speed
	    part->vy = rRange (e->vy, e->dvy);		// Y Speed
	    if ((q = rRange (e->dvcirc/2.,e->dvcirc/2.)) > 0)
	    {
		p = rRange (0, M_PI);
		part->vx += q * cos (p);
		part->vy += q * sin (p);
	    }
	    part->vt = rRange (e->vt, e->dvt);		// Aging speed
	    if (part->vt > -0.0001)
		part->vt = -0.0001;

	    //Size, Gravity and Rotation
	    part->s = rRange (e->s, e->ds);		// Particle size
	    part->snew = rRange (e->snew, e->dsnew);	// Particle start size
	    if (e->gp > (float)(random () & 0xffff) / 65535.)
		part->g = rRange (e->g, e->dg);		// Particle gravity
	    else
		part->g = 0.;
	    part->phi = rRange (0, M_PI);		// Random orientation
	    part->vphi = rRange (e->vphi, e->dvphi);	// Rotation speed

	    //Alpha
	    part->a = rRange (e->a, e->da);		// Alpha
	    if (part->a > 1)
		part->a = 1.;
	    else if (part->a < 0)
		part->a = 0.;

	    //HSL to RGB conversion from Wikipedia simplified by S = 1
            h = rRange (e->h, e->dh); //Random hue within range
	    if (h < 0)
		h += 1.;
            else if (t > 1)
		h -= 1.;
            l = rRange (e->l, e->dl); //Random lightness ...
	    if (l > 1)
		l = 1.;
	    else if (l < 0)
		l = 0.;
	    q = e->l * 2;
	    if (q > 1)
		q = 1.;
	    p = 2 * e->l - q;
	    for (j = 0; j < 3; j++)
	    {
		t = h + (1-j)/3.;
                if (t < 0)
		    t += 1.;
                else if (t > 1)
		    t -= 1.;
		if (t < 1/6.)
		    part->c[j] = p + ((q-p)*6*t);
		else if (t < .5)
		    part->c[j] = q;
		else if (t < 2/3.)
		    part->c[j] = p + ((q-p)*6*(2/3.-t));
		else
		    part->c[j] = p;
	    }

	    // give new life
	    part->t = 1.;

	    ps->active = TRUE;
	    count -= 1;
	}
    }
}