A Mt2dTrackData object stores information on 2D tracks created with the Motion Tracker object. It provides access to Mt2dTrack objects that represent such tracks. Spacial information is represented by MtData 对象。
The Mt2dTrackData object is obtained from the parent MotionTrackerObject .
The Mt2dTrackData object provides access to 2D tracks:
A copy of a track has to be freed with:
// AutoFree takes ownership AutoFree<Mt2dTrackData> freeData; freeData. 赋值 (trackData); const Int32 trackCount = trackData-> GetTrackCount ();
// loop all tracks for ( Int32 i = 0; i < trackCount; ++i) { Mt2dTrack * track = trackData-> GetTrackByIndex (i); if (track == nullptr ) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION );
// AutoFree takes ownership AutoFree<Mt2dTrack> freeTrack; freeTrack. 赋值 (track);
// print track index and name const String trackName = track-> GetName (); const String trackIndex = String::IntToString (i); ApplicationOutput ( "Track " + trackIndex + " : " + trackName); }
A Mt2dTrack object stores several properties:
A valid status is:
A track may only be valid for certain frames. This validity is stored in a BaseSelect object:
// AutoFree takes ownership AutoFree<BaseSelect> freeFrames; freeFrames. 赋值 (frameRange); Int32 seg = 0, a, b;
// loop through all segments of the BaseSelect while (frameRange-> GetRange (seg++, LIMIT<Int32>::MAX , &a, &b)) { const String segmentBeginStr = String::IntToString (a); const String segmentEndStr = String::IntToString (b); const String trackName = track-> GetName (); ApplicationOutput (trackName + " contains data for the range " + segmentBeginStr + " to " + segmentEndStr); }
The information on the position of the track for a given frame is stored in a MtData object. Such an object is returned by the Mt2dTrack :
Spacial information is obtained from that MtData object:
// get footage range const Int32 firstFrame = footage-> GetFirstFrameNumber (); const Int32 lastFrame = footage-> GetLastFrameNumber ();
// loop through all frames for ( Int32 frame = firstFrame; frame < lastFrame; frame++) { // check if track contains data for the given frame if (frameRange-> IsSelected (frame)) { // access data MtData * frameData = track-> GetDataForFrame (frame); if (frameData == nullptr ) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION );
// AutoFree takes ownership AutoFree<MtData> freeMtData; freeMtData. 赋值 (frameData);
// get position const 向量 pos = frameData-> GetPixelPosition (footage, true );
// print to console const String posStr = String::VectorToString (pos); const String frameStr = String::IntToString (frame); ApplicationOutput ( "Position for frame " + frameStr + ": " + posStr); } }