Часть алгоритма, повторяющаяся в проекте несколько раз, может быть выделена в новый (составной) функциональный блок. Обычно это упрощает отладку и модификацию этой части алгоритма, а также уменьшает время трансляции проекта. Составной блок при трансляции превращается в класс. Составные блоки можно создавать как в проектах, так и в библиотеках. Чтобы создать новый составной блок, необходимо выполнить следующее:
  1. Создание в проекте: создать Группу типов в узле Библиотеки, имя группы должно содержать только латинские буквы, цифры и _.
    Создание в библиотеке: создать Группу типов с любым именем.
  2. Создать в этой группе Тип.
  3. Задать ему свойства: Имя типа (это имя класса, который будет создан при трансляции, должно быть уникально в проекте) и Имя.
  4. Создать содержимое нового типа блока.

Создание функционального блока, состоящего из других функциональных блоков необходимо:

  1. Добавить в этот Тип страницы с блоками, реализующими алгоритм. Страницы можно скопировать из основного алгоритма проекта. При этом если необходимо, чтобы связи между блоками на разных страницах сохранились, копировать страницы надо вместе (например, выделив их в дереве).
  2. Чтобы вход/выход внутреннего блока назначить как вход/выход составного, необходимо в контекстном меню выбрать команду Сделать внешним. Он станет принадлежать обоим блокам, внутреннему и типу.

Cоздание функционального блока, алгоритм которого должен быть описан при помощи кода необходимо:

  1. Добавить блоку свойство Язык кода блока, выбрав соответствующий язык (C++/ST).
  2. Для редактирования кода в Полигоне есть окно Редактор, которое открывается автоматически при двойном нажатии ЛКМ на блоке в дереве проекта.
  3. Добавить входы и выходы В Тип можно добавлять собственные входы и выходы, при этом важно правильно задать для них некоторые свойства:
    • Имя переменной - переменная класса, соответствующая этому входу/выходу, имя должно быть уникальным в пределах класса
    • Индекс типа данных - это индекс соответствующего типа из раздела Библиотеки-Типы данных. В разделе находим интересуюший нас тип данных и в его свойствах в поле "Индекс" будет нужное значение. Далее это значение подставляем в свойство "Индекс типа данных" соответствующего входа или выхода. Если в библиотеке нет подходящего типа данных, его можно скопировать из основной библиотеки.
    • для входов Тип связей - определяет правила, по которым разрешается связывать этот вход:
      • 0 - можно провести связь или задать константу (переменная - указатель)
      • 1 - связь проводить нельзя, вход константный (переменная - не указатель)
      • 2 - нельзя задать константу, можно провести связь, но она не обязательна (при отсутствии связи на вход будет передан 0, переменная - указатель)
      • 3 - нельзя задать константу, можно провести связь, и она обязательна (при отсутствии связи при трансляции будет выдана ошибка, переменная - указатель)
    • для выходов Указатель: 1 - признак того, что переменная является указателем, 0 - обычный выход
    Для того чтобы создать входы/выходы с переменным количеством, необходимо в Тип добавить Массив. В Массив необходимо добавить либо входы, либо выходы (но не вместе)
    Возможно несколько вариантов:
    • Простой массив состоит из одного входа или выхода. Имя переменной входа/выхода определяется именем массива. Например, если массив имеет Имя - arr, то Имя переменной его входа/выхода - arr[%1]
    • Массив структур состоит из нескольких входов или выходов. Имя структуры задается свойством Имя типа. Имя переменной входа/выхода определяется именем массива и именем переменной внутри структуры, например, arr[%1].in.
    • Массивы входов и выходов могут быть объединены в группу, тогда при использовании блока количество входов и выходов будет поддерживаться одинаковым автоматически. Для этого обоим массивам надо задать свойство Принадлежит к группе с одинаковым значением (например, 1).
    Имена переменных внутри массива заполняются автоматически, если перед добавлением входов/выходов правильно задать свойство Имя типа.