Почему графические аннотации для соединителей не наследуются при повторном объявлении?

Я создаю библиотеку для моделирования системной динамики, которая в отличие от существующего бесплатная библиотека от Cellier использует акаузальные соединители. Для "Flow" - Elements у меня есть класс GenericFlow, который определяет интерфейсы:

partial model GenericFlow "Flow Template with replaceable ports"
    replaceable FlowPort portA "Flow from/to Stock A";
    replaceable FlowPort portB "Flow to/from Stock B";
end GenericFlow;

Пурпурные FlowPort соединители объявлены replaceable - значок в System Modeler выглядит так:

Значок частичной модели GenericFlow с коннекторами FlowPort

В некоторых особых случаях я буду использовать разные порты, коннектор под названием SpecialFlowPort, который отображается в виде красного квадрата. В качестве примера ниже приведен класс с именем Outflow, который повторно объявит класс соединителя, используемый для одного из его портов (например, portA):

model Outflow "Outflow from a stock"
    extends Interfaces.GenericFlow(redeclare Interfaces.SpecialFlowPort portA);
    [...]
end Outflow;

Его значок автоматически покажет красный цвет SpecialFlowPort, который был заменен на portA (слева):

Значок модели Outflow, показывающий повторно объявленный соединитель

Но когда я использую этот компонент (перетаскивание) в новой модели, он будет отображаться с двумя портами пурпурного цвета, и при наведении курсора на порты System Modeler даст имя класса как FlowPort, а не SpecialFlowPort:

Куда пропали все цвета?

Однако поведение компонента выполнено правильно, и соединение пурпурного FlowPort порта с левым портом, показанным для Outflow, запрещено.

Я что-то не так делаю? Почему графическая аннотация отображается правильно для класса с повторно объявленным соединителем, но не отображается при его использовании в модели?

ОБНОВЛЕНИЕ:

Отто Тронарп из Wolfram MathCore правильно отметил, что приведенный выше пример не является полным так как мне не удалось включить графические аннотации (которые часто делают код нечитаемым, но в данном случае очень важны).

Итак, чтобы дать SSCCE, я приведу здесь его пример:

package ConnectorsTest
  partial model GenericFlow "Flow Template with replaceable ports"
    replaceable FlowPort portA "Flow from/to Stock A" annotation(Placement(visible = true, transformation(origin = {-66.537, 24.02}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {-100, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
    replaceable FlowPort portB "Flow to/from Stock B" annotation(Placement(visible = true, transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {100, -0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  end GenericFlow;

  model Outflow "Outflow from a stock"
    extends GenericFlow(redeclare SpecialFlowPort portA);
  end Outflow;

  connector FlowPort
    annotation(Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {10, 10}), graphics = {Rectangle(visible = true, origin = {0, 5}, fillColor = {107, 255, 252}, fillPattern = FillPattern.Solid, extent = {{-50, -55}, {50, 55}})}));
  end FlowPort;

  connector SpecialFlowPort
    annotation(Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {10, 10}), graphics = {Rectangle(visible = true, origin = {0, 5}, fillColor = {246, 114, 123}, fillPattern = FillPattern.Solid, extent = {{-50, -55}, {50, 55}})}));
  end SpecialFlowPort;
end ConnectorsTest; 

Использование класса Outflow, как определено в этом пакете на диаграмме модели в WSM 4.3, покажет ложные графические аннотации (например, два зеленых вместо одного красного и одного зеленого разъема).


person gwr    schedule 30.09.2018    source источник
comment
Приведенный здесь пример был выполнен с помощью Wolfram System Modeler 4.3 в Windows 10 (64-разрядная версия). Я также разместил аналогичный вопрос в сообществе Wolfram, хотя без ответа пока.   -  person gwr    schedule 30.09.2018


Ответы (1)


Люди из Wolfram MatheCore в сообществе Wolfram написали, что это проблема, относящаяся к в Wolfram System Modeler до версии 5.1:

Большое спасибо за этот отчет. Действительно, похоже, что Model Center неправильно отображает повторно объявленные соединители внутри компонентов. Это то, над чем мы будем работать.

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

person gwr    schedule 02.10.2018