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
matlab::engine::MATLABEngine
| matlab::engine::startMATLAB