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 с указателями линии.
Вызовите set
MATLAB функционируйте, чтобы установить
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(); } }