Передача переменных из базовой или глобальной рабочей области MATLAB ® в программу C++ с помощью matlab::engine::MATLABEngine
функции-члены getVariiveAsync и getVariityAsync. Возврат переменной к C++ в виде matlab::data::Array.
Сведения о настройке и сборке программ ядра C++ см. в разделе Сборка программ ядра C++.
Этот пример кода выполняет вычисление в MATLAB с использованием MATLABEngine::eval и получает результаты с помощью MATLABEngine::getVariable.
MATLAB cart2sph функция преобразует точку в декартовых координатах в ее представление в сферических координатах.
#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;
}Используйте matlab::engine::MATLABEngine
getVariable или getVariityAsync, чтобы получить переменные объекта MATLAB. Вернуть объект в C++ в виде matlab::data::Array. Доступ к свойствам объекта с помощью matlab::engine::MATLABEngine
getProperty или функции-члены getPropertyAsync.
Этот пример кода создает MATLAB figure и возвращает дескриптор объекта в C++. Значения фигуры Units свойства всегда являются массивами символов. Поэтому для запроса фигуры Units свойство, вернуть matlab::data::CharArray со значением свойства фигуры (значение по умолчанию: 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;
}Если переменная объекта является массивом объектов, вызовите getProperty или getPropertyAsync с индексом объекта в массиве, к которому требуется получить доступ. Например, чтобы получить значение Units свойство четвертого элемента в массиве объектов, objectArrayукажите индекс в качестве второго входного аргумента.
matlab::data::CharArray units = matlabPtr->getProperty(objectArray, 3, u"Units");
Чтобы задать значение свойства объекта MATLAB из C++, используйте matlab::engine::MATLABEngine
setProperty или функция-член setPropertyAsync. Чтобы получить доступ к свойству объекта, можно получить переменную объекта из рабочей области MATLAB и задать значение для переменной C++. Заданное значение свойства обновляет объект в рабочей области MATLAB.
Можно также вернуть объект из вызова MATLABEngine::feval и MATLABEngine::fevalAsync и задайте значения свойств для этого объекта.
Этот пример кода создает MATLAB figure и возвращает объект в C++. Код задает рисунок Color свойство для red, которая изменяет значение свойства объекта в рабочей области MATLAB.
Потому что значение Color свойство является массивом символов, используйте matlab::data::ArrayFactory для создания matlab::data::CharArray для определения нового значения.
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)");
}Если переменная объекта является массивом объектов, вызовите setProperty или setPropertyAsync с индексом объекта в массиве, к которому требуется получить доступ. Например, чтобы задать значение Color свойство четвертого элемента в массиве объектов, objectArrayукажите индекс в качестве второго входного аргумента.
matlabPtr->setProperty(objectArray, 3, u"Color", factory.createCharArray("red"));matlab::engine::MATLABEngine | matlab::engine::startMATLAB