Веб-цвета Modelica

#colors #annotations #modelica #dymola

#Цвет #аннотации #modelica #дымола

Вопрос:

Я подумал, что было бы удобно определить некоторые цвета как константы для последующего использования в цветовых аннотациях Modelica. Поскольку кажется, что веб-цвета являются общепринятым стандартом, я скопировал их все в пакет постоянных массивов:

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

 within ;
package Modelica_Colors
  type RealColor = Modelica.Icons.TypeReal[3] (each min=0, each max=255);
  package BasicColors
    final constant RealColor Aqua={0,255,255};
    final constant RealColor Black={0,0,0};
    final constant RealColor Blue={0,0,255};
    final constant RealColor Fuchsia={255,0,255};
    final constant RealColor Gray={128,128,128};
    final constant RealColor Grey={128,128,128};
    final constant RealColor Green={0,128,0};
    final constant RealColor Lime={0,255,0};
    final constant RealColor Maroon={128,0,0};
    final constant RealColor Navy={0,0,128};
    final constant RealColor Olive={128,128,0};
    final constant RealColor Purple={128,0,128};
    final constant RealColor Red={255,0,0};
    final constant RealColor Silver={192,192,192};
    final constant RealColor Teal={0,128,128};
    final constant RealColor White={255,255,255};
    final constant RealColor Yellow={255,255,0};
  end BasicColors;

  package Colors
    final constant RealColor Crimson={220,20,60};
    final constant RealColor Cyan={0,255,255};
    final constant RealColor DarkBlue={0,0,139};
    final constant RealColor DarkCyan={0,139,139};
    final constant RealColor OliveDrab={107,142,35};
    final constant RealColor Orange={255,165,0};
    final constant RealColor OrangeRed={255,69,0};
    final constant RealColor Orchid={218,112,214};
    final constant RealColor PaleGoldenRod={238,232,170};
    final constant RealColor PaleGreen={152,251,152};
    final constant RealColor Yellow={255,255,0};
    final constant RealColor YellowGreen={154,205,50};
  end Colors;

model Test
  // works
  constant RealColor test_const1={255,20,147}; // pinkish

  // does not work
  final constant RealColor test_equal=Modelica_Colors.Colors.OrangeRed;
  constant RealColor test_pi={Modelica.Constants.pi,2*Modelica.Constants.pi,3*Modelica.Constants.pi};
  import Modelica_Colors.BasicColors.Yellow;

protected 
  // works
  constant RealColor test_const2={147,20,255};

  annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={
          Rectangle(
          extent={{-100,100},{0,0}},
          lineColor=test_const2,
          fillColor=test_const1,
          fillPattern=FillPattern.Solid),
          
          Rectangle(
          extent={{0,0},{100,-100}},
          lineColor=Modelica_Colors.Colors.Cyan,
          fillColor=Yellow,
          fillPattern=FillPattern.Solid),
          
          Rectangle(
          extent={{0,100},{100,0}},
          lineColor=test_equal,
          fillColor=test_equal,
          fillPattern=FillPattern.Solid),
          
          Rectangle(
          extent={{-100,0},{0,-100}},
          lineColor=test_equal,
          fillColor=test_pi,
          fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem(
          preserveAspectRatio=false)));

end Test;

  annotation (uses(Modelica(version="3.2.3")));
end Modelica_Colors;
  

Ответ №1:

причина проста: графические аннотации, зависящие от переменной, работают, только если переменная присутствует в файле результатов. Итак, поскольку ваша цветная аннотация вызывает данные с помощью импорта, желтый код не включен в файл результатов, следовательно, ваш тестовый блок не может быть окрашен. Та же логика может быть применена к защищенным переменным: она не будет применена ни к одной графической аннотации.

Комментарии:

1. Для работающих версий изменения видны ДО моделирования. Таким образом, не сразу понятно, почему важно, сохраняются ли переменные в файле результатов !? Кроме того, я все еще задаюсь вопросом, следует ли это исправить на стороне инструмента или на моей стороне. Я обновил пример. Обе версии, в которых я определяю массив локально, работают, независимо от того, защищены они или нет. Переменная или константа test_equal отображается в результатах, но по-прежнему не работает.

2. По моему опыту, это верно только для DynamicSelect.

3. То, что сказал Марко, верно, то, что я сказал, связано с DynamicSelect . test_const2 имеет низкую изменчивость (это константа), поэтому он применяется непосредственно к диаграмме, даже до моделирования. test_equal и test_pi отлично работают на моем ноутбуке, только после моделирования, поскольку программному обеспечению необходимо их оценить.