Motive API: Function Reference
A guide to the functions available in the Motive API.
Please use the table of contents to the right to navigate to categories of functions. Links to the specific functions in each category are contained in the section header.
Alternately, use Ctrl + F to search the page contents.
Important Note:
Some functions are not yet included in the documentation. Please refer to the Motive API header file (MotiveAPI.h) for information on any functions that are not documented here.
Licensing
Startup / Shutdown
In this section:
Initialize | IsInitialized | Shutdown | CanConnectToDevices | BuildNumber
User Profile Interface
In this section:
Frame Processing
In this section:
Update | UpdateSingleFrame | FlushCameraQueues
Camera Calibration Interface
In this section:
LoadCalibration | LoadCalibrationFromMemory | SaveCalibration | CameraExtrinsicsCalibrationFromMemory | StartCalibrationWanding | CalibrationState | CalibrationCamerasLackingSamples | CameraCalibrationSamples | CancelCalibration | StartCalibrationCalculation |CurrentCalibrationQuality | ApplyCalibrationCalculation | SetGroundPlane | TranslateGroundPlane | AutoDetectCalibrationSquare | GetGroundPlaneMarkers
Data Streaming
In this section:
Frame Info
In this section:
FrameID | FrameTimeStamp | FrameTimeCode
Marker Interface
In this section:
MarkerCount | MarkerAverageSize | Marker | MarkerXYZ | MarkerID | MarkerResidual | MarkerContributingRaysCount | MarkerAverageRayLength | MarkerCameraCentroid
Rigid Body Interface
In this section:
RigidBodyCount | CreateRigidBody | SetRigidBodyProperty | ClearRigidBodies | LoadRigidBodies | AddRigidBodies | SaveRigidBodies | RigidBodyID | RigidBodyName | IsRigidBodyTracked | RemoveRigidBody | SetRigidBodyEnabled | RigidBodyEnabled | RigidBodyTranslatePivot | RigidBodyResetOrientation | RigidBodyMarkerCount | RigidBodyMarker | RigidBodyUpdateMarker | RigidBodyReconstructedMarker | RigidBodyMeanError |
RigidBodyCount
Returns a total number of Rigid Bodies.
int RigidBodyCount();
Description
This function returns a total count of Rigid Bodies defined in the project, including all tracked and untracked assets.
This function can be used within a loop to set required number iterations and access each of the Rigid Bodies.
Function Input
None
Function Output
Total Rigid Body count (int)
C++ Example
//== Getting names of all Rigid Bodies ==//
int rigidBodyCount = RigidBodyCount();
for( int i = 0; i < rigidBodyCount; i++ )
{
wchar_t name[ 256 ];
RigidBodyName( i, name, 256 );
printf( L"\t%ls\n", name );
}
CreateRigidBody
Creates a Rigid Body asset from a set of reconstructed 3D markers.
eRESULT CreateRigidBody(const wchar_t* name, int id, int markerCount, float* markerList);
Description
This functions creates a Rigid Body from the marker list and marker count provided in its argument.
The marker list is expected to contain a list of marker coordinates in the following order: (x1, y1, z1, x2, y2, z2, …, xN, yN, zN). The x/y/z coordinates must be in respect to the Rigid Body pivot point, in meters.
Inputted 3D locations are taken as Rigid Body marker positions about the Rigid Body pivot point. If you are using MarkerX/Y/Z functions to obtain the marker coordinates, you will need to subtract the pivot point location from the global marker locations when creating a Rigid Body. This is shown in the below example. If this is not done, the created Rigid Body will have its pivot point at the global origin.
Returns an eRESULT integer value. If the Rigid Body was successfully created, it returns 0 or kApiResult_Success.
Function Input
Rigid body name (wchar_t)
User Data ID (int)
Marker Count (int)
Marker list (float list)
Function Output
eRESULT
SetRigidBodyProperty
Changes property settings of a Rigid Body.
bool SetRigidBodyProperty(int rbIndex, const std::wstring& propertyName, const sPropertyValue& value);
Description
This function sets the value of a rigidbody property.
True if the property was found and the value was set
Function Input
Rigid body index (int)
Name of the property to set (std::wstring)
Value to set the property to (sPropertyValue)
Function Output
bool
ClearRigidBodies
Clears and removes all Rigid Body assets.
void ClearRigidBodies();
Description
This function clears all of existing Rigid Body assets in the project.
Function Input
None
Function Output
Void
C++ Example
//== Clear all Rigid Bodies ==//
ClearRigidBodies();
LoadRigidBodies
Imports .motive files and loads Rigid Body assets from it.
eRESULT LoadRigidBodies(const wchar_t* filename);
Description
This function imports and loads Rigid Body assets from a saved .motive file.
.motive file contain exported Rigid Body asset definitions from Motive.
All existing assets in the project will be replaced with the Rigid Body assets from the .motive file when this function is called. If you want to keep existing assets and only wish to add new Rigid Bodies, use the
AddRigidBodies
function.Returns an eRESULT integer value. It returns kApiResult_Success when the file is successfully loaded.
Function Input
Filename (const wchat_t)
Function Output
eRESULT
AddRigidBodies
Loads a .motive file and adds its Rigid Body assets onto the project.
eRESULT AddRigidBodies(const wchar_t* filename);
Description
This function adds Rigid Body assets from the imported .motive file to the asset list of the current project. Existing assets are not deleted.
Returns an eRESULT integer value. If the Rigid Bodies have been added successfully, it returns 0 or kApiResult_Success.
Function Input
Filename (const wchar_t)
Function Output
eRESULT
SaveRigidBodies
Saves all of the Rigid Body asset definitions into a .motive file.
eRESULT SaveRigidBodies(const wchar_t* filename);
Description
This function saves all of the Rigid Body assets from the project into a .motive file.
Returns an eRESULT integer value. It returns 0 or kApiResult_Success when successfully saving the file.
Function Input
Filename (const wchar_t)
Function Output
eRESULT
RigidBodyID
Returns the unique ID of a Rigid Body at the given index.
Core::cUID RigidBodyID(int rbIndex);
Description
This function returns the unique ID number of a Rigid Body.
This is different from User ID, which is a user definable ID for the Rigid Body. When working with capture data in external pipelines, this value can be used to address specific Rigid Bodies in the scene.
Function Input
Rigid body index (int)
Function Output
Unique ID number for Rigid Body
C++ Example
//== unique ID for all Rigid Bodies ==//
for ( int i = 0 ; i < RigidBodyCount(); i++ )
{
Core::cUID rbID = RigidBodyID();
std::wstring ID =
std::to_wstring(rbID.HighBits()) + L", " +
std::to_wstring(rbID.LowBits());
printf("ID for RigidBody %d : %ls", i, ID);
}
RigidBodyName
Returns the name for the Rigid Body at the given index.
const wchar_t* RigidBodyName(int rbIndex, wchar_t* buffer, int bufferSize);
Description
These functions are used to obtain the name of a Rigid Body.
Returns the assigned name of the Rigid Body.
Function Input
Rigid body index (int)
Function Output
Rigid body name (wconst char_t*)
C++ Example
int totalRB = RigidBodyCount();
//== Printing Rigid Body Names ==//
for( int i = 0; i < totalRB; i++ )
{
printf("Rigid Body: %ls", RigidBodyName(i));
}
IsRigidBodyTracked
Checks whether Rigid Body is tracked or not.
bool IsRigidBodyTracked(int rbIndex);
Description
Checks whether the Rigid Body is being tracked in the current frame.
Returns true if the Rigid Body is tracked.
Function Input
Rigid body index (int)
Function Output
True / False (bool)
C++ Example
int totalRB = RigidBodyCount();
//== Checking if the Rigid Body is tracked or not ==//
for(int i = 0; i < totalRB)
{
If(IsRigidBodyTracked(i))
{
// Process Rigid Body
}
}
RemoveRigidBody
Removes a Rigid Body at the given index.
eRESULT RemoveRigidBody(int rbIndex);
Description
This function removes a single Rigid Body from a project.
Returns an eRESULT integer value. If the operation was successful, it returns 0 (kApiResult_Success).
Function Input
Rigid body index (int)
Function Output
eRESULT
C++ Example
//== Removing Rigid Bodies that are not tracked in the scene ==//
int totalRB = RigidBodyCount();
for (int i = 0; i < totalRB; i++)
{
if(!IsRigidBodyTracked(i))
{
RemoveRigidBody(i);
}
}
SetRigidBodyEnabled
Enables or disables tracking of a Rigid Body.
void SetRigidBodyEnabled(int rbIndex, bool enabled);
Description
This function enables or disables tracking of the selected Rigid Body.
All Rigid Bodies are enabled by default. Disabled Rigid Bodies will not be tracked, and no data will be received from it.
Function Input
Rigid body index (int)
Tracking status (bool)
Function Output
Void
C++ Example
int totalRB = RigidBodyCount();
//== Disabling all Rigid Bodies ==//
for(int i = 0; i < totalRB; i++)
{
SetRigidBodyEnabled(i, FALSE);
}
RigidBodyEnabled
Checks whether a Rigid Body is enabled.
bool RigidBodyEnabled(int rbIndex);
Description
This function checks whether tracking of the Rigid Body is enabled or not.
The function returns true is the tracking is enabled.
Function Input
Rigid body index (int)
Function Output
True / False (bool)
C++ Example
int totalRB = RigidBodyCount();
for (int i = 0; i < totalRB; i++)
{
if (RigidBodyEnabled(i))
{
//== Disabling all enabled Rigid Bodies ==//
SetRigidBodyEnabled(i, FALSE);
}
}
RigidBodyTranslatePivot
Translates the pivot point of a Rigid Body.
eRESULT RigidBodyTranslatePivot(int rbIndex, float x, float y, float z);
Description
This function translates a Rigid Body.
3D position of a Rigid Body will be displaced in x/y/z directions by inputted amount (meters).
Translation is applied in respect to the local Rigid Body coordinate axis, not the global axis.
Returns an eRESULT integer value. If the operation is successful, returns 0 (kApiResult_Success).
Function Input
Rigid body index (int)
Translation along x-axis, in meters. (float)
Translation along y-axis, in meters. (float)
Translation along z-axis, in meters. (float)
Function Output
eRESULT
C++ Example
int rbIndex = 1;
//== Translating a Rigid Body 2 cm in positive x-direction ==//
RigidBodyTranslatePivot(rbIndex, 0.02, 0, 0);
RigidBodyResetOrientation
Resets the orientation of a Rigid Body.
bool RigidBodyResetOrientation(int rbIndex);
Description
This function resets the orientation of the Rigid Body and re-aligns its orientation axis with the global coordinate system.
Note: When creating a Rigid Body, its zero orientation is set by aligning its axis with the global axis at the moment of creation. Calling this function essentially does the same thing on an existing Rigid Body asset.
Returns true if the Rigid Body orientation was reset.
Function Input
Rigid body index (int)
Function Input
True / False (bool)
C++ Example
int rbcount = RigidBodyCount();
//== Resetting orientation of each Rigid Body. ==//
for( int i = 0; i < rbcount i++ )
{
if(RigidBodyResetOrientation(i))
{
printf("Rigid body (%ls) orientation reset", RigidBodyName(i));
}
}
RigidBodyMarkerCount
Gets total number of markers in a Rigid Body.
int RigidBodyMarkerCount(int rbIndex);
Description
This function returns the total number of markers involved in a Rigid Body.
Function Input
Rigid body index (int)
Function Output
Total number of marker in the Rigid Body (int)
C++ Example
int rbcount = RigidBodyCount();
//== Listing out all of the Rigid Body markers ==//
for(int i = 0; i < rbcount; i++)
{
printf("Rigid Body:%ls\t Marker Count: %d", RigidBodyName(i), RigidBodyMarkerCount(i));
}
RigidBodyMarker
Retrieves the positional offset of a marker constraint from a defined rigid body.
bool RigidBodyMarker(int rbIndex, int markerIndex, float* x, float* y, float* z);
Description
This function gets the 3D position of a solved Rigid Body marker and saves them in designated addresses. Rigid body marker positions from this function represents solved (or expected) location of the Rigid Body markers.
Note that the 3D coordinates obtained by this function are represented in respect to Rigid Body's local coordinate axis.
Function Input
Rigid body index (int)
Marker index (int)
Three declared variable addresses for saving the x, y, z coordinates of the marker (float)
Function Output
True / False (bool)
C++ Example
//== Listing out all of the Rigid Body markers and its respective position. ==//
int rbcount = RigidBodyCount();
for(int i = 0; i < rbcount; i++)
{
float x,y,z;
for(int j = 0; j < RigidBodyMarkerCount(i); j++)
{
wchar_t name[ 256 ];
RigidBodyName( i, name, 256 );
printf("Rigid Body:%ls\t Marker #%d\n", RigidBodyName(i), j);
//== Marker Locations ==//
RigidBodyMarker(i, j, &x, &y, &z);
printf("Local: (%f, %f, %f)\n", x, y, z);
}
}
RigidBodyUpdateMarker
Changes and updates the Rigid Body marker constraint positions.
bool RigidBodyUpdateMarker( int rbIndex, int markerIndex, float x, float y, float z );
Description
This function is used to change the expected positions of a single Rigid Body marker.
Rigid body markers are expected marker positions. Read about marker types in Motive.
Function Input
Rigid body index (int)
Marker index (int)
New x-position of the Rigid Body marker in relation to the local coordinate system.
New y-position of the Rigid Body marker in relation to the local coordinate system.
New z-position of the Rigid Body marker in relation to the local coordinate system.
Function Output
Returns true if marker locations have been successfully updated.
RigidBodyReconstructedMarker
Retrieves the reconstructed marker location for a marker constraint on a defined rigid body in the current frame.
bool RigidBodyReconstructedMarker( int rbIndex, int markerIndex, bool& tracked, float& x, float& y, float& z );
Description
This function retrieves 3D coordinates of each expected Rigid Body marker positions in designated variable addresses.
3D coordinates are saved in respect to global coordinate system.
Function Input
Rigid body index (int)
Marker index (int)
Tracked status, True or False (bool)
Three declared variable addresses for saving x, y, z coordinates of the marker (float).
Function Output
Returns true if marker locations were found and successfully returned.
C++ Example
//== Listing out all of the Rigid Body markers and its respective position. ==//
int rbcount = RigidBodyCount();
for(int i = 0; i < rbcount; i++)
{
float gx, gy, gz;
bool tracked;
for(int j = 0; j < RigidBodyMarkerCount(i); j++)
{
printf("Rigid Body:%ls\t Marker #%d\n", RigidBodyName(i), j);
//== Expected Rigid Body marker positions. ==//
RigidBodyReconstructedMarker(i, j, tracked, gx, gy, gz);
printf("Global: (%f, %f, %f)\n", x, y, z);
}
}
RigidBodyMeanError
Returns a mean error of the Rigid Body tracking data.
float RigidBodyMeanError(int rbIndex);
Description
Returns the average distance between the constraint location and the corresponding reconstructed marker, for all constraints.
Function Input
Rigid body index (int)
Function Output
Mean error (meters)
Rigid Body Refinement
In this section:
RigidBodyRefineStart | RigidBodyRefineSample | RigidBodyRefineState | RigidBodyRefineProgress | RigidBodyRefineInitialError | RigidBodyRefineResultError | RigidBodyRefineApplyResult | RigidBodyRefineReset |
RigidBodyRefineStart
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, RigidBodyRefineSample
must be called on every frame to collect samples.
bool RigidBodyRefineStart( Core::cUID rigidBodyID, int sampleCount );
Description
This function is used to start Rigid Body refinement.
Function Input
Target Rigid Body ID
Sample count (int)
Function Output
Returns true if the refinement process has successfully initiated.
RigidBodyRefineSample
This function collects samples for Rigid Body refinement after calling the RigidBodyRefineStart
function. Call this function for every frame within the update loop. You can check the progress of calibration by calling the RigidBodyRefineProgress
function.
bool RigidBodyRefineSample();
Description
This function collects Rigid Body tracking data for refining the definition of the corresponding Rigid Body.
Function Input
None. Samples frames for the initialized refine progress.
Function Output
Returns true if the refinement process has successfully collected a sample. This function does not collect samples if the Rigid Body is not tracked on the frame.
RigidBodyRefineState
This function inquiries the state of the refinement process. It returns eRigidBodyRefineState
enum as a result.
eRigidBodyRefineState RigidBodyRefineState();
Description
This function queries the state of the Rigid Body refinement process. It returns an enum value for indicating whether the process is initialized, sampling, solving, complete, or uninitialized.
<source> enum eRigidBodyRefineState {
RigidBodyRefine_Initialized = 0,
RigidBodyRefine_Sampling,
RigidBodyRefine_Solving,
RigidBodyRefine_Complete,
RigidBodyRefine_Uninitialized
};
</source>
Function Input
None. Checks the state on the ongoing refinement process.
Function Output
Returns
eRigidBodyRefineState
enum value.
RigidBodyRefineProgress
This function retrieves the overall sampling progress of the rigid body refinement solver.
float RigidBodyRefineProgress();
Description
When the refinement process is under the sampling state, calling this function returns the sampling progress. It will return a percentage value representing the sampling progress with respect to the total number of samples given in the
RigidBodyRefineStart
parameter.
Function Input
None. Checks the progress on the ongoing refinement process.
Function Output
Returns percentage completeness of the sampling process (float).
RigidBodyRefineInitialError
This function returns the error value of the Rigid Body definition before the refinement and is typically called in conjunction with RigidBodyRefineResultError
.
float RigidBodyRefineInitialError();
Description
Once the refinement process has reached complete stage, this function can be called along with
RigidBodyRefineResultError
to compare the error values from the corresponding Rigid Body definition before and after the refinement.
Function Input
None.
Function Output
Average error value of the target Rigid Body definition prior (
RigidBodyRefineInitialError
) and after (RigidBodyRefineResultError) the refinement.
RigidBodyRefineResultError
This function returns the error value of the Rigid Body definition after the refinement.
float RigidBodyRefineResultError();
Description
Once the refinement process has reached complete stage, this function can be called along with
RigidBodyRefineInitialError
to compare the error values from the corresponding Rigid Body definition before and after the refinement.
Function Input
None.
Function Output
Average error value of the target Rigid Body definition prior (
RigidBodyRefineInitialError
) and after (RigidBodyRefineResultError
) the refinement.
RigidBodyRefineApplyResult
This function applies the refined result to the corresponding Rigid Body definition.
bool RigidBodyRefineApplyResult();
Description
This function applies the refinement to the Rigid Body definition. Call this function after comparing the error values before and after the refinement using the
RigidBodyRefineInitialError
andRigidBodyRefineResultError
functions.
Function Input
None.
Function Output
Returns true if the refined results have been successfully applied.
RigidBodyRefineReset
This function discards the final refinement result and resets the refinement process.
bool RigidBodyRefineReset();
Description
If the final refinement result from the
RigidBodyRefineResultError
call is not satisfying, you can call this function to discard the result and start over from the sampling process again.
Function Input
None.
Function Output
Returns true if the refined results have been successfully reset.
Camera Interface
In this section:
CameraCount | CameraGroupCount | CameraGroup | CameraSerial | CameraObjectCount | CameraObject | CameraObjectPredistorted | SetCameraProperty
CameraCount
Returns the total number of cameras connected to the system.
int CameraCount();
Description
This function returns a total camera count.
Function Input
None
Function Output
Total number of cameras (int)
C++ Example
//== Printing Frame rate of the cameras ==//
int totalCamera = CameraCount();
for( int i = 0; i < totalCamera; i++)
{
printf("%d frame rate: %d\n", CameraSerial(i), CameraFrameRate(i));
}
CameraGroupCount
Returns the camera group count.
int CameraGroupCount();
Description
This function returns the total count of camera groups that are involved in the project.
This will generally return a value of two: one for the tracking cameras and one for reference cameras.
Function Input
None
Function Output
Camera group count (int)
C++ Example
int groupcount = CameraGroupCount();
//== Processing Camera Groups ==//
for(int i = 0; i < groupcount; i++)
{
//== Process each camera group ==//
}
CameraGroup
Returns an index value of a camera group that a camera is in.
int CameraGroup(int cameraIndex);
Description
This function takes an index value of a camera and returns the corresponding camera group index that the camera is in.
Function Input
Camera index (int)
Function Output
Camera group index (int)
C++ Example
//== Listing out all of the cameras and their associate group index ==//
int cameracount = CameraCount();
for(int i = 0; i < cameracount; i ++)
{
printf("Camera: %d\t CameraGroup: #%d", CameraSerial(i), CameraGroup(i));
}
CameraSerial
Returns the corresponding camera's serial number as an integer.
int CameraSerial(int cameraIndex);
Description
This function returns the corresponding camera's serial number.
Function Input
Camera index (int)
Function Output
Camera serial number (int)
C++ Example
//== Displaying all connected cameras ==//
int totalCamera = CameraCount();
printf("Detected Cameras Serial Numbers:\n");
for (int i = 0; i < totalCamera; i++)
{
printf("\t%d\n", CameraSerial(i));
}
CameraObjectCount
Returns a total number of objects detected by a camera in the current frame.
int CameraObjectCount( int cameraIndex );
Description
This function returns a total number of centroids detected by a camera.
A centroid is defined for every group of contiguous pixels that forms a shape that encloses the thresholded pixels.
The size and roundness filter (cCameraGroupFilterSettings) is not applied in this data.
Function Input
Camera index (int)
Function Output
Number of centroids (int)
C++ Example
for (int i = 0; i < CameraCount(); i++)
{
int centroidcount = CameraObjectCount(i);
printf("Camera #%d detected centroids: %d\n", i, centroidcount);
}
CameraObject
Returns 2D location of the centroid as seen by a camera.
bool CameraObject( int cameraIndex, int objectIndex, float& x, float& y );
Description
This function saves 2D location of the centroid as detected by a camera's imager.
Returns true if the function successfully saves the x and y locations.
Function Input
Camera index (int)
Object index (int)
Declared variables for saving x and y (float)
Function Output
True/False (bool)
C++ Example
int cameracount = CameraCount();
for (int i = 0; i < cameracount; i++)
{
float x, y;
int centroidcount = CameraObjectCount(i);
printf("Camera #%d detected centroids: %d\n", i, centroidcount);
for (int j = 0; j < centroidcount; j++)
{
if ( CameraObject(i, j, x, y) )
{
printf("\t#%d\t(%.2f, %.2f)\n", j, x, y);
}
}
}
CameraObjectPredistorted
Retrieve the pre-distorted object location in the view of the camera.
bool CameraObjectPredistorted( int cameraIndex, int objectIndex, float& x, float& y );
Description
This function saves the predistorted 2D location of a centroid.
This data indicates where the camera would see a marker if there were no effects from lens distortions. For most of our cameras/lenses, this location is only a few pixels different from the distorted position obtained by the CameraObject function.
Returns true when the values are successfully saved.
Function Input
Camera index (int)
Object (centroid) index (int)
Declared variable for saving x location (float)
Declared variable for saving y location (float)
Function Output
True/False (bool)
C++ Example
for (int i = 0; i < CameraCount(); i++)
{
float x, y, pdx, pdy;
int centroidcount = CameraObjectCount(i);
printf("Camera #%d detected centroids: %d\n", i, centroidcount);
for (int j = 0; j < centroidcount; j++)
{
CameraObject(i, j, x, y);
CameraObjectPredistorted(i, j, pdx, pdy);
printf("\t#%d\t(%.2f, %.2f)\tPredistorted:\t(%.2f, %.2f)\n", j, x, y, pdx, pdy);
}
}
SetCameraProperty
Configures the value of a camera property.
bool SetCameraProperty( int cameraIndex, const std::wstring& propertyName, const sPropertyValue& value );
Description
This function sets camera properties for a camera device specified by its index number.
A false return value indicates the function did not complete the task.
Each of the video types is indicated with the following integers. Supported video types may vary for different camera models. Please check the Data Recording page for more information on which image processing modes are available in different models.
Segment Mode: 0
Raw Grayscale Mode: 1
Object Mode: 2
Precision Mode: 4
MJPEG Mode: 6
Valid exposure ranges depend on the framerate settings:
Prime series and Flex 13: 1 ~ maximum time gap between the frames, which is approximately (1 / framerate) - 200 microseconds with about 200 microseconds gap for protection.
Valid threshold ranges: 0 - 255
Function Input
Camera index (int)
Name of the propety to set (const std::wstring&)
For more information on the camera settings, refer to the Devices pane page.
Function Output
True/False (bool)
Full Frame Grayscale Decimation
In this section:
SetCameraGrayscaleDecimation | CameraGrayscaleDecimation | CameraIsContinuousIRAvailable | CameraSetContinuousIR | CameraContinuousIR | SetCameraSystemFrameRate | CameraSystemFrameRate |
SetCameraGrayscaleDecimation
Sets frame rate decimation ratio for processing grayscale images.
bool SetCameraGrayscaleDecimation(int cameraIndex, int value);
Description
This feature is available only in Flex 3 and Trio/Duo tracking bars, and has been deprecated for other camera models.
This functions sets the frame decimation ratio for processing grayscale images in a camera.
Depending on the decimation ratio, a fewer number of grayscale frames will be captured. This can be beneficial when looking to reduce the processing loads.
Supported decimation ratios: 0, 2, 4, 6, 8. When the decimation setting is set to 4, for example, a camera will capture one grayscale frame for 4 frames of the tracking data.
Returns true when it successfully sets the decimation value.
Function Input
Camera index (int)
Decimation value (int)
Function Output
True/False (bool)
C++ Example
//== Introducing frame decimation to reference cameras ==//
for (int i = 0; i < CameraCount(); i++)
{
if (CameraVideoType(i) == 1 ||CameraVideoType(i) == 6)
{
SetCameraGrayscaleDecimation(i, 2);
printf("Camera #%d grayscale video frame decimation: %d\n",
i, CameraGrayscaleDecimation(i));
}
}
CameraGrayscaleDecimation
Retrieves the configured grayscale image frame rate decimation ratio of a camera.
int CameraGrayscaleDecimation(int cameraIndex);
Description
This feature is available only in Flex 3 and Trio/Duo tracking bars, and it has been deprecated for other camera models.
This function returns grayscale frame rate decimation ratio of a camera.
Valid decimation ratios are 0, 2, 4, 8. When the decimation setting is set to 4, for example, a camera will capture one grayscale frame for 4 frames of the tracking data.
To set the decimation ratio, use the SetCameraGrayscaleDecimation function.
Grayscale images require more load on data processing. Decimate the grayscale frame images and capture the frames at a lower frame rate to reduce the volume of data.
Function Input
Camera index (int)
Function Output
Decimation ratio (int)
C++ Example
//== Checking grayscale decimation ==//
for (int i = 0; i < CameraCount(); i++)
{
if (CameraVideoType(i) == 1 ||CameraVideoType(i) == 6)
{
printf("Camera #%d grayscale video frame decimation: %d\n",
i, CameraGrayscaleDecimation(i));
}
}
CameraIsContinuousIRAvailable
Checks if the continuous IR mode is supported.
bool CameraIsContinuousIRAvailalbe(int cameraIndex);
Description
This function checks whether the continuous IR illumination mode is available in the camera model.
In the continuous IR mode, the IR LEDs will not strobe but will illuminate continuously instead.
Continuous IR modes are available only in the Flex 3 camera model and the Duo/Trio tracking bars.
Returns true if continuous IR mode is available.
Function Input
Camera index (int)
Function Output
True / False (bool)
C++ Example
//== Configuring Continuous IR ==//
int totalCamera = CameraCount();
for (int i = 0; i < totalCamera; i++)
{
//== Checking if the mode is available ==//
if (CameraIsContinuousIRAvailable(i))
{
if (CameraContinuousIR(i))
{
printf("Continuous IR enabled already\n");
}
else
{
printf("Enabling continuous IR\n");
CameraSetContinuousIR(i, true);
}
}
else
{
printf("Continuous IR is not available\n");
}
}
CameraSetContinuousIR
Enables or disables continuous IR, if the camera supports it.
bool CameraSetContinuousIR(int cameraIndex, bool enable);
Description
This function enables, or disables, continuous IR illumination in a camera.
Continuous IR mode outputs less light when compared to Strobed (non-continuous) illumination, but this mode could be beneficial in situations where there are extraneous IR reflections in the volume.
Use the
CameraIsContinuousIRAvailable
function to check if the camera supports this mode.
Function Input
Camera index (int)
A Boolean argument for enabling (true) or disabling (false)
Function Output
True / False (bool)
C++ Example
int totalCamera = CameraCount();
//== Configuring Continuous IR ==//
for (int i = 0; i < totalCamera; i++)
{
if (CameraIsContinuousIRAvailable(i))
{
//== Checking if already enabled ==//
if (CameraContinuousIR(i))
{
printf("Coninuous IR enabled already\n");
}
else
{
printf("Enabling continuous IR\n");
CameraSetContinuousIR(i, true);
}
}
else
{
printf("Continuous IR is not available\n");
}
}
CameraContinuousIR
Checks if the continuous IR mode is enabled.
bool CameraContinuousIR(int cameraIndex);
Description
This function checks if the continuous IR mode is enabled or disabled in a camera.
Returns true if the continuous IR mode is already enabled.
Function Input
Camera index (int)
Function Output
True / False (bool)
C++ Example
int totalCamera = CameraCount();
//== Configuring Continuous IR ==//
for (int i = 0; i < totalCamera; i++)
{
if (CameraIsContinuousIRAvailable(i))
{
//== Checking if already enabled ==//
if (CameraContinuousIR(i))
{
printf("Continuous IR enabled already\n");
}
else
{
printf("Enabling continuous IR\n");
CameraSetContinuousIR(i, true);
}
}
else
{
printf("Continuous IR is not available\n");
}
}
SetCameraSystemFrameRate
Sets the camera frame rate.
bool SetCameraSystemFrameRate(int framerate);
Description
This function sets the master frame rate for the camera system.
Returns true if it successfully adjusts the settings.
Note that this function may assign a frame rate setting that is out of the supported range. Check to make sure the desired frame rates are supported.
Function Input
Frame rate (frames/sec)
Function Output
True/False (bool).
C++ Example
//== Changing frame rate of all cameras ==//
int framerate = 120;
for (int i = 0; i < CameraCount(); i++)
{
SetCameraSystemFrameRate(i, framerate);
printf("\t%d\tFrame Rate: %d", CameraSerial(i), CameraSystemFrameRate(i));
}
CameraSystemFrameRate
Retrieves the the current master system frame rate.
int CameraSystemFrameRate();
Description
This function returns the master frame rate of a camera system.
Function Input
none
Function Output
Camera frame rate (int)
C++ Example
//== Checking camera settings ==//
int totalCamera = CameraCount();
for (int i = 0; i < totalCamera; i++)
{
printf("Camera #%d:\tFPS: %d\n",
i, CameraSystemFrameRate(i) );
}
Measured Camera System Frame Rate
In this section:
CameraTemperature | CameraRinglightTemperature | SetCameraAGC | SetCameraAEC | CameraImagerGainLevels
CameraTemperature
Measures the image board temperature of a camera.
float CameraTemperature(int cameraIndex);
Description
This function returns the temperature (in Celsius) of a camera's image board.
Temperature sensors are featured only in Prime series camera models.
Function Input
Camera index (int)
Function Output
Image board temperature (float)
C++ Example
//== Temperature settings ==//
for (int i = 0; i < CameraCount(); i++)
{
printf("Camera #%d:\n",i);
printf("\tImage Board Temperature: %.2f\n", CameraTemperature(i));
printf("\tIR Board Temperature: %.2f\n", CameraRinglightTemperature(i));
printf("\n");
}
CameraRinglightTemperature
Measures the IR LED board temperature of a camera.
float CameraRinglightTemperature(int cameraIndex);
Description
This function returns temperature (in celsius) of a camera's IR LED board.
Temperature sensors are featured only in Prime series camera models.
Function Input
Camera index (int)
Function Output
IR LED board temperature (float)
C++ Example
//== Temperature settings ==//
for (int i = 0; i < CameraCount(); i++)
{
printf("Camera #%d:\n",i);
printf("\tImage Board Temperature: %.2f\n", CameraTemperature(i));
printf("\tIR Board Temperature: %.2f\n", CameraRinglightTemperature(i));
printf("\n");
}
SetCameraAGC
Enables or disables automatic gain control.
bool SetCameraAGC(int cameraIndex, bool enable);
Description
This function enables or disables automatic gain control (AGC).
Automatic Gain Control feature adjusts the camera gain level automatically for best tracking.
AGC is only available in Flex 3 cameras and Duo/Trio tracking bars.
Returns true when the operation completed successfully.
Function Input
Camera index (int)
Enabled (true) / disabled (false) status (bool)
Function Output
True/False (bool)
C++ Example
//== Setting the Automatic Exposure Control ==//
int totalCamera = CameraCount();
for(int i = 0; i < totalCamera; i++)
{
if(SetCameraAGC(i, true))
{
printf("Camera #%d AGC enabled");
}
else
{
printf("AGC not set properly. Check if this is supported.");
}
}
SetCameraAEC
Enables or disables automatic exposure control.
bool SetCameraAEC(int cameraIndex, bool enable);
Description
This function enables or disables Automatic Exposure Control (AEC) for featured camera models.
This feature is only available in Flex 3 cameras and Duo/Trio tracking bars.
AEC allows a camera to automatically adjust its exposure setting by looking at the properties of the incoming frames.
Returns true if the operation was successful.
Function Input
Camera index (int)
A Boolean argument for enabling (true) or disabling (false) the filter.
Function Output
True/false (bool)
C++ Example
//== Setting the Automatic Exposure Control ==//
int totalCamera = CameraCount();
for(int i = 0; i < totalCamera; i++)
{
if(SetCameraAEC(i, true))
{
printf("Camera #%d AEC enabled");
}
else
{
printf("AEC not set properly. Check if this is supported.");
}
}
CameraImagerGainLevels
Retrieves the total number of gain levels available in a camera.
int CameraImagerGainLevels(int cameraIndex);
Description
This function returns a total number of available gain levels in a camera.
Different camera models may have different gain level settings. This function can be used to check the number of available gain levels.
Function Input
Camera index (int)
Function Output
Number of gain levels available (int)
C++ Example
//== Checking number of gain levels ==//
for (int i = 0; i < CameraCount(); i++)
{
printf("%ls camera has %d gain levels\n", CameraSerial(i),CameraImagerGainLevels(i));
}
Camera Masking
In this section:
ClearCameraMask | SetCameraMask | CameraMask | CameraMaskInfo | AutoMaskAllCameras | SetCameraState | CameraState | CameraID | CameraFrameBuffer | CameraFrameBufferSaveAsBMP | CameraBackproject | CameraUndistort2DPoint | CameraDistort2DPoint | CameraRay | SetCameraPose | GetCamera
ClearCameraMask
Clears masking from camera's 2D view.
bool ClearCameraMask(int cameraIndex);
Description
This function clears existing masks from the 2D camera view.
Returns true when it successfully removes pixel masks.
Function Input
Camera index (int)
Function Output
True / False (bool)
C++ Example
//== Clearing existing masks for all cameras ==//
int totalCamera = CameraCount();
for (int i = 0; i < totalCamera; i++)
{
ClearCameraMask(i);
}
SetCameraMask
bool SetCameraMask( int cameraIndex, unsigned char* buffer, int bufferSize );
Description
This function allows a user-defined image mask to be applied to a camera.
A mask is an array of bytes, one byte per mask pixel block.
Returns true when masks are applied.
Function Input
Camera index (int)
Buffer
BufferSize
Function Output
True / False (bool)
C++ Example
unsigned char* maskBuffer = nullptr;
int bufferSize = 0;
int cameraCount = CameraCount();
// Retrieve the mask for each camera, perform a simple edit on it, then set it.
for( int i = 0; i < cameraCount; ++i )
{
int maskWidth;
int maskHeight;
int maskGrid;
// Mask dimensions for the camera.
CameraMaskInfo( i, maskWidth, maskHeight, maskGrid );
int newBufferSize = maskWidth * maskHeight;
if( bufferSize < newBufferSize )
{
delete[] maskBuffer;
maskBuffer = new unsigned char[newBufferSize];
bufferSize = newBufferSize;
}
// Retrieve the mask now that the receiving buffer is correctly sized.
CameraMask( i, maskBuffer, bufferSize );
// Add a mask 'pixel' in the approximate center of the image.
// Each pixel is actually a grid of maskGrid size.
int pixelIndex = ( maskHeight / 2 ) * maskWidth + ( maskWidth / 2 );
maskBuffer[pixelIndex] = 1; // Any non-zero value for the byte will do.
// Set the mask image on the camera.
SetCameraMask( i, maskBuffer, bufferSize );
}
CameraMask
bool CameraMask(int cameraIndex, unsigned char* buffer, int bufferSize);
Description
This function returns the memory block of the mask.
One bit per a pixel of the mask.
Masking pixels are rasterized from left to right and from top to bottom of the camera's view.
Function Input
Camera index (int)
Buffer
Buffer size
Function Output
True / False (bool)
C++ Example
unsigned char* maskBuffer = nullptr;
int bufferSize = 0;
int cameraCount = CameraCount();
// Retrieve the mask for each camera, perform a simple edit on it, then set it.
for( int i = 0; i < cameraCount; ++i )
{
int maskWidth;
int maskHeight;
int maskGrid;
// Mask dimensions for the camera.
CameraMaskInfo( i, maskWidth, maskHeight, maskGrid );
int newBufferSize = maskWidth * maskHeight;
if( bufferSize < newBufferSize )
{
delete[] maskBuffer;
maskBuffer = new unsigned char[newBufferSize];
bufferSize = newBufferSize;
}
// Retrieve the mask now that the receiving buffer is correctly sized.
CameraMask( i, maskBuffer, bufferSize );
// Add a mask 'pixel' in the approximate center of the image.
// Each pixel is actually a grid of maskGrid size.
int pixelIndex = ( maskHeight / 2 ) * maskWidth + ( maskWidth / 2 );
maskBuffer[pixelIndex] = 1; // Any non-zero value for the byte will do.
// Set the mask image on the camera.
SetCameraMask( i, maskBuffer, bufferSize );
}
CameraMaskInfo
bool CameraMaskInfo(int cameraIndex, int& blockingMaskWidth, int& blockingMaskHeight, int& blockingMaskGrid);
Description
This function retrieves the width, height, and grid size of the mask for the camera at the given index.
One byte per pixel of the mask. Masking width * masking height gives the required size of the buffer.
Returns true when the information is successfully obtained and saved.
Function Input
Camera index (int)
Declared variables:
Masking width (int)
Masking height (int)
Masking grid (int)
Function Output
True / False (bool)
C++ Example
unsigned char* maskBuffer = nullptr;
int bufferSize = 0;
int cameraCount = CameraCount();
// Retrieve the mask for each camera, perform a simple edit on it, then set it.
for( int i = 0; i < cameraCount; ++i )
{
int maskWidth;
int maskHeight;
int maskGrid;
// Mask dimensions for the camera.
CameraMaskInfo( i, maskWidth, maskHeight, maskGrid );
int newBufferSize = maskWidth * maskHeight;
if( bufferSize < newBufferSize )
{
delete[] maskBuffer;
maskBuffer = new unsigned char[newBufferSize];
bufferSize = newBufferSize;
}
// Retrieve the mask now that the receiving buffer is correctly sized.
CameraMask( i, maskBuffer, bufferSize );
// Add a mask 'pixel' in the approximate center of the image.
// Each pixel is actually a grid of maskGrid size.
int pixelIndex = ( maskHeight / 2 ) * maskWidth + ( maskWidth / 2 );
maskBuffer[pixelIndex] = 1; // Any non-zero value for the byte will do.
// Set the mask image on the camera.
SetCameraMask( i, maskBuffer, bufferSize );
}
AutoMaskAllCameras
Auto-mask all cameras with additional masking data.
void AutoMaskAllCameras();
Description
Auto-mask all cameras.
This is additive to any existing masking.
To clear masks on a camera, call ClearCameraMask prior to auto-masking.
Function Input
none
Function Output
Auto masks all cameras
SetCameraState
Sets the state for a camera.
bool SetCameraState(int cameraIndex, eCameraState state);
Description
This function configures the camera state of a camera. Different camera states are defined in the eCameraState enumeration.
Returns true when it successfully sets the camera state.
enum eCameraState
{
Camera_Enabled = 0,
Camera_Disabled_For_Reconstruction = 1,
Camera_Disabled = 2,
};
Function Input
Camera index (int)
Camera state (eCameraState)
Function Output
True / False (bool)
C++ Example
int totalCamera = CameraCount();
//== Disabling all of the cameras from contributing to reconstruction ==//
for (int i = 0; i < totalCamera; i++)
{
SetCameraState(i, Camera_Enabled);
}
CameraState
Retrieves the current participation state of a camera.
bool CameraState(int cameraIndex, eCameraState& currentState);
Camera_Enabled
0
Camera_Disabled_For_Reconstruction
1
Camera_Disabled
2
Description
This function obtains and saves the camera state of a camera onto the declared variables.
Returns true if it successfully saves configured state.
Function Input
Camera index (int)
Declared variable for camera state (eCameraState)
Function Output
True / False (bool)
C++ Example
//== Checking Camera Status ==//
int totalCamera = CameraCount();
eCameraStates cameraState;
for (int i = 0; i < totalCamera; i++)
{
//== Checking the Camera Status ==//
CameraState(i, cameraState);
if (cameraState == 0) {
printf("Camera #%d State: Camera_Enabled\n", i);
}
else if (cameraState == 1)
{
printf("Camera #%d State: Camera_Disabled_For_Reconstruction\n",i );
}
else if (cameraState == 2)
{
printf("Camera #%d State: Camera_Disabled\n", i);
}
}
CameraID
Returns the Camera ID.
int CameraID(int cameraIndex);
Description
This function takes in a camera index number and returns the camera ID number.
Camera ID numbers are the numbers that are displayed on the devices.
The Camera ID number is different from the camera index number.
On Prime camera systems, Camera IDs are assigned depending on where the cameras are positioned within the calibrated volume.
On Flex camera systems, Camera IDs are assigned according to the order in which devices connected to the OptiHub(s).
Function Input
Camera index (int)
Function Output
Camera ID (int)
C++ Example
int totalCamera = CameraCount();
for(int i = 0; i < totalCamera; i++){
// Listing Camera Serial, index, and ID
printf("Camera %d:\tIndex:%d\tID:%d\n", CameraSerial(i), i, CameraID(i));
}
CameraFrameBuffer
Fills a buffer with images from camera's view.
bool CameraFrameBuffer(int cameraIndex, int bufferPixelWidth, int bufferPixelHeight, int bufferByteSpan, int bufferPixelBitDepth, unsigned char* buffer);
Description
This function fetches raw pixels from a single frame of a camera and fills the provided memory block with the frame buffer.
The resulting image depends on which video mode the camera is in. For example, if the camera is in grayscale mode, a grayscale image will be saved from this function call.
For obtaining buffer pixel width and height, you can use the CameraNodeImagerPixelSize property to obtain respective camera resolution.
Byte span: Byte span is the number of bytes for each row of the frame. In a case of 8-bit pixel images (one byte per pixel), the number of pixels in the frame width will equal to the byte size of the span.
Buffer pixel bit depth: Pixel bit size for the image buffer that will be stored in the memory. If the imagers on the OptiTrack cameras capture 8-bit grayscale pixels, you will need to input 8 for this input.
Buffer: make sure enough memory is allocated for the frame buffer. A frame buffer will require memory of at least (Byte span * pixel height * Bytes per pixel) bytes. For example, on a 640 x 480 image with 8-bit black and white pixels, you will need (640 * 480 * 1) bytes allocated for the frame buffer.
Returns true if it successfully saves the image in the buffer.
Function Input
Camera index (int)
Buffer pixel width (int)
Buffer pixel height (int)
Buffer byte span (int)
Buffer pixel bit depth (int)
Buffer address (unsigned char*)
Function Output
True / False (bool)
C++ Example
// Sample code for saving frame buffer from a camera (index 0)
int cameraIndex = 0;
int reswidth;
int resheight;
int bytespan;
// Obtaining pixel resolution
CameraPixelResolution(cameraIndex, reswidth, resheight);
printf("Camera #%d:\tWidth:%d\tHeight:%d\n", i, reswidth, resheight);
// Defining span size of the buffer
bytespan = reswidth;
// Allocating memory block for the buffer
unsigned char* frameBuffer = (unsigned char*)std::malloc(bytespan*resheight*1);
bool result = CameraFrameBuffer(cameraIndex, reswidth, resheight, bytespan, 8, frameBuffer);
if (result == true)
{
printf("Frame Buffer Saved.");
}
CameraFrameBufferSaveAsBMP
Saves image buffer of a camera into a BMP file.
bool CameraFrameBufferSaveAsBMP(int cameraIndex, const wchar_t* filename);
Description
This function saves image frame buffer of a camera into a BMP file.
Video type of the saved image depends on configured camera settings
Attaches *.bmp at the end of the filename.
Returns true if it successfully saves the file.
Function Input
Camera index (int)
Filename (const wchar_t*)
Function Output
True / False (bool)
C++ Example
int cameraCount = CameraCount();
std::vector<std::string> filenames(cameraCount);
for (int i = 0; i < cameraCount; ++i)
{
filenames[i] = "camera" + std::to_string(i) + ".bmp";
CameraFrameBufferSaveAsBMP(i, filenames[i].c_str());
}
CameraBackproject
Obtains the 2D position of a 3D marker as seen by one of the cameras.
void CameraBackproject(int cameraIndex, float x, float y, float z, float& cameraX, float& cameraY);
Description
This function reverts 3D data into 2D data. If you input a 3D location (in meters) and a camera, it will return where the point would be seen from the 2D view of the camera (in pixels) using the calibration information. In other words, it locates where in the camera's FOV a point would be located.
If a 3D marker is reconstructed outside of the camera's FOV, saved 2D location may be beyond the camera resolution range.
Respective 2D location is saved in the declared X-Y address, in pixels.
Function Input
Camera index (int)
3D x-position (float)
3D y-position (float)
3D z-position (float)
Declared variable for x and y location from camera's 2D view (float)
Function Output
Void
CameraUndistort2DPoint
Removes lens distortion.
void CameraUndistort2DPoint(int cameraIndex, float& x, float& y);
Description
This function removes the effect of the lens distortion filter and obtains undistorted raw x and y coordinates (as seen by the camera) and saves the data in the declared variables.
Lens distortion is measured during the camera calibration process.
If you want to re-apply the lens distortion filter, use the
CameraDistort2DPoint
function.
Function Input
Camera index (int)
Declared variables for x and y position in respect to camera's view (float)
Function Output
Void
C++ Example
// Reflection detected at (125, 213) from 2D view of a camera 1.
int x = 125;
int y = 213;
int cameraIndex = 1;
// Saving raw, undistorted, coordinates as seen by the imager
CameraUndistort2DPoint(cameraIndex, x, y);
CameraDistort2DPoint
Reapplies the lens distortion model.
void CameraDistort2DPoint(int cameraIndex, float& x, float& y);
Description
This function restores the default model for accommodating effects of the camera lens.
Note all reported 2D coordinates are already distorted to accommodate for effects of the camera lens. Use the
CameraUndistort2DPoint
function when working with coordinates that are undistorted .This can be used to obtain raw data for 2D points that have been undistorted using the CameraUndistort2DPoint function.
Function Input
Camera index (int)
Declared variables for x and y position in respect to camera's view (float)
Function Input
Void
C++ Example
// Reflection detected at (125, 213) from 2D view of a camera 1.
int x = 125;
int y = 213;
int cameraIndex = 1;
// Saving raw, undistorted, coordinates as seen by the imager.
CameraUndistort2DPoint(cameraIndex, x, y);
// Process undistorted x y coordinates..
// Apply the distortion back again
CameraDistort2DPoint(cameraIndex, x, y);
CameraRay
Obtains 3D vector from a camera to a 3D point.
bool CameraRay(int cameraIndex, float x, float y,
float& rayStartX, float& rayStartY, float& rayStartZ,
float& rayEndX, float& rayEndY, float& rayEndZ);
Description
This function takes in an undistorted 2D centroid location seen by a camera's imager and creates a 3D vector ray connecting the point and the camera.
Use
CameraUndistort2DPoint
to undistort the 2D location before obtaining the 3D vector.XYZ locations of both the start point and end point are saved into the referenced variables.
Returns true when it successfully saves the ray vector components.
Function Input
Camera index (int)
x location, in pixels, of a centroid (float)
y location, in pixels, of a centroid (float)
Three reference variables for X/Y/Z location, in meters, of the start point (float)
Three reference variables for X/Y/Z location, in meters, of the end point (float)
Function Output
True / False (bool)
C++ Example
//== Obtaining a 3D vector for centroid detected at (100, 300) on a camera's 2D imager ==//
int targetcam = 0;
float rayStartX, rayStartY, rayStartZ; //meters
float rayEndX, rayEndY, rayEndZ; //meters
float x = 100; //pixels
float y = 300; //pixels
CameraUndistort2DPoint(targetcam, x, y);
CameraRay(targetcam, x, y, rayStartX, rayStartY, rayStartZ, rayEndX, rayEndY, rayEndZ);
SetCameraPose
Sets the camera's extrinsics for the OpenCV intrinsic model.
bool SetCameraPose (int cameraIndex, float x, float y, float z, const float* orientation);
Description
This function sets camera's extrinsic (position & orientation) and intrinsic (lens distortion) parameters with values compatible with the OpenCV intrinsic model.
Returns true if the operation was successful.
Function Input
Camera index (int)
Three arguments for camera x,y,z position, in meters, within the global space (float)
Camera orientation (3x3 orientation matrix)
Function Output
True / False (bool)
GetCamera
Retrieves a CameraLibrary camera object from Camera SDK.
std::shared_ptr<CameraLibrary::Camera> GetCamera(int cameraIndex);
Description
This function returns a pointer to the Camera SDK's camera pointer.
While the API takes over the data path which prohibits fetching the frames directly from the camera, it is still very useful to be able to communicate with the camera directly for setting camera settings or attaching modules.
The Camera SDK must be installed to use this function.
Camera SDK libraries and the camera library header file (cameralibrary.h) must be included.
Returns Camera SDK Camera.
Function Input
Camera index (int)
Function Output
Camera SDK camera pointer (CameraLibrary::Camera)
C++ Example
CameraLibrary::Camera *cam = GetCameraManager();
// cam is declared as a pointer to a camera object used in conjuction with the Camera SDK
Additional Functionality
In this section:
AttachCameraModule / DetachCameraModule | OrientTrackingBar |
AttachCameraModule / DetachCameraModule
Attaches/detaches cCameraModule instance to a camera object.
bool AttachCameraModule(int cameraIndex, CameraLibrary::cCameraModule *module);
bool DetachCameraModule(int cameraIndex, CameraLibrary::cCameraModule* module);
Description
This function attaches/detaches the cCameraModule class to a camera defined by its index number.
This function requires the project to be compiled against both the Motive API and the Camera SDK.
The cCameraModule class is inherited from the Camera SDK, and this class is used to inspect raw 2D data from a camera. Use this function to attach the module to a camera. For more details on the cCameraModule class, refer to the cameramodulebase.h header file from the Camera SDK.
The Camera SDK must be installed.
Function Input
Camera index (int)
cCameraModule instance (CameraLibrary::cCameraModule)
Function Output
Returns true if successful
OrientTrackingBar
Changes position and orientation of the tracking bars.
eRESULT OrientTrackingBar(float positionX, float positionY, float positionZ,
float orientationX, float orientationY, float orientationZ, float orientationW);
Description
This function makes changes to the position and orientation of the tracking bar within the global space.
Note that this function will shift or rotate the entire global space, and the effects will be reflected in other tracking data as well.
By default, the center location and orientation of a Tracking bar (Duo/Trio) determines the origin of the global coordinate system. Using this function, you can set a Tracking Bar to be placed in a different location within the global space instead of origin.
Function Input
X position (float)
Y position (float)
Z position (float)
Quaternion orientation X (float)
Quaternion orientation Y (float)
Quaternion orientation Z (float)
Quaternion orientation W (float)
Function Output
eRESULT
C++ Example
//== Changing position and orientation of a tracking bar within the global space. ==//
OrientTrackingBar(10, 10, 10, 0.5, 0.5, 0.5, 0.5);
Camera Manager Access
In this section:
CameraManager
When using the Motive API in conjunction with the Camera SDK, this method will provide access to the manager class that owns all Camera instances. From here, many system state properties can be set or queried, cameras can be queried or edited, etc.
CameraLibrary::CameraManager* CameraManager();
Description
This function returns a pointer to the CameraManager instance from the Camera SDK.
If a CameraManager instance is not found, MotiveAPI will create a new one.
Camera SDK must be installed to use this function.
The version number of Motive and the Camera SDK must match.
Corresponding headers and libraries must be included in the program.
Function Input
None
Function Output
Pointer to the CameraManager instance (CameraLibrary::CameraManager*)
C++ Example
// cameraManager is declared as a pointer to a CameraLibrary::CameraManager
// used in conjuction with the Camera SDK
CameraLibrary::CameraManager *cameraManager = CameraManager();
API Callbacks
In this section:
AttachListener / DetachListener
AttachListener / DetachListener
Attaches/detaches cAPIListener
onto an API project.
void AttachListener(cAPIListener* listener);
void DetachListener();
Description
This function attaches/detaches a
cAPIListener
inherited class onto an API project.The
cAPIListener
class uses the C++ inheritance design model. Inherit this class into your project with the same function and class names, then attach the inherited class.This listener class includes useful callback functions that can be overridden. Including APIFrameAvailable, APICameraConnected, APICameraDisconnected, InitialPointCloud, ApplyContinuousCalibrationResult.
Function Input
cAPIListener
Function Output
Void
Result Processing
In this section:
MapToResultString
Returns the plain text message that corresponds to an eRESULT value.
const std::wstring MapToResultString( eResult result );
Description
Returns the plain text message that corresponds to a result that an eRESULT value indicates.
Function Input
eRESULT
Function Output
Result text (const std::wstring)
C++ Example
//== Sample Check Result Function (marker.cpp) ==//
void CheckResult( eRESULT result )
{
if( result != kApiResult_Success )
{
//== Treat all errors as failure conditions. ==//
printf( "Error: %ls\n\n(Press any key to continue)\n", MapToResultString(result) );
Sleep(20);
exit(1);
}
}
Last updated
Was this helpful?