MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / getKeyframeRange

Method getKeyframeRange

Gui/DopeSheetView.cpp:2621–2681  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2619}
2620
2621std::pair<double, double> DopeSheetView::getKeyframeRange() const
2622{
2623 std::pair<double, double> ret;
2624 std::vector<double> dimFirstKeys;
2625 std::vector<double> dimLastKeys;
2626 DSTreeItemNodeMap dsNodeItems = _imp->model->getItemNodeMap();
2627
2628 for (DSTreeItemNodeMap::const_iterator it = dsNodeItems.begin(); it != dsNodeItems.end(); ++it) {
2629 if ( (*it).first->isHidden() ) {
2630 continue;
2631 }
2632
2633 const DSNodePtr& dsNode = (*it).second;
2634 const DSTreeItemKnobMap& dsKnobItems = dsNode->getItemKnobMap();
2635
2636 for (DSTreeItemKnobMap::const_iterator itKnob = dsKnobItems.begin(); itKnob != dsKnobItems.end(); ++itKnob) {
2637 if ( (*itKnob).first->isHidden() ) {
2638 continue;
2639 }
2640
2641 const DSKnobPtr& dsKnob = (*itKnob).second;
2642
2643 for (int i = 0; i < dsKnob->getKnobGui()->getKnob()->getDimension(); ++i) {
2644 KeyFrameSet keyframes = dsKnob->getKnobGui()->getCurve(ViewIdx(0), i)->getKeyFrames_mt_safe();
2645
2646 if ( keyframes.empty() ) {
2647 continue;
2648 }
2649
2650 dimFirstKeys.push_back( keyframes.begin()->getTime() );
2651 dimLastKeys.push_back( keyframes.rbegin()->getTime() );
2652 }
2653 }
2654
2655 // Also append the range of the clip if this is a Reader/Group/Time node
2656 std::map<DSNode *, FrameRange >::const_iterator foundRange = _imp->nodeRanges.find( dsNode.get() );
2657 if ( foundRange != _imp->nodeRanges.end() ) {
2658 const FrameRange& range = foundRange->second;
2659 if ( !dimFirstKeys.empty() ) {
2660 dimFirstKeys[0] = range.first;
2661 } else {
2662 dimFirstKeys.push_back(range.first);
2663 }
2664 if ( !dimLastKeys.empty() ) {
2665 dimLastKeys[0] = range.second;
2666 } else {
2667 dimLastKeys.push_back(range.second);
2668 }
2669 }
2670 }
2671
2672 if ( dimFirstKeys.empty() || dimLastKeys.empty() ) {
2673 ret.first = 0;
2674 ret.second = 0;
2675 } else {
2676 ret.first = *std::min_element( dimFirstKeys.begin(), dimFirstKeys.end() );
2677 ret.second = *std::max_element( dimLastKeys.begin(), dimLastKeys.end() );
2678 }

Callers

nothing calls this directly

Calls 14

getItemNodeMapMethod · 0.80
getKeyFrames_mt_safeMethod · 0.80
emptyMethod · 0.80
getTimeMethod · 0.80
ViewIdxClass · 0.50
beginMethod · 0.45
endMethod · 0.45
getDimensionMethod · 0.45
getKnobMethod · 0.45
getKnobGuiMethod · 0.45
getCurveMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected