我想逐步访问名为'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
更新
为了完整性,我通过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
答案 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]
然后解析结果。