![6bb046c468682f5c8af198c4c8a95bf6.png](https://img-blog.csdnimg.cn/img_convert/6bb046c468682f5c8af198c4c8a95bf6.png)
导语
![e325dc96af73d6c46695a2269647b002.png](https://img-blog.csdnimg.cn/img_convert/e325dc96af73d6c46695a2269647b002.png)
今天这个话题是临时起意来写的,事情源于群友的一个问题:
说实话,我也觉得中间就挺好的呀 在中间布局合理,醒目突出,而且符合软件开发人员一般视觉习惯,为什么要改呢?没办法,甲方爸爸和领导们永远是对的,我改!
![6bb046c468682f5c8af198c4c8a95bf6.png](https://img-blog.csdnimg.cn/img_convert/6bb046c468682f5c8af198c4c8a95bf6.png)
修改位置
![e325dc96af73d6c46695a2269647b002.png](https://img-blog.csdnimg.cn/img_convert/e325dc96af73d6c46695a2269647b002.png)
如果顺手加一行属性的话,肯定马上就按照甲方爸爸的要求改动了。可问题是一般我们在Mask中习惯用的disp()函数并没有更多的属性选项,只能键入最基本的一段字符串。
这里我们需要使用另一个函数,text(),比如:
text(2,8,'A Simple Plot','Color','red','FontSize',14)
text函数可以定义很多属性,其中最前面两个就是给定(x,y)坐标。这里就来到了关键点,因为我们在simulink界面建模时候并不知道模块的坐标信息,而且模块也可能需要放大缩小调整,所以这里可以巧妙的使用归一化单位:
在options选项卡中,注意要把图标透明度选为“opaque with ports”,把“icon units”选择为“normalized”。前者可以使得mask后的端口名称依然正常显示出来;后者则可以方便设置text中的位置信息。根据之前那位群友的要求,右下角位置的归一化坐标就是(1,0),于是:
text(1, 0, 'Label Text', 'ver','bottom','horizontalAlignment', 'right')
注意这里要把字符串位置也设置为底部居右显示,进行水平方向上操作的'horizontalAlignment', 'right'很好理解,就是这里属性名太长了,其实可以只输入前3个字母也就是'hor'就可以了,比如上面的代码中垂直方向上便只用了'ver',依然能实现。
可以看到,如此设定后,即便模块被放大了一些,模块名称依然会被固定在右下角显示。
![6bb046c468682f5c8af198c4c8a95bf6.png](https://img-blog.csdnimg.cn/img_convert/6bb046c468682f5c8af198c4c8a95bf6.png)
延伸操作
![e325dc96af73d6c46695a2269647b002.png](https://img-blog.csdnimg.cn/img_convert/e325dc96af73d6c46695a2269647b002.png)
只是做好了甲方爸爸的要求就够了吗?那还怎么能体现自己的创新精神怎么升职加薪呢?比如很明显这里模块名称的字号太小了,想把它搞大一点更醒目一点,于是右键在字体中设置:
很明显,这里的字体设置对模块上全局有效,输入输出端口的字体也跟着变化了,太丑了肯定会被骂。先说一下模块名称的设置:
首先直接对text的fontsize属性作定义是可行的。这里使用一下高级点的骚操作,使用latex格式输入。把text的'texmode'模式打开,然后就可以像latex那样进行编辑,包括各种数学符号和希腊字母等。需要注意的是,此时一般字符串中的转义操作便无效了,比如之前换行的'\n'命令就需要改用'\newline'来操作了。
需要提示的是,这里的设置优先级是高于在右键中的设置的,也就是说此时再通过右键来修改字体字号,仅会对未写入命令行的端口名称起效。
类似的,对于端口名称,一样有专门的函数port_label来编辑,同时也可以激活latex模式:
port_label('input',1,'\color{red}\fontsize{20}\alpha','texmode','on');port_label('output',1,'\color{blue}\fontsize{20}\beta','texmode','on');
需要提示的是,这里的texmode并不能完全覆盖latex语法,比如在matlab中我们可以通过把解释器(interpreter)定义为'latex',比如:
plot(1:10);leg1 = legend('$\bar{x}$','$\tilde{x}$','$\hat{x}$');set(leg1,'Interpreter','latex');set(leg1,'FontSize',17);
但是在simulink中使用text和disp的texmode时,所支持的语法有限(我目前使用的是2019B),感兴趣的朋友可以自行help查看罗列的表格。
![6bb046c468682f5c8af198c4c8a95bf6.png](https://img-blog.csdnimg.cn/img_convert/6bb046c468682f5c8af198c4c8a95bf6.png)
小结
![e325dc96af73d6c46695a2269647b002.png](https://img-blog.csdnimg.cn/img_convert/e325dc96af73d6c46695a2269647b002.png)
罗列一下模块的变化,不得不说领导或者甲方爸爸的要求确实有独到的理解,模型的细节和可读性确实明显的优化了,而且中间部分可以空余出来放一些logo或者icon图标,标题放在右下角显得恰到好处。
领导和甲方爸爸们永远都对!!!
顺势替自己求一波Offer,能改方案,立即改加班改反复改的那种
![cf9c84822b265c5c9075c2b17ed6ae60.gif](https://img-blog.csdnimg.cn/img_convert/cf9c84822b265c5c9075c2b17ed6ae60.gif)
我是Eevee
欢迎关注
迈特实验室
![43f66b502c6305a6a3ffdcc67a4bd336.png](https://img-blog.csdnimg.cn/img_convert/43f66b502c6305a6a3ffdcc67a4bd336.png)
![3eddc709f827592ac68ec59b61e62dcd.png](https://img-blog.csdnimg.cn/img_convert/3eddc709f827592ac68ec59b61e62dcd.png)