В используемых TDB сущности объединяются в группы, определяемые сущностью entity_structured. Если функция предназначена для выполнения операций в группе, то она выполняет эти операции в режиме повторения (рекурсивно) для каждой соответствующей сущности группы. Если данная функция является функцией дублирования, то ее результатом также является группа. Указанная группа принадлежит текущей открытой группе, она имеет такую же групповую структуру, как и исходная функция. Дубликат открытой группы является замкнутой группой. Если данная функция является функцией модификации, то она сохраняет групповую структуру существующих сущностей, находящихся внутри модифицированной группы.
Сущность не модифицируется, и сообщение об ошибке не возникает, если функция работает в группе, содержащей геометрические сущности, недопустимые для использования в качестве входных параметров функции. Например, если функция изменения стиля представления кривой chg_curve_style запущена в группе, содержащей сущности точки, твердого тела и кривых, то сущность curve_style должна быть модифицирована, однако сущность точки и сущность твердого тела должны оставаться неизменными в той же самой групповой структуре.
TDB сама является группой. Она называется корневой группой root_group. Данная группа открыта и не должна закрываться, если интерфейс инициализирован. Таким образом, всегда должна существовать открытая группа.
За исключением корневой группы каждая сущность (геометрическая или структурированная) должна принадлежать только одной группе (которая может быть корневой группой). Группы структурируются в соответствии с иерархической структурой дерева. Корнем дерева является корневая группа.
Группы могут быть:
- созданными: они принадлежат текущей открытой группе или становятся текущей открытой группой;
- открытыми повторно: все сущности, созданные в TDB после повторного открытия группы, принадлежат данной группе до ее закрытия;
- закрытыми.
Сущности, направляемые (созданные) в CAD, удаляются из групповой структуры.
Для формирования иерархической групповой структуры открытые группы управляются с помощью стека. Верхним уровнем стека является текущая открытая группа.
Если интерфейс инициализирован, то корневая группа помещается в стек. Никакая функция не может закрыть данную группу, поэтому она всегда должна оставаться в стеке.
Если группа является созданной, то: 1) она принадлежит текущей открытой группе; 2) она помещается на вершину стека. Таким образом, она становится текущей открытой группой.
Только группы, находящиеся на вершине стека, могут быть закрытыми. В настоящем случае группа удаляется из стека, и на вершине стека размещается следующая открытая группа.
Если группа открыта повторно, то она помещается на вершине стека. Это не изменяет свойства группы, которой принадлежит группа, открытая повторно.
Непосредственная модификация групповых структур обеспечивается тремя функциями. Ни одна из этих функций не может изменить содержимого стека.
Функция Remove_Ent_Grp удаляет сущности (геометрические или структурированные) из группы. По окончании выполнения функции сущность должна принадлежать корневой группе.
Функция Gather_Ent_Grp формирует новую группу, используя имеющийся перечень сущностей (геометрических или структурированных). Ни одна из этих сущностей не должна содержать текущей открытой группы. Все указанные сущности удаляются из группы, которой они принадлежат, и помещаются в новую группу. Данная группа должна принадлежать текущей открытой группе.
Функция Add_Ent_Grp добавляет сущности (геометрические или структурированные) в указанную группу. Сущности не должны содержать группу, к которой они добавляются. Данные сущности сначала удаляются из их группы, а затем добавляются в указанную группу.
Группы являются локальными по отношению к TDB. Группы облегчают геометрические построения. Максимальное количество групп, допускаемых реализацией интерфейса, должно быть не менее, чем количество, установленное в разделе 9 настоящего стандарта.