Пользовательский компактный интерфейс отображения

В дополнение к пользовательским параметрам отображения, описанным в Пользовательском интерфейсе CustomDisplay, можно также настроить путь MATLAB® отображения возражают в компактных сценариях отображения. сценарии Compact display происходят, когда объектный массив в контейнере, таком как структура, массив ячеек или таблица. Можно настроить способ, которым массивы объектов отображены в компактном отображении путем наследования matlab.mixin.CustomCompactDisplayProvider.

Опции настройки, доступные для компактного отображения

CustomCompactDisplayProvider обеспечивает опции настройки в двух основных областях компактных отображений:

  • Однострочное размещение — отображение объектного массива ограничено одной строкой. Это размещение отображения происходит, когда объектный массив содержится в структуре, массиве ячеек или свойстве объекта MATLAB. Замените CustomCompactDisplayProvider метод compactRepresentationForSingleLine настроить это размещение.

  • Колоночное размещение — объектный массив отображен в нескольких строках как часть ориентированных на столбец или табличных данных. Это размещение отображения происходит, когда объектный массив содержится в табличной переменной. Замените CustomCompactDisplayProvider метод compactRepresentationForColumn настроить это размещение.

Три дополнительных CustomCompactDisplayProvider служебные методы позволяют вам управлять, сколько из данных используется, чтобы создать отображение объектного массива:

  • partialDataRepresentation — Компактное отображение объектного массива создается только из ведущих элементов набора данных или только начальных и конечных элементов, не используя промежуточные значения.

  • fullDataRepresentation — Компактное отображение объектного массива создается на основе целого набора данных.

  • widthConstrainedDataRepresentation — Компактное отображение объектного массива создается из данных на основе ограничения ширины, которое вы обеспечиваете.

Каждый из этих трех служебных методов также обеспечивает Annotation аргумент значения имени, который позволяет вам включать вектор-строку из строк, чтобы служить дескрипторами в ваших компактных отображениях. Например, в случае класса, представляющего полиномы, добавляя аннотацию, может быть полезным когда только размерности и класс совпадения данных в отображении:

struct with fields:

   prop1: [1x3 sym] (Third-order polynomial)

Разработка класса с индивидуально настраиваемым компактным отображением

Когда, рассматривая, как настроить компактное отображение для класса, сначала запишите класс без любой индивидуальной настройки и теста, чтобы видеть, должны ли параметры отображения по умолчанию быть изменены для вашего приложения. Например, этот класс хранит один полином как строку и ее порядок как double.

classdef Polynomial
    properties
        polynomialString string {mustBeScalarOrEmpty};
        polynomialOrder double {mustBeScalarOrEmpty};
    end
    methods
        function obj = Polynomial(polyString,polyOrder)
            obj.polynomialString = polyString;
            obj.polynomialOrder = polyOrder;
        end
    end
end

Полный код этого класса с индивидуально настраиваемой компактной функциональностью отображения доступен в конце примера.

Создайте экземпляр Polynomial. Отобразите экземпляр в массиве ячеек, чтобы проверять однострочное размещение.

poly = "(x^10)/100 + 300*x^9 + 200*x^8 + 4000*x^7 + 600*x^6 + 700*x^5 + 45*x^4 + 90*x^3 + 4*x^2 + 100*x^(1/2) + 1";
a = Polynomial(poly,10);
{a}
ans =

  1×1 cell array

    {1×1 Polynomial}

Однострочное размещение не предоставляет пользователям много информации. Измените Polynomial наследоваться matlab.mixin.CustomCompactDisplayProvider и замените compactRepresentationForSingleLine метод. Вызовите служебный метод widthConstrainedDataRepresentation с TruncateScalarObject установите на true. MATLAB теперь обрезает полиномиальную строку на основе доступной ширины.

function displayRep = compactRepresentationForSingleLine(obj,displayConfiguration,width)
   displayRep = widthConstrainedDataRepresentation(obj,displayConfiguration,width,...
      StringArray=obj.polynomialString,TruncateScalarObject=true);
end

Теперь отображение экземпляра в массиве ячеек содержит как можно больше строки.

{a}
ans =

  1×1 cell array

    {[(x^10)/100 + 300*x^9 + 200*x^8 + 4000*x^7 + 600*x^6 + 700*x^5 + 45*x^4 + 90*x^3 + 4*x^2 + 100*x^(1/2) …]}

Для табличного отображения значение по умолчанию показывает только класс и размерности, так замените compactRepresentationForColumn. Метод возвращает экземпляр matlab.display.DimensionsAndClassNameRepresentation с аннотацией, которая в этом случае идентифицирует порядок полинома. Покрывать случай, когда таблица имеет вектор-строку из Polynomial экземпляры в однократном въезде, метод изменяет polynomialOrder свойство совпадать с формой экземпляра и затем находит максимальный порядок в той строке для отображения.

function displayRep = compactRepresentationForColumn(obj,displayConfig,width) 
   import matlab.display.DimensionsAndClassNameRepresentation;
   polOrder = reshape([obj.polynomialOrder],size(obj));
   maxPolOrderPerRow = max(polOrder,[],2); 
   annotationStr = "Polynomial of order " + string(maxPolOrderPerRow);
   displayRep = DimensionsAndClassNameRepresentation(obj,...
      displayConfig,Annotation=annotationStr);
end

С этим кодом на месте, можно составить таблицу результатов оценки, например, который идентифицирует порядок полинома. Создайте второй PolynomialB. Затем составьте две таблицы, один с a и b в столбце, и один с a и b в той же строке.

b = Polynomial("x^3 + x^2 + x",3);
Result = [1;2];
Estimate = [a;b];
T = table(Result,Estimate)
T =

  2×2 table

    Result                    Estimate                 
    ______    _________________________________________

      1       1×1 Polynomial  (Polynomial of order 10)
      2       1×1 Polynomial  (Polynomial of order 3) 

С a и b в той же строке только отображен максимальный порядок.

Result = 1;
Estimate = [a b];
T1 = table(Results,Estimate)
T1 =

  1×2 table

    Result                    Estimate                 
    _______    _________________________________________

       1       1×2 Polynomial  (Polynomial of order 10) 

 Завершите полиномиальный класс

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте