Объекты-дескрипторы MATLAB ® являются экземплярами handle класс. Доступ к объектам-дескрипторам MATLAB позволяет задавать значения общих свойств для этих объектов. Например, все графические объекты MATLAB и объекты пользовательского интерфейса являются объектами обработки.
HandleObject КлассИспользуйте com.mathworks.matlab.types.HandleObject для представления объектов-дескрипторов, возвращенных из MATLAB в Java ®. Вы можете пройти HandleObject экземпляр только для сеанса MATLAB, в котором он был создан. Невозможно создать HandleObject на языке Java.
MATLAB plot функция возвращает объекты-дескрипторы, ссылающиеся на строки на графике. Используйте эти маркеры с set для изменения внешнего вида графика путем изменения свойств линий.
В этом примере в MATLAB выполняются следующие вызовы функций:
% Create a 2-by-3 array of doubles data = [1,2,3;-1,-2,-3]; % Plot the data and return the line handles h = plot(data); % Set the line width to 2 points set(h,'LineWidth',2); % Pause for 5 seconds, just to see the result pause(5)
Код Java использует следующие шаги для выполнения кода MATLAB, как описано ниже:
Создание 2D double массив называется data.
Бросьте data массив в Object поэтому MATLAB интерпретирует массив как один аргумент для plot.
Вернуть HandleObject множество h из MATLAB с дескрипторами линий.
Вызовите MATLAB set для установки LineWidth свойство строки имеет значение 2.0. Преобразование имени LineWidth свойство из String в char[] потому что set функция требует, чтобы имена свойств были MATLAB char массивы.
Пауза для 5 секунд, а затем закройте модуль MATLAB.
import com.mathworks.engine.*;
import com.mathworks.matlab.types.*;
public class PassHandleObject {
public static void main(String[] args) throws Exception {
MatlabEngine eng = MatlabEngine.startMatlab();
double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}};
HandleObject[] h = eng.feval("plot", (Object) data);
String lw = ("LineWidth");
eng.feval(0, "set", h, lw.toCharArray(), 2.0);
eng.eval("pause(5)");
eng.close();
}
}