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 } } } }
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; } } }