ПрагмаСофтСтудия 2.1

Выполнение содержимого в цикле

 

 

Общая информация

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

Выполнение в цикле означает, что в ходе одного прохода дерева, в котором находится группа , она способна многократного выполнить, прорисовать элементы входящие в неё.

Для всех указанных групп при выделении их в деревьях в окне Свойства отображается группа свойств Цикл.

Опишем её поля в следующей таблице.

Цикл

 

  Счётчик

По умолчанию поле свойств не задано. Это означает, что выполнение группы в цикле не используется, и она будет обработана аналогично остальным элементам дерева - один раз.

Запись имени в поле свойств включает цикличность. При этом в группе создаётся скрытая локальная переменная с указанным именем. По сути, можно считать, что первым элементом в группе расположена локальная переменная счётчика цикла. Работа с ней аналогична работе с другими локальными переменными. Но есть одно ограничение, присваивание значений переменной-счётчику цикла запрещено.

Включение цикличности добавляет в дерево в элемент группы пиктограмму .

Дополнительно в помощь пользователю, после имени группы в фигурных скобках указывается имя переменной-счётчика цикла. На рисунке выше это переменная i.

Начальное значение

Значение, которое присваивается счётчику перед выполнением первого цикла и сравнением его с предельным значением.

Предельное значение

Перед каждым очередным циклом происходит сравнение значения счётчика цикла с предельным значением. Если счётчик равен или превышает предельное значение, то происходит выход из цикла без выполнения очередной итерации, и поток выполнения в дереве переходит к следующему элементу.

Шаг

Величина, на которую будет увеличиваться значение счётчика цикла на каждой его итерации. В отличие от начального и предельного значения, шаг не может быть задан формулой. Он всегда положителен и больше 0.

Схематично изобразить выполнение группы в цикле можно следующим образом.

Опишем то, что изображено на рисунке, по шагам.

  1. При встрече в дереве элемента группы , поток выполнения проверяет задано ли для её свойства Счётчик имя переменной. Если не задано, то поток переходит к следующему элементу дерева.
  2. Если для свойства Начальное значение задана формула, то она вычисляется. Переменной, указанной в свойстве Счётчик, присваивается значение или результат вычисления свойства Начальное значение.
  3. Если для свойства Предельное значение задана формула, то она вычисляется. Значение переменной счётчика цикла сравнивается со значением или результатом вычисления свойства Предельное значение. Если счётчик больше или равен предельному значению, то поток выполнения переходит к следующему элементу дерева.
  4. Поток выполнения перебирает и выполняет элементы вложенные в группу .
  5. После перебора всех элементов значение переменной счётчика цикла наращивается на величину значения свойства Шаг. Переход к пункту 3.

 

Примеры

Пример 1

Пусть у нас есть функция прорисовки DrawScaleUnitTop, которая предназначена для отображения следующего фрагмента.

Функция принимает два входных значения. Первое значение задаёт позицию фрагмента по оси Y. Второе указывает число, которое необходимо отобразить между рисками.

Для того, чтобы прорисовать вертикальную шкалу, необходимо несколько раз вызвать функцию DrawScaleUnitTop, наращивая позицию по оси Y и значение отметки. Создадим группу и 6 вызовов функции DrawScaleUnitTop внутри неё, как показано на рисунке.

Мы получили то, что хотели. Шесть фрагментов будут последовательно прорисованы друг над другом.

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

Поля свойств группы Верхняя шкала в окне Свойства выставим в значения приведённые на рисунке.

В результате группа будет пройдена 6 раз, переменная i при этом последовательно на каждом цикле будет получать значения 0,1,2,3,4,5. Когда значение переменной i станет равным 6 и сравняется с предельным значением, произойдёт выход из цикла, и поток выполнения перейдёт к следующему элементу в дереве. В результате в окне Редактор мы получим изображение шести фрагментов прорисованных последовательно друг над другом.

 

Пример 2

Приведём пример, как легко можно нанести риски и оцифровку на круговую шкалу.

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

Для нанесения рисок создадим примитив, рисующий линию, и будем поворачивать его в цикле наращивая угол поворота.

Группа Риски на рисунке обеспечивает циклическое выполнение и имеет следующие свойства.

Это даёт нам 20 циклов выполнения группы с изменением значения переменной i от 0 до 19 включительно.

Группа Линии предоставляет локальную систему координат, которую мы будем поворачивать. Её свойство Угол имеет следующее значение.

Т.е. на каждом очередном цикле значение угла поворота риски будет увеличиваться ещё на 18°. В результате в окне Редактор мы получим следующее изображение.

Теперь сделаем оцифровку. Добавим ещё 3 элемента, как показано на рисунке.

Цикл группы Оцифровка выполним 10 раз.

Группу Цифры будем поворачивать на следующий угол.

Для обратной компенсации угла поворота, что бы цифры были не повёрнуты, аналогично зададим свойство Угол примитива Текст.

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

  

 

 

Авионика и Софт

forum.aviosoft.ru

 

сборка: 706