MCPcopy Create free account
hub / github.com/MrKepzie/Natron / onAverageButtonClicked

Method onAverageButtonClicked

Gui/TrackerPanel.cpp:983–1117  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

981}
982
983void
984TrackerPanel::onAverageButtonClicked()
985{
986 boost::shared_ptr<TrackerContext> context = getContext();
987
988 assert(context);
989 std::list<TrackMarkerPtr > markers;
990 context->getSelectedMarkers(&markers);
991 if ( markers.empty() ) {
992 Dialogs::warningDialog( tr("Average").toStdString(), tr("No tracks selected").toStdString() );
993
994 return;
995 }
996
997 TrackMarkerPtr marker = makeTrackInternal();
998 boost::shared_ptr<KnobDouble> centerKnob = marker->getCenterKnob();
999
1000#ifdef AVERAGE_ALSO_PATTERN_QUAD
1001 boost::shared_ptr<KnobDouble> topLeftKnob = marker->getPatternTopLeftKnob();
1002 boost::shared_ptr<KnobDouble> topRightKnob = marker->getPatternTopRightKnob();
1003 boost::shared_ptr<KnobDouble> btmRightKnob = marker->getPatternBtmRightKnob();
1004 boost::shared_ptr<KnobDouble> btmLeftKnob = marker->getPatternBtmLeftKnob();
1005#endif
1006
1007 RangeD keyframesRange;
1008 keyframesRange.min = INT_MAX;
1009 keyframesRange.max = INT_MIN;
1010 for (std::list<TrackMarkerPtr >::iterator it = markers.begin(); it != markers.end(); ++it) {
1011 boost::shared_ptr<KnobDouble> markCenter = (*it)->getCenterKnob();
1012 double mini, maxi;
1013 bool hasKey = markCenter->getFirstKeyFrameTime(ViewSpec(0), 0, &mini);
1014 if (!hasKey) {
1015 continue;
1016 }
1017 if (mini < keyframesRange.min) {
1018 keyframesRange.min = mini;
1019 }
1020 hasKey = markCenter->getLastKeyFrameTime(ViewSpec(0), 0, &maxi);
1021
1022 ///both dimensions must have keyframes
1023 assert(hasKey);
1024 if (maxi > keyframesRange.max) {
1025 keyframesRange.max = maxi;
1026 }
1027 }
1028
1029 bool hasKeyFrame = keyframesRange.min != INT_MIN && keyframesRange.max != INT_MAX;
1030 for (double t = keyframesRange.min; t <= keyframesRange.max; t += 1) {
1031 Point avgCenter;
1032 avgCenter.x = avgCenter.y = 0.;
1033
1034#ifdef AVERAGE_ALSO_PATTERN_QUAD
1035 Point avgTopLeft, avgTopRight, avgBtmRight, avgBtmLeft;
1036 avgTopLeft.x = avgTopLeft.y = avgTopRight.x = avgTopRight.y = avgBtmRight.x = avgBtmRight.y = avgBtmLeft.x = avgBtmLeft.y = 0;
1037#endif
1038
1039
1040 for (std::list<TrackMarkerPtr >::iterator it = markers.begin(); it != markers.end(); ++it) {

Callers

nothing calls this directly

Calls 15

ViewSpecFunction · 0.85
getSelectedMarkersMethod · 0.80
emptyMethod · 0.80
toStdStringMethod · 0.80
getPatternTopLeftKnobMethod · 0.80
getPatternBtmLeftKnobMethod · 0.80
getFirstKeyFrameTimeMethod · 0.80
getLastKeyFrameTimeMethod · 0.80
getCenterKnobMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected