MATLAB から C++ への変数の引き渡し
matlab::engine::MATLABEngine
のメンバー関数getVariableとgetVariableAsyncを使用して、MATLAB® ベースまたはグローバル ワークスペースから C++ プログラムに変数を渡します。matlab::data::Array
として変数を C++ に返します。
C++ エンジン プログラムを設定およびビルドする方法の詳細については、C++ エンジン プログラムのビルド要件を参照してください。
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 オブジェクトのプロパティ値を C++ から設定するには、matlab::engine::MATLABEngine
のメンバー関数setPropertyまたはsetPropertyAsyncを使用します。オブジェクトのプロパティにアクセスするには、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