如何在 Simulink Scope 中以编程方式“打印到图形”
Posted
技术标签:
【中文标题】如何在 Simulink Scope 中以编程方式“打印到图形”【英文标题】:How to programmatically 'Print to figure' in a Simulink Scope 【发布时间】:2016-06-13 13:42:15 【问题描述】:在 Simulink Scope
中,可以选择 Print to Figure
。这将打开一个与原始范围具有相同内容的图形。有没有办法以编程方式执行此操作?
另请参阅this help page、this help page 和 this page。
【问题讨论】:
【参考方案1】:取决于您想要/需要获得的花哨程度。
如果您真的想使用与 UI 回调完全相同的代码,那么您需要研究如何使用以下目录/包中的回调函数:
MATLABROOT\toolbox\shared\spculib+matlabshared+scopes\@UnifiedScope
特别是,printToFigureCallback.m
是回调调用的代码。 (您可以在代码中放置断点,并使用调试器单步执行代码以查看其工作原理。)
看起来像下面这样的东西应该可以工作,但事实并非如此,因此您需要进行一些试错调查才能使其正常工作。
% Get the name of the Scope of interest
scopeName = get_param(gcb,'Name');
% Find the Scope (which is really just a figure window)
hs = findall(0,'Name',scopeName);
% Print to a figure.
printToFigureCallback(h.UserData)
另外,一个更简单但可能不太令人满意的解决方案是执行以下操作:
% Get the name of the Scope of interest
scopeName = get_param(gcb,'Name');
% Find the Scope (which is really just a figure window)
hs = findall(0,'Name',scopeName);
% Create a new target figure
hf = figure('Position',get(hs,'Position'));
% Get the handle to the panel containing the plots
hp = findobj(hs.UserData.Parent,'Tag','VisualizationPanel');
% Copy the panel to the new figure
copyobj(hp,hf)
然后,根据您的要求,您可能需要使用一些单位来确保调整图形大小是正确的。
【讨论】:
对于我的应用程序,以编程方式打印图形似乎有点过头了。感谢您提供这些有趣的信息,我可能会在其他情况下使用它。 第一个确实给出了一个错误(“未定义函数 'printToFigureCallback' 用于类型为'double'的输入参数。”),但第二个正是我想要的。以上是关于如何在 Simulink Scope 中以编程方式“打印到图形”的主要内容,如果未能解决你的问题,请参考以下文章
Matlab/Simulink仿真中如何将Scope转化为Figure?