如何访问Matlab句柄对象子属性:'允许样式'

时间:2014-10-02 17:50:07

标签: matlab matlab-figure

我想逐步访问名为'allowedStyles'的lineseries对象的'MarkerFaceColor'属性的'sub-property'。通过展开“MarkerFaceColor”属性行,可以在Matlab的检查器(inspect(handle))中看到这个“子属性”。

我想做类似以下的事情或者获得相当于这样的命令。 allowedstyles = get(hh,'MarkerFaceColorAllowStyles');

Matlab的Inspect窗口的屏幕截图,显示我寻找的信息。 https://drive.google.com/file/d/0B0n19kODkRpSRmJKbkQxakhBRG8/edit?usp=sharing

Inspection Window

更新

为了完整性,我通过cellstr访问此信息的最终解决方案是编写以下函数。感谢Hoki。

仅供参考,当您想要为诸如MarkerFaceColor之类的属性提供用户选择时,此信息(允许的样式)对于GUI非常有用,在该属性中您不知道他们正在修改的图形对象的类型。我使用这些'allowedStyles'填充列表框以及设置颜色的选项。网格图“MarkerFaceColor”允许样式{'none','auto','flat'},而lineseries图则具有{'none','auto'}。

function out = getAllowedStyles(hh,tag) % hh - handle returned from plot, surf, mesh, patch, etc % tag - the property i.e. 'FaceColor', 'EdgeColor', etc out = []; try aa = java(handle(hh(1))); bb = eval(sprintf('aa.get%s.getAllowedStyles;',tag)); bb = char(bb.toString); bb(1) = []; bb(end) = []; out = strtrim(strsplit(bb,',')); end end

1 个答案:

答案 0 :(得分:3)

我认为它确实是 ReadOnly (或者至少我找不到set属性的正确方法,但它绝对可读。

首先需要访问底层 Java 对象的句柄,然后调用查询属性的方法:

h = plot([0 1]) ;      %// This return the MATLAB handle of the lineseries
hl = java(handle(h)) ; %// this return the JAVA handle of the lineseries
allowedstyles  = hl.getMarkerFaceColor.getAllowedStyles ; %// this return your property :)

请注意,此属性实际上是整数索引。您的inspect窗口会将其转换为一个字符串[none,auto],而在我的配置中,即使检查窗口只显示1

如果您想要其他值的精确字符串转换,则只能调用父方法:

hl.getMarkerFaceColor

这将在控制台窗口中以纯文本显示允许的样式。

ans =
com.mathworks.hg.types.HGMeshColor@28ba43dd[style=none,allowedStyles=[none, auto],red=0.0,green=0.0,blue=0.0,alpha=0.0]

如果您坚持以progamatically方式将此属性作为字符串,那么您可以使用toString方法翻译上述内容。

S = char( hl.getMarkerFaceColor.toString )
S =
com.mathworks.hg.types.HGMeshColor@1ef346e8[style=none,allowedStyles=[none, auto],red=0.0,green=0.0,blue=0.0,alpha=0.0]

然后解析结果。