Matlab:实现可视化融合的方向数据
classdef HelperOrientationViewer < matlab.System
properties
Title = {''}
end
properties (Nontunable) %(Access = private, Nontunable)
NumInputs = 1;
end
properties (Access = private)
pVisualizationObjects;
IsTopLevelUI = false;
end
properties (Hidden)
AppWindow;
AxesPosition = [0.1300 0.1100 0.7750 0.8150];
end
properties (Access = private, Constant)
BorderHeight = 0.05;
end
methods
% Constructor
function obj = HelperOrientationViewer(varargin)
setProperties(obj,nargin,varargin{:});
createUI(obj);
end
% Destructor
function delete(obj)
fig = obj.AppWindow;
if (obj.IsTopLevelUI && ~isempty(fig) && ishghandle(fig))
delete(fig);
end
end
function show(obj)
fig = obj.AppWindow;
if (obj.IsTopLevelUI && ~isempty(fig) && ishghandle(fig))
fig.Visible = 'on';
end
end
function hide(obj)
set(obj.AppWindow,'Visible','off');
end
end
methods (Access = protected)
function setupImpl(obj, varargin)
%Clear out any existing visualization objects
for ii=1:numel(obj.pVisualizationObjects)
deleteAxes(obj.pVisualizationObjects);
end
numInputs = numel(varargin);
fig = obj.AppWindow;
appPosition = obj.AxesPosition;
if (numInputs == 1)
borderHeight = 0;
else
borderHeight = obj.BorderHeight;
end
currAxesPosition = appPosition;
axesHeight = (appPosition(4)-borderHeight*(numInputs+1)) / numInputs;
currAxesPosition(2) = currAxesPosition(2) + borderHeight;
currAxesPosition(4) = axesHeight;
t = obj.Title;
nt= numel(t);
for nn = (nt+1):numInputs %Fill in missing titles with ''
t{nn} = '';
end
for i = 1:numInputs
vizObjs{i} = HelperBox(fig, currAxesPosition, t{i} , i ); %#ok<AGROW>
currAxesPosition(2) = currAxesPosition(2) + axesHeight + borderHeight;
end
obj.NumInputs = numInputs;
obj.pVisualizationObjects = [vizObjs{:}];
syncRotationCallback(obj.pVisualizationObjects);
show(obj);
end
function val = getNumInputsImpl(obj)
val = obj.NumInputs;
end
function stepImpl(obj, varargin)
vizObjs = obj.pVisualizationObjects;
numInputs = obj.NumInputs;
assert(numInputs == numel(varargin));
for i = numInputs:-1:1
q(:,i) = varargin{i};
end
for sampleNum = 1:size(q, 1)
for i = 1:numInputs
update(vizObjs(i), q(sampleNum,i));
end
drawnow limitrate;
end
end
end
methods (Access = private)
function createUI(obj)
createAppWindow(obj);
end
function createAppWindow(obj)
fig = obj.AppWindow;
if (isempty(fig) || ~ishghandle(fig))
fig = figure('Name', 'Orientation Viewer', ...
'NumberTitle', 'off', ...
'DockControls','off', ...
'Units', 'normalized', ...
'OuterPosition', [0 0.5 0.25 0.5], ...
'Visible', 'off', ...
'IntegerHandle', 'off', ...
'HandleVisibility', 'on', ...
'NextPlot', 'new', ...
'CloseRequestFcn', @(x,~)set(x,'Visible', 'off'));
obj.AppWindow = fig;
obj.IsTopLevelUI = true;
end
end
end
end
该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/129359037