我有一个Matlab脚本,可为我在文本文件中找到的每个元素创建一个模型块。
问题在于所有模型都在窗口中彼此创建。所以我试图做一个像这样的循环:
for each element in text file
I add a Model block
I place right to the previous one
end
如您在左侧看到的那样,所有模型都位于彼此之间,我想将它们放置在右侧。
我尝试过:
m = mdlrefCountBlocks(diagrammeName)+500;
add_block('simulink/Ports & Subsystems/Model',[diagrammeName '/' component_NameValue]);
set_param(sprintf('%s/%s',diagrammeName,component_NameValue), 'ModelFile',component_NameValue);
size_blk = get_param(sprintf('%s/%s',diagrammeName,component_NameValue),'Position');
X = size_blk(1,1);
Y = size_blk(1,2);
Width = size_blk(1,3);
Height = size_blk(1,4);
set_param(sprintf('%s/%s',diagrammeName,component_NameValue),'Position',[X+m Y X+Width Y+Height]);
在循环内部,但返回错误Invalid definition of rectangle. Width and height should be positive.
感谢您的帮助!
答案 0 :(得分:3)
块的position属性实际上并不包含其宽度和高度,而是画布上角的位置(请参见Common Block Properties):
坐标矢量,以像素为单位:
[left top right bottom]
原点是Simulink Editor画布在调整画布大小之前的左上角。支持的坐标在-1073740824和1073740823之间(含)。正值位于原点的右侧和下方。负值位于原点的左侧和上方。
因此将您的代码更改为例如:
size_blk = get_param(sprintf('%s/%s',diagrammeName,component_NameValue),'Position');
set_param(sprintf('%s/%s',diagrammeName,component_NameValue),'Position', size_blk + [m 0 0 0]);