Main Page → Developer Tools → Motive API → Function Reference
Note: For most up-to-date information about functions included in the Motive API, please refer to the NPTrackingTools.h header file.
Project Management
TT_Initialize
TT_Shutdown
TT_Update
TT_UpdateSingleFrame
TT_LoadCalibrationW
TT_LoadCalibration
TT_LoadRigidBodiesW
TT_LoadRigidBodies
TT_SaveRigidBodiesW
TT_SaveRigidBodies
TT_AddRigidBodiesW
TT_AddRigidBodies
TT_LoadProfileW
TT_LoadProfile
TT_SaveProfileW
TT_SaveProfile
TT_LoadProjectW
TT_LoadProject
TT_SaveProjectW
TT_SaveProject
TT_LoadCalibrationFromMemory
Data Streaming
TT_StreamNP
TT_StreamTrackd
TT_StreamVRPN
3D Frame Data
TT_FrameMarkerCount
TT_FrameMarkerX
TT_FrameMarkerY
TT_FrameMarkerZ
TT_FrameMarkerLabel
TT_FrameMarkerResidual
TT_FrameTimeStamp
TT_FrameID
TT_FrameCameraCentroid
TT_FlushCameraQueues
Rigid Bodies
TT_IsRigidBodyTracked
TT_RigidBodyLocation
TT_ClearRigidBodyList
TT_RemoveRigidBody
TT_RigidBodyCount
TT_RigidBodyUserData
TT_SetRigidBodyUserData
TT_RigidBodyMeanError
TT_RigidBodyName
TT_RigidBodyNameW
TT_SetRigidBodyEnabled
TT_RigidBodyEnabled
TT_RigidBodyTranslatePivot
TT_RigidBodyResetOrientation
TT_RigidBodyMarkerCount
TT_RigidBodyMarker
TT_RigidBodyUpdateMarker
TT_RigidBodyPointCloudMarker
TT_RigidBodyPlacedMarker
TT_RigidBodyID
TT_CreateRigidBody
TT_RigidBodySettings
TT_SetRigidBodySettings
TT_RigidBodyRefineStart
TT_RigidBodyRefineState
TT_RigidBodyRefineProgress
TT_RigidBodyRefineInitialError
TT_RigidBodyRefineResultError
TT_RigidBodyRefineApplyResult
TT_RigidBodyRefineReset
Camera Group
TT_GetCameraManager
TT_BuildNumber
TT_CameraGroupCount
TT_CreateCameraGroup
TT_RemoveCameraGroup
TT_CamerasGroup
TT_SetGroupShutterDelay
TT_SetCameraGroup
TT_CameraGroupFilterSettings
TT_SetCameraGroupFilterSettings
TT_CameraGroupMarkerSize
TT_SetCameraGroupMarkerSize
TT_SetCameraGroupReconstruction
TT_SetEnabledFilterSwitch
TT_IsFilterSwitchEnabled
Camera
TT_CameraCount
TT_CameraXLocation
TT_CameraYLocation
TT_CameraZLocation
TT_CameraOrientationMatrix
TT_CameraName
TT_CameraMarkerCount
TT_CameraMarker
TT_CameraPixelResolution
TT_CameraMarkerPredistorted
TT_SetCameraSettings
TT_SetCameraFrameRate
TT_CameraFrameRate
TT_CameraVideoType
TT_CameraExposure
TT_CameraThreshold
TT_CameraIntensity
TT_CameraTemperature
TT_CameraRinglightTemperature
TT_CameraGrayscaleDecimation
TT_SetCameraGrayscaleDecimation
TT_SetCameraFilterSwitch
TT_SetCameraAGC
TT_SetCameraAEC
TT_SetCameraHighPower
TT_SetCameraMJPEGHighQuality
TT_CameraImagerGain
TT_CameraImagerGainLevels
TT_SetCameraImagerGain
TT_IsContinuousIRAvailable
TT_ContinuousIR
TT_SetContinuousIR
TT_ClearCameraMask
TT_SetCameraMask
TT_CameraMask
TT_CameraMaskInfo
TT_SetCameraState
TT_CameraState
TT_CameraID
TT_CameraFrameBuffer
TT_CameraFrameBufferSaveAsBMP
TT_CameraBackproject
TT_CameraUndistort2DPoint
TT_CameraDistort2DPoint
TT_CameraRay
TT_CameraModel
TT_CameraPose
TT_GetCamera
Additional
TT_OrientTrackingBar
TT_AttachCameraModule
TT_DetachCameraModule
TT_AttachRigidBodySolutionTest
TT_DetachRigidBodySolutionTest
TT_AttachListener
TT_DetachListener
TT_GetResultString
Initializes the API and prepares all connected devices for capturing. Please note that TT_Initialize also loads the default profile from the ProgramData directory: C:\ProgramData\OptiTrack\MotiveProfile.motive. When there is a need to load the profile from a separate directory, use TT_LoadProfile function.
C:\ProgramData\OptiTrack\MotiveProfile.motive
NPRESULT TT_Initialize();
// Initializing all connected cameras TT_Initialize();
↑
Shuts down all of the connected devices.
NPRESULT TT_Shutdown();
// Close down all of the connected cameras TT_Shutdown(); return 0;
Processes incoming frame data from the cameras.
NPRESULT TT_Update();
//== Update to pick up recently-arrived cameras ==/ TT_Update(); //== Frame Processing: Polling the frame data ==// while( programRunning ){ if( TT_Update() == NPRESULT_SUCCESS ){ frameNumber++; //== Process Frame Data ==// } }
Updates a single frame of camera data.
NPRESULT TT_UpdateSingleFrame();
//== Update to pick up recently-arrived cameras ==/ TT_Update(); //== Frame Processing: Polling the frame data ==// while( programRunning ){ if( TT_UpdateSingleFrame() == NPRESULT_SUCCESS ){ frameNumber++; //== Process Frame Data ==// } }
Loads a Motive camera calibration file.
NPRESULT TT_LoadCalibration(const char *filename);
NPRESULT TT_LoadCalibrationW(const wchar_t *filename);
const char *calFileName= "project.ttp"; NPRESULT fileload = TT_LoadCalibration(calFileName); if (fileload == NPRESULT_SUCCESS) { printf("%s successfully loaded.\n", calFileName); } else { printf("Error: %s\n", TT_GetResultString(fileload)); }
Continuous Calibration
Imports TRA files and loads rigid body assets from it.
NPRESULT TT_LoadRigidBodies(const char *filename);
NPRESULT TT_LoadRigidBodiesW(const wchar_t *filename);
Filename (const char, const wchat_t)
NPRESULT
//Loading Rigid Body Assets from a TRA file. const char *traFile = "rigidbody.tra"; TT_LoadRigidBodies(traFile);
Saves all of the rigid body asset definitions into a TRA file.
NPRESULT TT_SaveRigidBodies(const char *filename);
NPRESULT TT_SaveRigidBodiesW(const wchar_t *filename);
Filename (const char, const wchar_t)
//== Save Rigid Bodies ==/ TT_SaveRigidBodies("traFileName.tra");
Loads a TRA file and adds its rigid body assets onto the project.
NPRESULT TT_AddRigidBodies(const char *filename);
NPRESULT TT_AddRigidBodiesW(const wchar_t *filename);
/== Adding Rigid Bodies ==/ TT_AddRigidBodies("rigidbody.tra");
Loads a Motive User Profile (.MOTIVE).
NPRESULT TT_LoadProfile(const char *filename);
NPRESULT TT_LoadProfileW(const wchar_t *filename);
//== Loading application profile XML file ==/ const char *filename= "UserProfile.ttp"; NPRESULT profileLoad = TT_LoadProfile(filename); if (profileLoad == NPRESULT_SUCCESS) { printf("%s successfully loaded.\n", filename); } else { printf("Error: %s\n", TT_GetResultString(profileLoad)); }
TTP project files are getting deprecated starting from next release of Motive. Export and use Motive profile (*.motive) instead.
Loads a Motive TTP project file.
NPRESULT TT_LoadProject(const char *filename);
NPRESULT TT_LoadProjectW(const wchar_t *filename);
//== Loading TTP project file ==/ const char *filename= "project.ttp"; NPRESULT ttpload = TT_LoadProject(filename); if (ttpload == NPRESULT_SUCCESS) { printf("%s successfully loaded.\n", filename); } else { printf("Error: %s\n", TT_GetResultString(ttpload)); }
Saves current application setting into a Profile XML file.
NPRESULT TT_SaveProfile(const char *filename);
NPRESULT TT_SaveProfileW(const wchar_t *filename);
//== Saving the TTP project ==/ const char *projectname = "project.ttp"; NPRESULT result = TT_SaveProfile(projectname); if ( result == NPRESULT_SUCCESS ){ printf("Profile XML file saved."); } else { printf("Error: %s", TT_GetResultString(result)); }
TT_SaveProject, TT_SaveProjectW functions have been deprecated
What happened to the Project TTP Files?
Loads calibration from memory.
NPRESULT TT_LoadCalibrationFromMemory(unsigned char* buffer, int bufferSize);
// get a pointer to the calibration block in memory int bufferSize; // get the size of the buffer NPRESULT result = TT_LoadCalibrationFromMemory(buffer, bufferSize);
Enables/disables the NatNet streaming of the Natrual Point tracking data.
NPRESULT TT_StreamNP(bool enabled);
//== Enable NP Streaming ==/ TT_StreamNP(true);
Enables/disables streaming frame data into trackd.
NPRESULT TT_StreamTrackd(bool enabled);
//== Enable NP Streaming ==/ TT_StreamTrackd(true);
Enables/disables data stream into VRPN.
NPRESULT TT_StreamVRPN(bool enabled, int port);
//== Enable Streaming into VRPN ==/ TT_StreamVRPN(true);
Gets total number of reconstruected markers in a frame.
int TT_FrameMarkerCount();
//Obtaining total marker count int totalMarker = TT_FrameMarkerCount(); printf("Total number of markers: %d", totalMarker); for (int i = 0 ; i < totalMarker; i++) { //== Use a loop to access every marker in the frame ==// printf("Marker %d (X/Y/Z): (%f, %f, %f)\n", i, TT_FrameMarkerX(i), TT_FrameMarkerY(i), TT_FrameMarkerZ(i)); }
Returns x-position of a reconstructed marker.
float TT_FrameMarkerX(int markerIndex);
int totalMarker = TT_FrameMarkerCount(); printf("Total number of markers: %d", totalMarker); //== Outputting marker positions ==// for (int i = 0 ; i < totalMarker; i++) { //== Use a loop to access every marker in the frame ==// printf("Marker %d (X/Y/Z): (%f, %f, %f)", i, TT_FrameMarkerX(i), TT_FrameMarkerY(i), TT_FrameMarkerZ(i)); }
Returns y-position of a reconstructed marker.
float TT_FrameMarkerY(int markerIndex);
Returns z-position of a reconstructed marker.
float TT_FrameMarkerZ(int markerIndex);
Returns residual value of a marker.
float TT_FrameMarkerResidual(int markerIndex);
Returns a unique identifier of a marker.
Core::cUID TT_FrameMarkerLabel(int markerIndex);
int totalMarkers = TT_FrameMarkerCount(); vector<Core::cUID> unique_Marker_ID(totalMarkers); for (int i = 0; i < totalMarkers; ++i) { unique_Marker_ID[i] = TT_FrameMarkerLabel(int markerIndex); }
Returns a timestamp value for the current frame.
double TT_FrameTimeStamp();
int frameNumber = 0; //== Display Frame number and Time stamp ==// while( !_kbhit() ) { if( !TT_Update() ){ frameNumber++; // increment frame number each time a frame is processed. printf("Frame #%d: (Timestamp: %f)\n", frameNumber, TT_FrameTimeStamp()); } }
Returns an ID assigned to the frame. Frame ID is basically the number of frames that a camera has recorded since the first initialization. In Motive, you can view these ID values by enabling more info from the visual aids option under the Camera Preview pane.
int TT_FrameID();
int frameNumber = 0; //== Display Frame number and ID ==// while( !_kbhit() ) { if( !TT_Update() ){ frameNumber++; // increment frame number each time a frame is processed. printf("Frame #%d: (ID: %d)\n", frameNumber, TT_FrameID()); } }
Checks whether a camera is contributing to reconstruction of a 3D marker, and saves corresponding 2D location as detected in the camera's view.
bool TT_FrameCameraCentroid(int markerIndex, int cameraIndex, float &x, float &y);
//== Getting 2D location of marker centroids from a camera.==// float x, y; int targetcam = 1; int frameMarkercount = TT_FrameMarkerCount(); for (int i = 0; i < frameMarkercount; i++) // For each detected markers { bool result = TT_FrameCameraCentroid(i, targetcam, x, y) if (result) { printf("Marker %d location in camera #%d: %f, %f\n", i, targetcam, x, y); } }
Flushes out the camera queues.
void TT_FlushCameraQueues();
//== Flush Camera Queues to remove accumulated latency. ==// TT_FlushCameraQueues(); //== Update the incoming camera data after. ==// TT_Update();
Checks whether rigid body is tracked or not.
bool TT_IsRigidBodyTracked(int rbIndex);
int totalRB = TT_RigidBodyCount(); //== Checking if the rigid body is tracked or not ==// for(int i = 0; i < totalRB) { If(TT_IsRigidBodyTracked(i)) { // Process Rigid Body } }
Obtains and saves 3D position, quaternion orientation, and Euler orientation of a rigid body
void TT_RigidBodyLocation(int rbIndex, float *x, float *y, float *z, float *qx, float *qy, float *qz, float *qw, float *yaw, float *pitch, float *roll);
//== Declared variables ==// float x, y, z; float qx, qy, qz, qw; float yaw, pitch, roll; int rbcount = TT_RigidBodyCount(); for(int i = 0; i < rbcount; i++) { //== Obtaining/Saving the rigid body position and orientation ==// TT_RigidBodyLocation( i, &x, &y, &z, &qx, & qy, &qz, &qw, &yaw, &pitch, &roll ); if( TT_IsRigidBodyTracked( i ) ) { printf( "%s: Pos (%.3f, %.3f, %.3f) Orient (%.1f, %.1f, %.1f)\n", TT_RigidBodyName( i ), x, y, z, yaw, pitch, roll ); } }
Euler Angles
There are many potential combinations of Euler angles so it is important to understand the order in which rotations are applied, the handedness of the coordinate system, and the axis (positive or negative) that each rotation is applied about. The following conventions are used for representing Euler orientation in Motive:
Clears and removes all rigid body assets.
void TT_ClearRigidBodyList();
//== Clear all rigid bodies ==// TT_ClearRigidBodyList();
Removes a rigid body from the project
NPRESULT TT_RemoveRigidBody(int rbIndex);
//== Removing Rigid Bodies that are not tracked in the scene ==// int totalRB = TT_RigidBodyCount(); for (int i = 0; i < totalRB; i++) { if(!TT_IsRigidBodyTracked(i)) { TT_RemoveRigidBody(i); } }
Returns a total number of rigid bodies.
int TT_RigidBodyCount();
//== Getting names of all rigid bodies ==// int totalRB = TT_RigidBodyCount(); for (int i = 0; i < totalRB; i++) { printf("Rigid Body #%d: %s\n", i, TT_RigidBodyName(i)); }
Returns the User Data ID value of a rigid body.
int TT_RigidBodyUserData(int rbIndex);
int totalRB = TT_RigidBodyCount(); //== User Data ID for all rigid bodies ==// for ( int i = 0 ; i < totalRB; i++ ) { printf("%s User Data ID: %d", TT_RigidBodyName(i), TT_RigidBodyUserData(i)); }
Assigns a User Data ID number to a rigid body.
void TT_SetRigidBodyUserData(int rbIndex, int ID);
int totalRB = TT_RigidBodyCount(); //== Assigning incremental User Data ID for rigid bodies. ==// for( int i = 0; i < totalRB; i++ ) { TT_SetRigidBodyUserData(i, i+1); printf("Rigid Body: %s, \t User Data ID: %d", TT_RigidBodyName(i), TT_RigidBodyUserData(i)); }
Returns the name for the rigid body.
const char* TT_RigidBodyName(int rbIndex);
const wchar_t* TT_RigidBodyNameW(int rbIndex);
int totalRB = TT_RigidBodyCount(); //== Printing Rigid Body Names ==// for( int i = 0; i < totalRB; i++ ) { printf("Rigid Body: %s, \t User Data ID: %d", TT_RigidBodyName(i), TT_RigidBodyUserData(i)); }
Enables/disables tracking of a rigid body.
void TT_SetRigidBodyEnabled(int rbIndex, bool enabled);
int totalRB = TT_RigidBodyCount(); //== Disabling all rigid bodies ==// for(int i = 0; i < totalRB; i++) { TT_SetRigidBodyEnabled(i, FALSE); }
Checks whether a rigid body is enabled.
bool TT_RigidBodyEnabled(int rbIndex);
int totalRB = TT_RigidBodyCount(); for (int i = 0; i < totalRB; i++) { if (TT_RigidBodyEnabled(i)) { //== Disabling all enabled rigid bodies ==// TT_SetRigidBodyEnabled(i, FALSE); } }
Translates the pivot point of a rigid body.
NPRESULT TT_RigidBodyTranslatePivot(int index, float x, float y, float z);
int rbIndex = 1; //== Translating a rigid body 2 cm in positive x-direction ==// TT_RigidBodyTranslate(rbIndex, 0.02, 0, 0);
Resets orientation of a rigid body.
bool TT_RigidBodyResetOrientation(int rbIndex);
int rbcount = TT_RigidBodyCount(); //== Resetting orientation of each rigid body. ==// for( int i = 0; i < rbcount i++ ) { if(TT_RigidBodyResetOrientation(i)) { printf("Rigid body (%s) orientation reset", TT_RigidBodyName(i)); } }
Gets total number of markers in a rigid body.
int TT_RigidBodyMarkerCount(int rbIndex);
int rbcount = TT_RigidBodyCount(); //== Listing out all of the rigid body markers ==// for(int i = 0; i < rbcount; i++) { printf("Rigid Body:%s\t Marker Count: %d", TT_RigidBodyName(i), TT_RigidBodyMarkerCount(i)); }
Saves 3D coordinates of a solved rigid body marker in respect to respective rigid body's local space.
void TT_RigidBodyMarker(int rbIndex, int markerIndex, float *x, float *y, float *z);
//== Listing out all of the rigid body markers and its respective position. ==// int rbcount = TT_RigidBodyCount(); for(int i = 0; i < rbcount; i++) { float x,y,z; for(int j = 0; j < TT_RigidBodyMarkerCount(i); j++) { printf("Rigid Body:%s\t Marker #%d\n", TT_RigidBodyName(i), j); //== Marker Locations ==// TT_RigidBodyMarker(i, j, &x, &y, &z); printf("Local: (%f, %f, %f)\n", x, y, z); } }
Changes and updates the rigid body marker positions.
bool TT_RigidBodyUpdateMarker( int rbIndex, int markerIndex, float *x, float *y, float *z );
Saves 3D coordinates of a rigid body marker in respect to the global space.
void TT_RigidBodyPointCloudMarker(int rbIndex, int markerIndex, bool &tracked, float &x, float &y, float &z);
//== Listing out all of the rigid body markers and its respective position. ==// int rbcount = TT_RigidBodyCount(); for(int i = 0; i < rbcount; i++) { float gx, gy, gz; bool tracked; for(int j = 0; j < TT_RigidBodyMarkerCount(i); j++) { printf("Rigid Body:%s\t Marker #%d\n", TT_RigidBodyName(i), j); //== Rigid Body Marker Global Coordinates ==// TT_RigidBodyPointCloudMarker(i, j, tracked, gx, gy, gz); printf("Global: (%f, %f, %f)\n", x, y, z); } }
Saves 3D coordinates of a rigid body solved marker positions in respect to the global space. Unlike TT_RigidBodyPointCloudMarker function, it does not report point cloud solved positions, but it reports the expected marker positions in respect to rigid body position and orientation.
void TT_RigidBodyPlacedMarker(int rbIndex, int markerIndex, bool &tracked, float &x, float &y, float &z);
//== Listing out all of the rigid body markers and its respective position. ==// int rbcount = TT_RigidBodyCount(); for(int i = 0; i < rbcount; i++) { float gx, gy, gz; bool tracked; for(int j = 0; j < TT_RigidBodyMarkerCount(i); j++) { printf("Rigid Body:%s\t Marker #%d\n", TT_RigidBodyName(i), j); //== Expected rigid body marker positions. ==// TT_RigidBodyPlacedMarker(i, j, tracked, gx, gy, gz); printf("Global: (%f, %f, %f)\n", x, y, z); } }
Returns a mean error of the rigid body tracking data.
void TT_RigidBodyMeanError(int rbIndex, int ID);
This function is used for obtaining unique identifiers for a specific rigid body indicated by the rigid body index number.
Core::cUID TT_RigidBodyID( int rbIndex );
Creates a rigid body asset from a set of reconstructed 3D markers.
NPRESULT TT_CreateRigidBody(const char* name, int userDataID, int markerCount, float *markerList);
int markerCount = TT_FrameMarkerCount; vector<float> markerListRelativeToGlobal; // add markers to markerListRelativeToGlobal using TT_FrameMarkerX, etc for (int i = 0; i < markerCount; ++i) { markerListRelativeToGlobal.push_back(TT_FrameMarkerX(i)); markerListRelativeToGlobal.push_back(TT_FrameMarkerY(i)); markerListRelativeToGlobal.push_back(TT_FrameMarkerZ(i)); } // then average the locations in x, y and z float sx = 0, sy = 0, sz = 0; for (int i = 0; i < markerCount; ++i) { sx += markerListRelativeToGlobal[3*i]; sy += markerListRelativeToGlobal[3*i + 1]; sz += markerListRelativeToGlobal[3*i + 2]; } float ax = sx/markerCount; float ay = sy/markerCount; float az = sz/markerCount; vector<float> pivotPoint = {ax, ay, az}; vector<float> markerListRelativeToPivotPoint; // subtract the pivot point location from the marker location for (int i = 0; i < markerCount; ++i) { markerListRelativeToPivotPoint.push_back(markerListRelativeToGlobal[3*i] - ax); markerListRelativeToPivotPoint.push_back(markerListRelativeToGlobal[3*i + 1] - ay); markerListRelativeToPivotPoint.push_back(markerListRelativeToGlobal[3*i + 2] - az); } TT_CreateRigidBody("Rigid Body New", 1, markerCount, markerListRelativeToPivotPoint);
Obtains rigid body settings for a given asset, and saves them in a cRigidBodySettings instance.
NPRESULT TT_RigidBodySettings(int rbIndex, RigidBodySolver::cRigidBodySettings &settings);
//== Constructor at the Beginning of the program ==// RigidBodySolver::cRigidBodySettings::cRigidBodySettings() {}; //== Obtaining Rigid Body Settings ==// int rbcount = TT_RigidBodyCount(); RigidBodySolver::cRigidBodySettings settings; for( int i = 0; i < rbcount; i++ ) { TT_RigidBodySettings(i, settings); printf("Rigid Body: %s\n", TT_RigidBodyName(i)); //== Printing Some of the Settings==// printf("MaxMarkerDeflection: %f\n", settings.MaxMarkerDeflection); printf("MinimumMarkerCount: %d\n", settings.MinimumMarkerCount); if (settings.Unique) { printf("Unique: True\n"); } }
Changes property settings of a rigid body.
NPRESULT TT_SetRigidBodySettings(int rbIndex, RigidBodySolver::cRigidBodySettings &settings);
//== Constructor at the Beginning of the program ==// int rbcount = TT_RigidBodyCount(); RigidBodySolver::cRigidBodySettings::cRigidBodySettings() {}; RigidBodySolver::cRigidBodySettings settings; for(int i = 0; i < rbcount; i++) { //== Obtaining configured settings for each rigid body ==// TT_RigidBodySettings(i, settings); if(settings.Unique){ printf("Rigid Body #%d is already set to Unique", i); } else { //== Setting/assigning all rigid bodies to Unique ==// settings.Unique = TRUE; TT_SetRigidBodySettings(i,settings); printf("Rigid Body #%d has been set to Unique", i); }
Initiates the rigid body refinement process. Input the number of samples and the ID of the rigid body you wish to refine. After starting the process, TT_RigidBodyRefineSample bust be called on everyframe in order to collect samples.
bool TT_RigidBodyRefineStart( Core::cUID rigidBodyID, int sampleCount );
This function collects samples for rigid body refinement started by calling the TT_RigidBodyRefineStart function. Call this function for every frame; within the update loop. You can check the progress of calibration by calling the TT_RigidBodyRefineProgress function.
bool TT_RigidBodyRefineSample();
This function inquiries the state of the refinement process. It returns TT_RigidBodyRefineStates enum as a result.
TT_RIgidBodyRefineStates TT_RigidBodyRefineState();
<source> enum TT_RigidBodyRefineStates {
TT_RigidBodyRefine_Initialized = 0, TT_RigidBodyRefine_Sampling, TT_RigidBodyRefine_Solving, TT_RigidBodyRefine_Complete, TT_RigidBodyRefine_Uninitialized
};
This function inquiries the progress of the refinement sampling process.
float TT_RigidBodyRefintProgress();
These two functions returns error values of the rigid body definition before and after the refinement.
float TT_RigidBodyRefineInitialError(); float TT_RigidBodyRefineResultError();
This function applies the refined result to the corresponding rigid body definition.
bool TT_RigidBodyRefineApplyResult();
This function discards the final refinement result and resets the refinement process.
bool TT_RigidBodyRefineReset();
Returns pointer to the CameraManager instance.
CameraLibrary::CameraManager* TT_GetCameraManager();
CameraLibrary::CameraManager *cman = TT_GetCameraManager(); // cman is declared as a pointer to a camera manager used in conjuction with the Camera SDK
Returns Motive build number.
int TT_BuildNumber();
//== Printing Motive Build Number ==// printf("Motive Build: %d\n", TT_BuildNumber());
Returns camera group count.
int TT_CameraGroupCount();
int groupcount = TT_CameraGroupCount(); //== Processing Camera Groups ==// for(int i = 0; i < groupcount; i++) { //== Process each camera group ==// }
Creates a new camera group.
bool TT_CreateCameraGroup();
//== Creating a new camera group ==// TT_CreateCameraGroup();