Иногда, когда компонент растягивается, мы не хотим, чтобы соединитель (-ы) растягивался, потому что он выглядит некрасиво. См., Например, экземпляры Modelica.Blocks.Sources.RealExpression
ниже.
Можно ли добавить графическую аннотацию при создании коннектора (или другого компонента) в модели, чтобы этого избежать?
Я не вижу способа сделать именно то, что вы хотите в данный момент.
Обратите внимание, что можно предотвратить растяжение весь realExpression, используя
annotation (Icon(coordinateSystem(preserveAspectRatio=true),...),
Diagram(coordinateSystem(preserveAspectRatio=true),...),
Однако не указано, что использование этого параметра в соединителе RealExpression должно предотвращать растяжение соединителя - при этом позволяя растягивать компонент.
Мне неизвестно решение, позволяющее использовать существующий блок RealExpression. В качестве обходного пути вы можете создавать новые версии этого блока - либо расширяя его, либо дублируя его.
Вы можете создать новое, более широкое реальное выражение, которое расширяет исходное реальное выражение, скрывает исходный значок и рисует новый.
Недостаток: для этого требуется одна модель на размер, но если размер используется часто, этого должно быть хорошо.
model RealExpression_600x200
extends Modelica.Blocks.Sources.RealExpression annotation (
IconMap(extent = {{100,-100},{300,100}}, primitivesVisible=false),
DiagramMap(extent = {{100,-100},{300,100}}, primitivesVisible=false));
equation
annotation (
Diagram(coordinateSystem(extent = {{-300,-100},{300,100}})),
Icon(coordinateSystem(extent = {{-300,-100},{300,100}}), graphics = {
Rectangle(
extent = {{-300,40},{300,-40}},
lineColor = {0,0,0},
lineThickness=5.0,
fillColor = {235,235,235},
fillPattern=FillPattern.Solid,
borderPattern=BorderPattern.Raised),
Text(
extent = {{-300,100},{300,60}},
textString = "%name",
lineColor = {0,0,255}),
Text(
extent = {{-296,15},{296,-15}},
lineColor = {0,0,0},
textString = "%y")}),
uses(Modelica(version = "3.2.2")));
end RealExpression_600x200;
Вы также можете продублировать RealExpression и ввести параметр, который управляет графическими аннотациями. Стандартные размеры могут быть добавлены на выбор. Вы не должны повторно масштабировать компонент, вместо этого выберите размер с параметром width
.
block RealExpression "Real expression with varying size, set via parameter"
parameter Integer width = 10
annotation(choices(choice=20 "Regular",
choice=40 "Wide",
choice=80 "Wiiiiiiide"));
Modelica.Blocks.Interfaces.RealOutput y=0.0 "Value of Real output"
annotation (
Dialog(group = "Time varying output signal"),
Placement(transformation(extent = {{10*width/2,-10},{10*width/2+20,10}})));
annotation (
Icon(
coordinateSystem(
preserveAspectRatio=true,
extent = {{-100,-100},{100,100}}),
graphics = {
Rectangle(
extent = {{-10*width/2,40},{10*width/2,-40}},
lineColor = {0,0,0},
lineThickness=5.0,
fillColor = {235,235,235},
fillPattern=FillPattern.Solid,
borderPattern=BorderPattern.Raised),
Text(
extent = {{-10*width/2+4,15},{10*width/2-4,-15}},
lineColor = {0,0,0},
textString = "%y"),
Text(
extent = {{-10*width/2,90},{10*width/2,50}},
textString = "%name",
lineColor = {0,0,255})}),
uses(Modelica(version = "3.2.2")));
end RealExpression;
Я этого и ожидал. Я обновил вопрос, добавив второй вариант, в котором ширину можно установить с помощью параметра.
Отличный второй ответ, Марко. Огромное спасибо!
Марко, спасибо за предложение! Однако иногда мне нужно растянуть компонент (не всегда на одинаковую величину), чтобы адаптировать его размер к текущей ситуации. Br. Рене