Передача переменных от MATLAB до C++

Передайте переменные из основы MATLAB® или глобальной рабочей области к вашей программе C++ с помощью matlab::engine::MATLABEngine getVariable и getVariableAsync функций членства. Возвратите переменную в C++ как matlab::data::Array.

Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.

Обеспечение результата вычисления MATLAB на 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;
}

Get MATLAB Objects and Access Properties

Используйте 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

Чтобы установить значение свойства объекта 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"));

Смотрите также

|

Похожие темы