Main Content

Pass Variables from MATLAB to C++

These examples show how to pass variables from the MATLAB® base or global workspace to your C++ program using the matlab::engine::MATLABEngine getVariable and getVariableAsync member functions. Return the variable to C++ as a matlab::data::Array.

For information on how to setup and build C++ engine programs, see Requirements to Build C++ Engine Applications.

Bring Result of MATLAB Calculation into C++

This example performs a calculation in MATLAB using MATLABEngine::eval and gets the results using MATLABEngine::getVariable.

The MATLAB cart2sph function converts a point in Cartesian coordinates to its representation in spherical coordinates.

#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>

void callgetVars() {
    using namespace matlab::engine;

    // Start MATLAB engine synchronously
    std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();

    // Evaluate MATLAB statement
    matlabPtr->eval(u"[az,el,r] = cart2sph(5,7,3);");

   // Get the result from MATLAB
    matlab::data::TypedArray<double> result1 = matlabPtr->getVariable(u"az");
    matlab::data::TypedArray<double> result2 = matlabPtr->getVariable(u"el");
    matlab::data::TypedArray<double> result3 = matlabPtr->getVariable(u"r");

    // Display results
    std::cout << "az: " << result1[0] << std::endl;
    std::cout << "el: " << result2[0] << std::endl;
    std::cout << "r: " << result3[0] << std::endl;
}

Get MATLAB Objects and Access Properties

Use the matlab::engine::MATLABEngine getVariable or getVariableAsync member functions to get MATLAB object variables. Return the object to C++ as a matlab::data::Array. Access object properties using the matlab::engine::MATLABEngine getProperty or getPropertyAsync member functions.

This example creates a MATLAB figure object and returns the object handle to C++. Values of the figure Units property are always character arrays. Therefore, to query the figure Units property, return a matlab::data::CharArray with the value of the figure property (default value is pixels).

#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>

void callgetVariables() {
    using namespace matlab::engine;

    // Start MATLAB engine synchronously
    std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();

    // Create figure window
    matlabPtr->eval(u"figureHandle = figure;");

    //Get figure handle and Units property
    matlab::data::Array figHandle = matlabPtr->getVariable(u"figureHandle");
    matlab::data::CharArray units = matlabPtr->getProperty(figHandle, u"Units");

    // Display property value
    std::cout << "Units property: " << units.toAscii() << std::endl;
}

Get Property from Object Array

If the object variable is an array of objects, call getProperty or getPropertyAsync with the index of the object in the array that you want to access. For example, to get the value of the Units property of the fourth element in the object array, objectArray, specify the index as the second input argument.

matlab::data::CharArray units = matlabPtr->getProperty(objectArray, 3, u"Units");

Set Property on MATLAB Object

This example shows how to set the value of a MATLAB object property from C++ using the matlab::engine::MATLABEngine setProperty or setPropertyAsync member functions. To access the object property, you can get the object variable from the MATLAB workspace and set the value on the C++ variable. The property value that you set updates the object in the MATLAB workspace.

You can also return an object from a call to MATLABEngine::feval and MATLABEngine::fevalAsync and set property values on that object.

This example creates a MATLAB figure object and returns the object to C++. The code sets the figure Color property to red, which changes the value of the property on the object in the MATLAB workspace.

Because the value of the Color property is a char array, use the matlab::data::ArrayFactory to create a matlab::data::CharArray to define the new value.

void getObject() {
    using namespace matlab::engine;

    // Start MATLAB engine synchronously
    std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();

    //Create MATLAB data array factory
    matlab::data::ArrayFactory factory;

    // Create figure window
    size_t numArguments(1);
    std::vector<matlab::data::Array> figureHandle = matlabPtr->feval(u"figure", numArguments, {});

    // Pause to display the figure
    matlabPtr->eval(u"pause(5)");

    // Set the Color property to red
    matlabPtr->setProperty(figureHandle[0], u"Color", factory.createCharArray("red"));
    matlabPtr->eval(u"pause(10)");
}

Set Property from Object Array

If the object variable is an array of objects, call setProperty or setPropertyAsync with the index of the object in the array that you want to access. For example, to set the value of the Color property of the fourth element in the object array, objectArray, specify the index as the second input argument.

matlabPtr->setProperty(objectArray, 3, u"Color", factory.createCharArray("red"));

See Also

|

Related Topics