Using MATLAB Structures in Java
MATLAB Structures
MATLAB® structures contain data and references it using field names. Each
field can contain any type of data. MATLAB code accesses data in a structure using dot notation of the form
structName.fieldName
. The class of a MATLAB structure is struct
.
The Java®
com.mathworks.matlab.types.Struct
class enables you to:
Create a
Struct
in Java and pass it to MATLAB.Create a MATLAB
struct
and return it to Java.
The com.mathworks.matlab.types.Struct
class implements the
java.util.Map
interface. However, you cannot change the
mappings, keys, or values of a Struct
returned from MATLAB.
Pass Struct
to MATLAB Function
The MATLAB
set
function sets the properties
of MATLAB graphics objects. To set several properties in one call to
set
, it is convenient to use a MATLAB
struct
. Define this struct
with field names
that match the names of the properties that you want to set. The value referenced by
the field is the value assigned the property.
This example code performs the following steps:
Start MATLAB.
Pass a double array to the MATLAB
plot
function.Return the MATLAB handle object to Java as a
com.mathworks.matlab.types.HandleObject
.Create a
com.mathworks.matlab.types.Struct
using property names and values.Create a MATLAB graph and display it for
5
seconds.Pass the
HandleObject
and theStruct
to the MATLABset
function usingfeval
. This function changes the color and line width of the plotted data.Export the plot to the
jpeg
file namedmyPlot
and closes the engine connection.
import com.mathworks.engine.*;
import com.mathworks.matlab.types.*;
public class CreateStruct {
public static void main(String[] args) throws Exception {
MatlabEngine eng = MatlabEngine.startMatlab();
double[] y = {1.0, 2.0, 3.0, 4.0, 5.0};
HandleObject h = eng.feval("plot", y);
eng.eval("pause(5)");
double[] color = {1.0, 0.5, 0.7};
Struct s = new Struct("Color", color, "LineWidth", 2);
eng.feval("set", h, s);
eng.eval("print('myPlot', '-djpeg')");
eng.close();
}
}
Get Struct from MATLAB
The MATLAB
axes
function creates axes for a
graph and returns a handle object reference. The MATLAB
get
function, when called with one
output, returns a MATLAB
struct
with the properties of the graphics object.
This example code:
Creates a MATLAB graphics object and returns the object handle as a
HandleObject
.Creates a MATLAB structure containing the properties and values of the graphics object and returns it as a
Struct
.Gets the value of the
FontName
property from theStruct
.Attempts to change the value of the
FontName
key, which throws anUnsupportedOperationException
because theStruct
is unmodifiable.
import com.mathworks.engine.*;
import com.mathworks.matlab.types.*;
public class GetStruct {
public static void main(String[] args) throws Exception {
MatlabEngine eng = MatlabEngine.startMatlab();
HandleObject h = eng.feval("axes");
Struct s = eng.feval("get", h);
Object fontName = s.get("FontName");
System.out.println("The font name is " + fontName.toString());
try {
s.put("FontName", "Times");
}catch(UnsupportedOperationException e){
e.printStackTrace();
}
eng.close();
}
}