MATLAB から C++ への変数の引き渡し
次の例では、matlab::engine::MATLABEngine のメンバー関数getVariableとgetVariableAsyncを使用して、MATLAB® ベースまたはグローバル ワークスペースから C++ プログラムに変数を渡す方法を説明します。matlab::data::Array として変数を C++ に返します。
C++ エンジン プログラムを設定およびビルドする方法の詳細については、Requirements to Build C++ Engine Applicationsを参照してください。
C++ への MATLAB 計算結果の取り込み
この例では、MATLABEngine::eval を使用して MATLAB で計算を実行し、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 オブジェクトの取得とプロパティへのアクセス
matlab::engine::MATLABEngine のメンバー関数getVariableまたはgetVariableAsyncを使用して、MATLAB オブジェクト変数を取得します。オブジェクトを matlab::data::Array として C++ に返します。matlab::engine::MATLABEngine のメンバー関数getPropertyまたはgetPropertyAsyncを使用して、オブジェクトのプロパティにアクセスします。
この例では、MATLAB の figure オブジェクトを作成してオブジェクト ハンドルを C++ に返します。figure の Units プロパティの値は常に文字配列になります。したがって、figure の Units プロパティをクエリするには、figure プロパティの値 (既定値は pixels) を指定して matlab::data::CharArray を返します。
#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 を呼び出します。たとえば、オブジェクト配列 objectArray の 4 番目の要素における Units プロパティの値を取得するには、2 番目の入力引数にインデックスを指定します。
matlab::data::CharArray units = matlabPtr->getProperty(objectArray, 3, u"Units");MATLAB オブジェクトでのプロパティの設定
この例では、matlab::engine::MATLABEngine のメンバー関数setPropertyまたはsetPropertyAsyncを使用して、C++ から MATLAB オブジェクトのプロパティ値を設定する方法を説明します。オブジェクトのプロパティにアクセスするには、MATLAB ワークスペースからオブジェクト変数を取得し、値を C++ 変数に設定します。MATLAB ワークスペースのオブジェクトは、設定するプロパティ値で更新されます。
MATLABEngine::feval および MATLABEngine::fevalAsync への呼び出しからオブジェクトを返し、そのオブジェクトのプロパティ値を設定することもできます。
この例では、MATLAB の figure オブジェクトを作成し、オブジェクトを C++ に返します。コードは figure の Color プロパティを red に設定します。これにより、MATLAB ワークスペースのオブジェクトのプロパティ値が変更されます。
Color プロパティの値は char 配列であるため、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 を呼び出します。たとえば、オブジェクト配列 objectArray の 4 番目の要素における Color プロパティの値を設定するには、2 番目の入力引数にインデックスを指定します。
matlabPtr->setProperty(objectArray, 3, u"Color", factory.createCharArray("red"));参考
matlab::engine::MATLABEngine | matlab::engine::startMATLAB