void ofxBoxObj::draw(int _level){ ofSetColor(255, 255); box->draw(_level); ofPushMatrix(); ofTranslate(x-getScaledWidth()*0.5,y-getScaledHeight()*0.5); ofScale(scale, scale); if (*bDebug) drawBoundingBox(); ofPopMatrix(); }
// In case there is the need to keep track of the differents branches width and lenght, // as in the case when scaleWidth is set to true, this method does 2 things: // 1) it stores all the sizes in the container historySizes, for each pair, the first calue is the lenght // the second the width. // 2) It returns the current width and the previous one, as the method name says. // If there is no need to keep track of the branch width, just returns a pair containing // the default width, both for the prev and current width. pair<float, float> ofxLSTurtle::getPrevAndCurrentWidth(float currentLength){ if(!scaleWidth){ return make_pair(width, width); } float currentWidth = (scaleWidth) ? getScaledWidth(currentLength) : width; if (historySizes.empty()) { historySizes.insert(make_pair(currentLength, currentWidth)); return (make_pair(currentWidth, currentWidth)); } else { map<float, float>::iterator current; if (historySizes.find(currentLength) == historySizes.end()) { historySizes.insert(make_pair(currentLength, currentWidth)); current = historySizes.begin(); } else { current = historySizes.find(currentLength); } auto prev = current; ++prev; return make_pair(prev->second, current->second); } }
const Graphics::Surface *QuickTimeDecoder::VideoTrackHandler::decodeNextFrame() { if (endOfTrack()) return 0; if (_reversed) { // Subtract one to place us on the frame before the current displayed frame. _curFrame--; // We have one "dummy" frame at the end to so the last frame is displayed // for the right amount of time. if (_curFrame < 0) return 0; // Decode from the last key frame to the frame before the one we need. // TODO: Probably would be wise to do some caching int targetFrame = _curFrame; _curFrame = findKeyFrame(targetFrame) - 1; while (_curFrame != targetFrame - 1) bufferNextFrame(); } const Graphics::Surface *frame = bufferNextFrame(); if (_reversed) { if (_holdNextFrameStartTime) { // Don't set the next frame start time here; we just did a seek _holdNextFrameStartTime = false; } else { // Just need to subtract the time _nextFrameStartTime -= getFrameDuration(); } } else { if (_holdNextFrameStartTime) { // Don't set the next frame start time here; we just did a seek _holdNextFrameStartTime = false; } else if (_durationOverride >= 0) { // Use our own duration from the edit list calculation _nextFrameStartTime += _durationOverride; _durationOverride = -1; } else { _nextFrameStartTime += getFrameDuration(); } // Update the edit list, if applicable // HACK: We're also accepting the time minus one because edit lists // aren't as accurate as one would hope. if (!atLastEdit() && getRateAdjustedFrameTime() >= getCurEditTimeOffset() + getCurEditTrackDuration() - 1) { _curEdit++; if (!atLastEdit()) enterNewEditList(true); } } if (frame && (_parent->scaleFactorX != 1 || _parent->scaleFactorY != 1)) { if (!_scaledSurface) { _scaledSurface = new Graphics::Surface(); _scaledSurface->create(getScaledWidth().toInt(), getScaledHeight().toInt(), getPixelFormat()); } _decoder->scaleSurface(frame, _scaledSurface, _parent->scaleFactorX, _parent->scaleFactorY); return _scaledSurface; } return frame; }
uint16 QuickTimeDecoder::VideoTrackHandler::getWidth() const { return getScaledWidth().toInt(); }