Класс: slmetric.dashboard.CustomWidget
Пакет: slmetric.dashboard
Задайте высоту пользовательского виджета панели управления метриками
setHeight(
задает высоту пользовательского виджета в пикселях. CustomWidget
,num
)
CustomWidget
- Metrics Dashboard customwidgetslmetric.dashboard.CustomWidget
slmetric.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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.