小编Dev*_*-iL的帖子

如何在数字中添加"教程消息div"?

安装R2018b后,我打开的第一个数字包含一条有趣的消息(以蓝色显示):

静态图像

它之所以有趣,是因为它包含文本换行,透明度等功能,即使文本调整大小,图像也保持恒定宽度(这让我想起了CSS3 flexbox,因此标签)等等.

动画

动画的最后一部分是慢动作,以更好地显示div的大小如何跟随图形的大小.

如果重要,我正在使用Win 10 v1803.

题:

我想知道我们如何可以得出类似的,定制的,申报单(对于缺乏一个更好的词)在我们的数字.(重要的是要强调这不是一个UIFigure!)


到目前为止我发现了什么:

  • " 了解更多"链接打开页面:

    web(fullfile(docroot, 'matlab/creating_plots/interactively-explore-plotted-data.html'))
    
    Run Code Online (Sandbox Code Playgroud)

    然而,任何一个webdocroot(或偶数doc)的入口点的断点都没有被击中.

  • 假设这个元素是Child图中的一个,我试图找到它的句柄:

    >> set(gcf,'MenuBar','none'); findall(gcf)
    
    ans = 
      22×1 graphics array:
    
      Figure                (1)
      ContextMenu
      AnnotationPane
      Axes
      AxesToolbar
      Text
      Text
      Text
      ToolbarStateButton    (Brush/Select Data)
      ToolbarStateButton    (Data Tips)
      ToolbarStateButton    (Rotate 3-D)
      ToolbarStateButton    (Pan)
      ToolbarStateButton    (Zoom In)
      ToolbarStateButton    (Zoom Out)
      ToolbarPushButton     (Restore View)
      Button
      Button
      Button
      Button
      Button
      Button
      Button
    
    Run Code Online (Sandbox Code Playgroud)

    然而,使这些控件不可见使用set(h(2:end), 'Visible', …

matlab undocumented-behavior flexbox matlab-figure matlab-gui

12
推荐指数
1
解决办法
79
查看次数

使用MATLAB从另一个应用程序中的控件获取文本

[ - 介绍 - ]

我有与某些测量设备接口的软件(Altair).该软件的一组有限的功能作为API公开,制造商以其MATLAB实现的形式提供给我(没有额外的文档).根据提供的来源,我知道与此应用程序的所有通信都使用Kernel32.dlluser32.dll(Windows API库),更具体地说使用以下方法:

我在API中缺少的一个功能是能够检索隐藏在该软件某处的某个文本设置.幸运的是,该设置显示TextBox在其UI中的(具有不可选文本)内.

我的目标是在MATLAB中获得一个出现在这个单独的非MATLAB窗口中的字符串.


[ - 我的尝试 - ]

一个快速的互联网搜索显示1,2,这实际上是可能的,通过Windows API,如果HWND(句柄窗口)可以为特定的控制(或"窗口")获得有所需String.WM_GETTEXT然后将A 发送到控件,理论上返回该字符串.

我采取的第一步是检查a HWND是否可以获得.这是使用Microsoft Spy ++实用程序(可选配VS2015)完成的.结果如下:

在Spy ++中查找文本字段

上述层次结构意味着,4 childStatic的3 child的1 child .....窗口"牵牛星"的就是我要找的.

就Windows API而言,这些方法对于遍历窗口层次结构和获取字符串非常有用:

matlab user-interface winapi pointers ipc

11
推荐指数
1
解决办法
813
查看次数

为重载的`end`函数创建函数句柄

MATLAB允许为自定义类重载各种运算符.其中一个未列出的可重载运算符end,可以从\matlab\lang\end.m以下方面了解到:

%   END(A,K,N) is called for indexing expressions involving the object A
%   when END is part of the K-th index out of N indices.  For example,
%   the expression A(end-1,:) calls A's END method with END(A,1,2).
Run Code Online (Sandbox Code Playgroud)

这种方法的一个例子是table.end(粘贴在MATLAB命令行中并按"打开选择"以转到其定义;它在中定义...\matlab\datatypes\@tabular\end.m).

与普通方法不同,人们不能简单地写hEnd = @end,因为这会给出错误:

>> hEnd = @end;
 hEnd = @end;
         ?
Error: Illegal use of reserved keyword "end".
Run Code Online (Sandbox Code Playgroud)

另一方面,写入e = str2func('end');工作,但它链接到默认end功能(即使临时切换到end.m找到所需的文件夹).

失败的尝试包括str2func('table>end');, …

oop matlab reserved-words function-handle class-members

10
推荐指数
1
解决办法
175
查看次数

地图的主要和次要刻度?

我创建了下面的地图,它有一个均匀的灰色网格,间隔为1°,对于经线和纬线:

用灰色网格映射

我还希望每隔5°间隔(同时保持1°网格)使经线和平行线变粗和变黑,以便网格线与纬度和经度标签匹配,如下所示:

地图与灰色和黑色网格

我知道MATLAB有标准2D图的主要和次要网格,我过去曾使用它们.但是,据我所知,地图没有此功能.

我认为我想要做的就是通过访问地图对象属性(使用gcmgetm)并为特定子午线和平行子(使用)指定黑色属性来实现setm.也许功能gridmaxesm可以处理这个,但我不确定.

在实践中,我不知道如何做到这一点,因为我没有任何地图经验.我真的很感激你的帮助.

码:

注意:此代码需要Mapping Toolbox.

% Read vector features and attributes from shapefile.
landareas = shaperead('landareas.shp', 'UseGeoCoords', true);

% Define map axes and set map properties.
axesm ('lambert',...
    'MapLonLimit', [-70 10],...
    'MapLatLimit', [30 70],...
    'MapParallels', [38.00555556 71.01111111],...
    'Frame', 'on',...
    'FLineWidth', 1,...
    'Grid', 'on',...
    'GLineStyle', '-',...
    'GLineWidth', 0.1,...
    'GColor', [.7 .7 .7]);

% Display map latitude and longitude data.
geoshow(landareas, 'FaceColor', [1 1 .5], …
Run Code Online (Sandbox Code Playgroud)

matlab plot gridlines geo matlab-figure

9
推荐指数
2
解决办法
616
查看次数

在累积的行值中进行平均计算,同时忽略MATLAB中的NaN

我正在寻找有关如何优雅地解决以下问题的建议.虽然在我的具体案例中表现不是问题,但我会对有关良好做法的评论表示赞赏.

提前致谢!

简短版本:

我试图根据一些逻辑平均矩阵行,而忽略NaN值.我目前的代码没有按照我想要的方式处理NaN值.

长版:

我的数据以下列方式构建:

  • 单个(第一)列"箱".每个bin的行数不是恒定的.垃圾箱不必是整数.行是预先排序的.
  • 可变数量的数据列,可能包括NaN.

这是一个例子:

DATA = [...
180     NaN     NaN     1.733
180     NaN     NaN     1.703
200     0.720   2.117   1.738
200     0.706   2.073   1.722
200     0.693   2.025   1.723
200     NaN     NaN     1.729
210     NaN     NaN     1.820
210     NaN     NaN     1.813
210     NaN     NaN     1.805
240     NaN     NaN     1.951
240     NaN     NaN     1.946
240     NaN     NaN     1.946
270     NaN     NaN     2.061
270     NaN     NaN     2.052
300     0.754   2.356   2.103
300     0.758   2.342   2.057
300     NaN …
Run Code Online (Sandbox Code Playgroud)

matlab nan accumarray

8
推荐指数
1
解决办法
1246
查看次数

如何以编程方式在MATLAB编辑器中执行"collapse-all-folds"?

我一直在努力解决这个问题的时间比我想承认的要长一些.

我正在尝试以编程方式执行Action当用户单击View> Collapse All按钮或在编辑器窗口中右键单击然后Code Folding>时发生的相同操作Fold All.

到目前为止我发现了什么?

  • String对应于Action可在发现enum com.mathworks.mde.editor.ActionID并为:'collapse-all-folds'.
  • Action激活时,似乎执行以下方法:( org.netbeans.api.editor.fold.FoldUtilities.collapseAll(...)因此netbeans标记).
  • 此代码可以让我的情况下EditorAction,ActionManager,MatlabEditor:

jEd = com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor;
jAm = com.mathworks.mde.editor.ActionManager(jEd);
jAc = com.mathworks.mde.editor.EditorAction('collapse-all-folds');
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不能找到一种方法,实际上是激活Action.

任何想法/替代品?


EDIT1:在"书"中挖了一下之后,我觉得我比以前更接近(但仍然不是那里).从书中引用:

Java GUI组件通常使用a ActionMap来存储Actions由侦听器在鼠标,键盘,属性或容器事件上调用的runnable .与对象方法不同Actions,MATLAB不能直接调用.

然后解释了一个解决方法,其中大致涉及:获取某种Action对象; 使用as作为参数创建ActionEvent和调用Action' ,如下所示:actionPerformedActionEvent

import java.awt.event.*;
jEd …
Run Code Online (Sandbox Code Playgroud)

java matlab netbeans matlab-java

8
推荐指数
1
解决办法
849
查看次数

适用于Android和iOS的不同软件包版本

我正在使用React Native为Android和iOS开发应用程序.

我使用的其中一个库有点问题,因为应用程序只能正确编译:

  • ...在Android上使用时"react-native": "0.42.0".
  • ...在iOS上使用时"react-native": "0.37.0".

(图书馆本身,以及特定版本react-native都不适用于此讨论.重要的是,我似乎需要"同时"两个单独的版本- 每个平台都有不同的版本.)

我正在寻找一种方法来拥有一个代码库,可以使用任何平台的相关工具进行编译,无需任何修改1.我想到的解决方案是(以某种方式):

  • 为每个移动操作系统指定不同的包版本.
  • package.json每个平台都有完全不同的文件.

但是,我不知道如何实现上述任何一种方法,或者它们是否可行.我尝试添加.ios在平台特定代码.androidReact-Native文档中进行了解释,但是npm无法识别这些文件.

所以我的问题是:

  1. 我的想法是否可行,如果可行 - 如何?
  2. 有没有其他方法可以获得理想的结果?

1在类似C的代码中,使用预处理器标志会很容易.

dependencies os-dependent multiple-versions npm react-native

8
推荐指数
1
解决办法
693
查看次数

提高App Designer UI元素的刷新率

我目前正在尝试显示我在Matlab应用程序设计器应用程序中通过串口接收的数据.我正在遭受线性仪表的极差刷新率(~1 Hz).

仪表的值由固定速率定时器更新,定时器设置为30Hz.计时器回调中的时间戳打印显示我以正确的频率调用它.我的计算机非常强大,任务管理器没有显示任何高负载的迹象 - 实际上,MATLAB应用程序几乎不消耗任何CPU时间.它实际上不仅仅是仪表而是所有UI元素.

所以我的猜测 - 或更好:我的希望 - 是刷新率必须有一些硬性上限.但是,官方文档没有提供有关如何更改此内容的任何提示.

我的MATLAB版本是R2016b.

所以我的问题:

  • 这是用R2017a修复的吗?

  • 如果没有:我可以做些什么,即摆弄MATLAB内置文件?

这是一个MCV示例,演示了这个问题:

classdef testapp < matlab.apps.AppBase

% Properties that correspond to app components
properties (Access = public)
    UIFigure                  matlab.ui.Figure
    andwatchhowthisstartstospinsmoothlyGaugeLabel  matlab.ui.control.Label
    andwatchhowthisstartstospinsmoothlyGauge  matlab.ui.control.SemicircularGauge
    KeepturninghereKnobLabel  matlab.ui.control.Label
    KeepturninghereKnob       matlab.ui.control.Knob
end


properties (Access = private)
    tim_the_timer
    i = 0;
end

methods (Access = private)
    function app = refreshMeter(app, ~,~)
        % display timestamp
        datestr(now,'HH:MM:SS.FFF')

        % update the gauge
        app.andwatchhowthisstartstospinsmoothlyGauge.Value = app.i;
        app.i = app.i + 1;
        if app.i > 100
           app.i …
Run Code Online (Sandbox Code Playgroud)

matlab user-interface refresh data-visualization matlab-app-designer

7
推荐指数
1
解决办法
1411
查看次数

以编程方式返回所有函数的列表

我想以编程方式获取当前MATLAB命名空间中的可用函数列表,以及包中的可用函数.如何才能做到这一点?

在此输入图像描述

matlab namespaces metadata function package

7
推荐指数
2
解决办法
146
查看次数

无法监听 UIAxes 的 YLim 属性

MATLAB 提供了该addlistener函数。

侦听器允许我们跟踪对象属性的变化并对其采取行动。例如,我们可以创建一个非常简单的侦听器,当对象的'YLim'属性axes发生更改时,它将在命令窗口中显示一条消息:

% Example using axes
ax = axes();
addlistener(ax, 'YLim', 'PostSet', @(src, evnt)disp('YLim changed'));
Run Code Online (Sandbox Code Playgroud)

尝试平移轴或放大/缩小,看看会发生什么。这工作正常。

我需要做同样的事情,但使用 anuiaxes代替。

不幸的是,我们似乎不允许这样做。尝试运行以下示例:

% Example using uiaxes
ax = uiaxes();
addlistener(ax, 'YLim', 'PostSet', @(src, evnt)disp('YLim changed'));
Run Code Online (Sandbox Code Playgroud)

它抛出这个错误:

错误使用 matlab.ui.control.UIAxes/addlistener 添加 PostSet 侦听器时,类“matlab.ui.control.UIAxes”中的属性“YLim”未定义为 SetObservable。

我已经阅读了“监听属性值的变化”和“观察属性值的变化”的文章,我了解到必须声明一个属性才能SetObservable被监听:

classdef PropLis < handle
   properties (SetObservable)
      ObservedProp = 1 % <-- Observable Property
   end
end
Run Code Online (Sandbox Code Playgroud)

我试过通过查看UIAxes类定义,edit matlab.ui.control.UIAxes但这是不可能的,因为它是一个P-file。 …

matlab listener observable matlab-figure matlab-app-designer

7
推荐指数
1
解决办法
968
查看次数