Передайте переменные из основы MATLAB® или глобальной рабочей области к вашей программе C++ с помощью matlab::engine::MATLABEngine
getVariable и getVariableAsync функций членства. Возвратите переменную в C++ как matlab::data::Array
.
Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.
Этот пример кода выполняет вычисление в MATLAB с помощью MATLABEngine::eval
и получает результаты с помощью MATLABEngine::getVariable
.
Функция cart2sph
MATLAB преобразовывает точку в Декартовых координатах к ее представлению в сферических координатах.
#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 или getVariableAsync функции членства, чтобы получить переменные объекта 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