Класс: slmetric.dashboard.CustomWidget
Пакет: slmetric.dashboard
Задайте высоту пользовательского виджета панели управления метриками
setHeight( задает высоту пользовательского виджета в пикселях. CustomWidget,num)
CustomWidget - Metrics Dashboard customwidgetslmetric.dashboard.CustomWidgetslmetric.dashboard.CustomWidget для которого необходимо задать ее высоту.
num - Высота в пикселяхВысота slmetric.dashboard.CustomWidget объект в пикселях. Это минимальные высоты, которые можно задать.
Для SingleValue пользовательский виджет, минимальная высота составляет 25 пикселей.
Для BarChart пользовательский виджет, минимальная высота составляет 150 пикселей.
Для RadialGauge пользовательский виджет, минимальная высота составляет 120 пикселей.
Для DistributionHeatMap пользовательский виджет, минимальная высота составляет 90 пикселей.
Пример: setHeight(widget, 50)
Создайте пользовательскую метрику, которая подсчитывает невиртуальные блоки. Укажите виджет, чтобы отобразить эту метрику на панели инструментов Metrics. Добавить его в группу Size.
Создайте пользовательский класс метрики.
className = 'nonvirtualblockcount'; slmetric.metric.createNewMetricClass(className);
Создайте невиртуальную метрику счетчика блоков путем добавления этого кода к nonvirtualblockcount.m файл.
classdef nonvirtualblockcount < slmetric.metric.Metric
%nonvirtualblockcount calculates number of nonvirtual blocks per level.
% BusCreator, BusSelector and BusAssign are treated as nonvirtual.
properties
VirtualBlockTypes = {'Demux','From','Goto','Ground', ...
'GotoTagVisiblity','Mux','SignalSpecification', ...
'Terminator','Inport'};
end
methods
function this = nonvirtualblockcount()
this.ID = 'nonvirtualblockcount';
this.Name = 'Nonvirtual Block Count';
this.Version = 1;
this.CompileContext = 'None';
this.Description = 'Algorithm that counts nonvirtual blocks per level.';
this.AggregatedValueName = 'Nonvirtual Blocks (incl. Descendants)'
this.ValueName = 'Nonvirtual Blocks'
this.ComponentScope = [Advisor.component.Types.Model, ...
Advisor.component.Types.SubSystem];
this.AggregationMode = slmetric.AggregationMode.Sum;
this.ResultChecksumCoverage = true;
this.SupportsResultDetails = true;
end
function res = algorithm(this, component)
% create a result object for this component
res = slmetric.metric.Result();
% set the component and metric ID
res.ComponentID = component.ID;
res.MetricID = this.ID;
% Practice
D1=slmetric.metric.ResultDetail('identifier 1','Name 1');
D1.Value=0;
D1.setGroup('Group1','Group1Name');
D2=slmetric.metric.ResultDetail('identifier 2','Name 2');
D2.Value=1;
D2.setGroup('Group1','Group1Name');
% use find_system to get all blocks inside this component
blocks = find_system(getPath(component), ...
'SearchDepth', 1, ...
'Type', 'Block');
isNonVirtual = true(size(blocks));
for n=1:length(blocks)
blockType = get_param(blocks{n}, 'BlockType');
if any(strcmp(this.VirtualBlockTypes, blockType))
isNonVirtual(n) = false;
else
switch blockType
case 'SubSystem'
% Virtual unless the block is conditionally executed
% or the Treat as atomic unit check box is selected.
if strcmp(get_param(blocks{n}, 'IsSubSystemVirtual'), ...
'on')
isNonVirtual(n) = false;
end
case 'Outport'
% Outport: Virtual when the block resides within
% SubSystem block (conditional or not), and
% does not reside in the root (top-level) Simulink window.
if component.Type ~= Advisor.component.Types.Model
isNonVirtual(n) = false;
end
case 'Selector'
% Virtual only when Number of input dimensions
% specifies 1 and Index Option specifies Select
% all, Index vector (dialog), or Starting index (dialog).
nod = get_param(blocks{n}, 'NumberOfDimensions');
ios = get_param(blocks{n}, 'IndexOptionArray');
ios_settings = {'Assign all', 'Index vector (dialog)', ...
'Starting index (dialog)'};
if nod == 1 && any(strcmp(ios_settings, ios))
isNonVirtual(n) = false;
end
case 'Trigger'
% Virtual when the output port is not present.
if strcmp(get_param(blocks{n}, 'ShowOutputPort'), 'off')
isNonVirtual(n) = false;
end
case 'Enable'
% Virtual unless connected directly to an Outport block.
isNonVirtual(n) = false;
if strcmp(get_param(blocks{n}, 'ShowOutputPort'), 'on')
pc = get_param(blocks{n}, 'PortConnectivity');
if ~isempty(pc.DstBlock) && ...
strcmp(get_param(pc.DstBlock, 'BlockType'), ...
'Outport')
isNonVirtual(n) = true;
end
end
end
end
end
blocks = blocks(isNonVirtual);
res.Value = length(blocks);
end
end
endЗарегистрируйте новую метрику в репозитории метрики.
[id_metric,err_msg] = slmetric.metric.registerMetric(className);
Чтобы начать, откройте строение по умолчанию для размещения инструментальной панели Metrics.
conf = slmetric.dashboard.Configuration.open();
Получите slmetric.dashboard.Layout объект из slmetric.dashboard.Configuration объект.
layout = getDashboardLayout(conf);
Получите объекты виджета, которые находятся в объекте размещения.
layoutWidget=getWidgets(layout);
Удалите виджет, который представляет метрику счетчика блоков Simulink.
sizeGroup = layoutWidget(2); sizeGroupWidgets = sizeGroup.getWidgets(); sizeGroup.removeWidget(sizeGroupWidgets(1));
Добавьте виджет, в котором отображается невиртуальная метрика счетчика блоков. Для пользовательских виджетов типом визуализации по умолчанию является одно значение. Если вы хотите использовать другой метод визуализации, задайте другое значение для VisualizationType свойство.
newWidget = sizeGroup.addWidget('Custom', 1);
newWidget.Title=('Nonvirtual Block Count');
newWidget.setMetricIDs('nonvirtualblockcount');
newWidget.setWidths(slmetric.dashboard.Width.Medium);
newWidget.setHeight(70);
Укажите, существуют ли линии, отделяющие пользовательский виджет от других виджетов в группе. Эти команды определяют, что справа от виджета есть линия.
s.top = false; s.bottom = false; s.left= false; s.right= true; newWidget.setSeparators([s, s, s, s]);
Сохраните объект строения. Эта команда сериализует информацию API в XML- файл.
save(conf,'Filename','DashboardConfig.xml');
Установите активное строение.
slmetric.dashboard.setActiveConfiguration(fullfile(pwd,'DashboardConfig.xml'));
Для вашей модели откройте инструментальную панель Metrics.
metricsdashboard sf_car
Нажмите кнопку All Metrics и запустите все метрики.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.