Операции > Булева

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

Основные понятия. Возможности операции

Типы булевой операции

Существует три типа булевой операции:

● Сложение . Результатом выполнения операции является тело, объединяющее в себе все части тел, участвующих в операции.

● Вычитание . Результатом выполнения операции является тело, полученное вычитание одного тела из другого.

● Пересечение . Результатом выполнения операции является тело, полученное пересечением тел, участвующих в операции и состоящее из общих частей этих тел.

Операнды булевой операции

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


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

Результаты булевых операций

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

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

Ниже рассмотрим основные комбинации операндов и результаты выполнения операции.

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

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

Интерпретация листового тела

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

Если операнд - листовое тело был определён как полупространство, то в сцене будут отображены векторы нормалей к поверхности листового тела. Направление этих векторов указывает, какое полупространство выбрано и повлияет на результат выполнения операции.

Операция "Сложение"

Результаты булевой операции "Сложение" при сочетании различных типов операндов:

Твёрдое тело + Твёрдое тело

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

Листовое тело + Твёрдое тело

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

Следует отметить, что листовое тело должно полностью пересекать твёрдое тело.

Твёрдое тело + Листовое тело

Если в качестве первого операнда было выбрано твёрдое тело, а в качестве второго – листовое, то в результате выполнения операции "Сложение" по умолчанию создается твёрдое тело. Грани листового тела будут формировать дополнительный объем для твердого тела.

Листовое тело в этом случае должно быть определено в команде как полупространство.

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

При выборе листового тела следует обратить внимание на направление векторов нормалей. При определённом направлении нормалей может получиться некорректное результирующее тело. В этом случае нужно выбрать другое полупространство в параметре " Интерпретация операнда ".

Листовое тело + Листовое тело

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

Операция "Вычитание"

Результаты булевой операции "Вычитание" при сочетании различных типов операндов:

Твёрдое тело - Твёрдое тело

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

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

Листовое тело - Твёрдое тело

При вычитании твёрдого тела из листового, в листовом теле будет создано отверстие по форме второго операнда – твёрдого тела.

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

Операция "Пересечение"

Результаты булевой операции "Пересечение" при сочетании различных типов операндов:

Твёрдое тело - Твёрдое тело

Результатом пересечения твёрдых тел является тело, представляющее собой общую часть всех операндов.

Листовое тело (полупространство) - Листовое тело (полупространство)

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

Листовое тело - Твёрдое тело

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

Твёрдое тело - Листовое тело (полупространство)

В результате выполнения булевой операции "Пересечение" листового тела, интерпретированного как полупространство, и твёрдого тела останется часть твёрдого тела, отсечённая листовым телом. Результат выполнения этой операции похож на результат выполнения булевой операции "Вычитания" листового тела (полупространства) из твёрдого тела. Отличие в том, что в результате выполнения операции "Пересечение" остаётся другая часть твёрдого тела. При этом порядок выбора операндов не влияет на результат.

Булевы операции между листовыми телами (полупространствами)

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

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

Глобальные и локальные булевы операции

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

Помимо "Глобальной" булевой операцией в T-FLEX есть понятие " Локальной " булевой операции. В отличие от "Глобальной" булевой операции, где в качестве операндов выбираются только тела, в "Локальной" булевой операции помимо тел выбираются грани операндов. Выбрать грани операндов можно в параметрах операции на закладке "Грани". В некоторых случаях использование "Локальной" булевой операции дает значительный выигрыш во времени регенерации модели по сравнению с "Глобальной" булевой операцией, т.к. в результате выполнения операции будут искаться пересечения только указанных граней. Например, если нужно проделать отверстие в достаточно сложном теле и известно, что отверстие пересекает небольшое количество граней, то имеет смысл указать эти грани в параметрах операции.

Следует заметить, что нужно внимательно выбирать грани для "Локальной" булевой операции. В случае неправильно выбранных граней может сформироваться некорректное тело.

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

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

Выборочные булевы операции

В результате пересечения граней операндов образуются общие рёбра. Эти рёбра разделяют тела операндов на части. Части операндов могут быть внутренними (общие части операндов) и наружными. При создании булевой операции есть возможность указать наружные части операндов, которые будут оставлены в результирующем теле или наоборот исключены из него.

Часть операнда определяется топологическими элементами: вершинами, рёбрами или гранями. Для выбора части операнда достаточно указать в параметрах операции на закладке " Части операндов " один из этих элементов. На рисунке ниже показана возможность применения выборочной булевой операции "Сложение", при выполнении которой в результирующем теле остаются только выбранные части второго операнда.

В некоторых ситуациях выбранный топологический элемент явно не определяет нужную часть. Например, как показано на картинке ниже, выбранная грань принадлежит нескольким наружным частям операнда. Для того чтобы однозначно определить нужную часть надо построить 3D узел на этой грани и при помощи опции " Выбор точки " выбрать этот 3D узел. При этом грань выбирать не нужно.

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

Эта возможность позволяет:

1. Ускорить процесс пересчета булевой операции за счет того, что указан конкретный тип контакта.

2. В некоторых случаях без указания соответствия невозможно получить результат булевой операции. Например, при контакте сплайновой и аналитической поверхностей (булева операция между цилиндром и гранью спирали на картинке ниже).

В команде предусмотрены четыре типа соответствия:

Полное совпадение – границы топологических элементов совпадают с заданной точностью.

● Включение – границы второго элемента лежат в пределах границ первого элемента.

Частичное совпадение – границы одного элемента частично совпадают с границами другого элемента.

● Проецирование – совпадение отпечатков границ топологических элементов.

В таблице ниже представлено описание типов соответствия для различной топологии операндов:

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

На рисунке ниже показано задание соответствия в булевой операции "Сложение" между полусферой и конусом, имеющими совпадающие основания. Если будет задано соответствие по совпадению граней основания и выбран точный метод, то в этом случае невозможно будет получить результат булевой операции, т.к. при пересечении операндов есть еще одно общее ребро, не описанное в соответствиях. В этом случае единственно возможным будет приближенный метод, при реализации которого будет найдено это пересечение.

Сглаживание новых рёбер

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

Отсутствие одного из операндов

При создании булевой операции можно установить параметр " Допускается возможность отсутствия одной из исходных операций ". Этот прием часто применяется в параметрических моделях, когда для определённого исполнения модели нужно исключить один из элементов. Как показано на рисунке ниже гайка может иметь два исполнения: с проточкой и без неё. Для того чтобы реализовать эти исполнения в одной модели можно подавить второй операнд при этом будут сохранены все последующие операции, созданные на основе булевой (в примере это сохранение косметической резьбы на грани булевой операции).

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

Создание булевой операции

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

Для создания операции нужно выполнить следующие действия:

1. Выбрать булевы операнды.

2. Выбрать тип булевой операции.

3. Выбрать части операндов для формирования выборочной булевой операции (не обязательно).

4. Задать соответствия элементов (не обязательно).

5. Задать дополнительные параметры (при необходимости).

6. Задать параметры сглаживания (не обязательно).

7. Подтвердить создание операции.

Основные параметры операции

Выбор операндов

Выбор операндов для глобальной булевой операции

Для выбора операндов глобальной булевой операции используется следующая опция:

<1> Выбрать булевы операнды

При этом в автоменю становятся доступными опции:

Выбрать первое тело

Выбрать второе тело

При активизации одной из этих опций фокус ввода перемещаемся в соответствующее окно выбора первых или вторых операндов в окне свойств. И на оборот, переключаясь между окнами выбора операндов в окне свойств, в автоменю активизируется соответствующая опция. Выбрать тела в качестве первых или вторых операндов можно непосредственно в 3D сцене или в окне дерева 3D модели. Тела первых операндов подсвечиваются в сцене зеленым цветом, тела вторых операндов – желтым. Выбранный в окне свойств операнд подсвечивается в сцене синим цветом.

Для удаления любого операнда из списка нужно после его выбора в окне " Свойства " нажать кнопку [ Удалить ].

Для отмены выбора всех операндов служит опция:

Отменить выбор всех операндов

После создания булевой операции тела операндов будут удалены из сцены и останется только результирующее тело. Для каждого операнда может включить параметр " Оставлять в сцене ". В этом случае после создания операции тело операнда с включенным этим параметром будет оставлено в сцене.

Если в качестве операнда выбирается листовое тело, то нужно задать интерпретацию этого тела. Возможны три варианта интерпретации листового тела: непосредственно как листовое тело, либо как верхнее или нижнее полупространство. В зависимости от того, как оно определяется системой, будут сформированы различные результаты булевой операции. Определить листовые тела можно при помощи выбора соответствующих значений в выпадающих списках параметров интерпретации операндов.

Выбор операндов для локальной булевой операции

Для перехода в режим выбора граней для создания локальной булевой операции можно воспользоваться опцией автоменю:

<3> Выбрать локальные грани

Грани " в окне " Свойства ".

При этом в автоменю становятся доступными следующие опции:

Выбрать локальные грани первого операнда

Выбрать локальные грани второго операнда

После выбора операндов можно, при помощи указанных опций автоменю или перевода фокуса ввода в окна закладки " Грани ", выбирать грани тел в сцене для создания локальной булевой операции. Во время создания булевой операции можно не выбирать операнды, а сразу переключиться в режим выбора граней. При этом тела, грани которых выбраны, будут автоматически добавлены как операнды на соответствующую закладку в параметрах операции. Маркировка граней первых и вторых операндов аналогична выбору операндов-тел. Для удаления грани нужно выбрать её в списке на закладе " Грани " и нажать кнопку [ Удалить ]. В некоторых случаях необходимо включить параметр " Обрезать по граням первых операндов " для формирования правильного результата операции.

Для отмены выбора всех локальных граней служит опция:

Отменить выбор локальных граней

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

Выбор типа булевой операции

Выбор типа операции осуществляется либо с помощью параметра " Тип операции " в окне " Свойства ", либо с помощью следующих опций автоменю:

<+> Сложение

<-> Вычитание

<*> Пересечение

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

Выбор частей операндов

Для создания выборочной булевой операции служит следующая опция:

<2> Выбрать части операндов

Также для активизации этого режима можно переключиться на закладку "

Выбрать элемент, определяющий часть операнда

Выбрать точку, определяющую часть операнда

При помощи этих опций можно выбрать элементы, определяющие части операндов. Имена выбранных элементов будут добавлены в список на закладке " Части операндов " в окне " Свойства ". На этой же закладке можно выбрать действие для выбранных частей операндов: оставлять их в результирующем теле или исключать. Это действие устанавливается для всех выбранных частей операндов.

Для отмены выбора частей операндов служит опция:

Отменить выбор элементов, определяющих части операндов

Для задания соответствия элементов служит опция:

<4> Задание соответствий элементов

Также для активизации этого режима можно переключиться на закладку " ". При этом в автоменю становятся доступными следующие опции:

Выбрать первый элемент

Выбрать второй элемент

Отмена выбора всех элементов

При помощи этих опций элементы для задания соответствия выбираются попарно. Имена выбранных элементов отображаются на закладке " Соответствия " в окне " Свойства ". Для всех пар элементов может быть установлен точный или приближенный метод. Тип соответствия выбирается из списка параметра " Тип " на этой закладке.

Следует отметить, что набор типов соответствия в этом списке может быть разным в зависимости от сочетания топологических элементов в паре (см. таблицу в параграфе " Задание соответствия элементов ").

На этой закладке может быть установлена точность соответствия.

Предварительный просмотр результатов булевых операций

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

Предварительный просмотр результата операции

Предварительный просмотр изменений, вносимых операцией

Дополнительные параметры операции

Продолжение рёбер операндов

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

Выбор типа результирующего тела

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

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

Копирование по образцу

Если в качестве одного из операндов используется 3D массив, то, включив параметр " Копирование по образцу ", можно значительно сократить время выполнения булевой операции.

Возможность отсутствия одного из операндов

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

Сглаживание новых ребер

Для включения режима сглаживания новых рёбер, полученных пересечением граней первых и вторых операндов, нужно включить параметр " Сгладить новые рёбра ". После этого становится доступна группа параметров, позволяющая выбрать тип сглаживания (" Скругление ", " Фаска ") и величину сглаживания (параметр " Радиус ").

Материал новых граней

Может быть выбрано одно из трех значений:

● “ Материал 1-го операнда ”. В этом случае для новых граней будет назначен основной материал, либо материал покрытия, если он задан, в соответствии с этими параметрами первого операнда. Если первых операндов несколько и они с разными материалами, то на новых гранях будет сохранён материал того операнда, который участвовал в формировании этих граней.

● “ Материал 2-го операнда ”. При этом значении материал граней второго операнда, которые участвовали в формировании новых граней, перенесется на эти новые грани. Это может быть и основной материал, и материал покрытия, если он задан, и даже материал операции назначения материала. Например, в результате булевой операции "Вычитание"между первым операндом с материалом сталь и вторым операндом с материалом черный пластик на созданных гранях результирующего тела будет наложен материал черный пластик. Если вторых операндов несколько и они с разными материалами, то на новых гранях будет сохранён материал того операнда, который участвовал в формировании этих граней.

● “ Основной материал 1-го операнда ”. Действие этого параметра аналогично первому параметру (“ Материал 1-го операнда ”), за исключением случая, когда задан материал покрытия, материал покрытия на новых гранях не применяется. Например, если в детали с основным материалом "Сталь" и с покрытием "Медь" с помощью булевой операции проделать отверстие, то внутри оно будет выглядеть стальным в соответствии с основным материалом.

Особенности работы с булевыми операциями

Отображение булевой операции в окне "3D Модель"

После создания булевой операции она помещается в папку "Булевы" в окне " 3D модель ". Слева от каждой булевой операции отображается пиктограмма, обозначающая тип операции ( Сложение, Вычитание, Пересечение). Особым образом булевы операции отображаются в дереве 3D модели. При раскрытии структуры Тела булева операция показывается в виде пиктограммы слева от второго операнда. На рисунке справа показана "Булева операция_2": пересечение первого операнда "Вращение_1" со вторым операндом "Выталкивание_2".

При нажатии на пиктограмме слева от второго операнда в дереве модели вызывается контекстное меню для булевой операции. Также контекстное меню для булевой можно вызвать из контекстного меню для второго операнда в дереве модели.


Создание булевой операции в дереве 3D модели

В дереве 3D модели можно создать булеву операцию без явного вызова команды создания.

Используя метод Drag&Drop , можно выбрать одно тело в дереве 3D модели и удерживая левую кнопку мыши перетащить его на другое тело. В этом случае будет автоматически создана булева операция "Сложение". Если при этом удерживать нажатым Вычитание ". Если вместо удерживать нажатым будет создана булева операция " Пересечение ". Перетаскиваемое тело будет вторым операндом, а тело, на которое перетаскивают – первым операндом.

Автоматическое создание булевых операций при создании других операций

При создании многих операций T-FLEX CAD возможно автоматическое создание булевой операции. Создаваемое тело при этом всегда является вторым операндом булевой операции. В качестве первого операнда выбирается любое из уже существующих тел 3D модели.

Для создания булевой операции необходимо:

1. Включить режим создания булевой операции с помощью опции автоменю:

Булева операция создаётся при нажатой пиктограмме.

2. Выбрать тип создаваемой операции с помощью опции автоменю, содержащей выпадающий список:

Интеллектуальный

Принцип действия интеллектуального режима:

Если создаваемое тело и выбранное тело (явно или неявно) имеют пересечение объемами - тип булевой операции: вычитание .

Если создаваемое тело полностью лежит внутри выбранного тела - тип булевой операции: вычитание .

Если создаваемое тело касается выбранного тела – тип булевой операции: сложение .

Если условия, указанные в пунктах 1, 2, 3, не выполнены, или выбранное тело лежит внутри создаваемого, или при определении типа проникновения тел возникла ошибка – тип булевой не определен, булева операция не будет создана .

3. Выбрать первый операнд булевой операции (в некоторых случаях – необязательное действие) с помощью опции автоменю:

Если в сцене присутствует всего одно тело, то оно выбирается автоматически. Создаваемое в операции новое тело является вторым операндом булевой операции.

После подтверждения создания операции сначала создается тело, а затем выполняется булева операция заданного типа.


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

Удаление булевой операции

Если булева операция находится на верхнем уровне дерева, то при её удалении в дереве модели останутся Тела операндов этой булевой операции. Если же у булевой операции есть потомки, то при её удалении будет выдан диалог " Удаление элементов ".

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

На рисунке ниже показана структура Тела_1. Сначала была создана булева операция “Вычитание” операции “Круговой массив_1” из операции “Вращение_1”, а затем на грань результирующего тела булевой операции была нанесена “Резьба_1”. Если теперь удалить операцию “Булева_1” с попыткой исключения элемента из дерева модели и в диалоге “Выбор операции для переназначения потомков” выбрать операцию “Вращение_1”, то операция “Резьба _1” станет потомком операции “Вращение_1.

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

Булевы операции с 3D фрагментами

Использование 3D фрагментов в качестве операндов является уникальной возможностью T-FLEX CAD. Благодаря этому значительно расширяются возможности создания параметрических 3D моделей и сборок. При вставке 3D фрагмента в сборку есть возможность автоматически создавать булеву операцию с телами сборки. Более подробно о возможностях использования 3D фрагмента в качестве операнда можно посмотреть в описании команды "3D Фрагмент " в разделе " Создание булевой операции на основе 3D фрагмента " и в описании команды ST: Параметры документа в разделе " Закладка 3D ".

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


Нанесение резьбы при помощи булевой операции

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

Следует заметить, что резьба на грани второго операнда должна быть " Внутренней ", для того, чтобы на результирующем теле резьба в отверстии также была создана как " Внутренняя ".

В диалоге параметров операции, вызываемом опцией , можно задать общие параметры операции .

Для редактирования созданной операции используется команда 3EB.

Цель работы : Изучение основных приемов размножения объектов с помощью функции «массив»; изучение технологии создания объектов с помощью булевых операций.

Булевы операции

Булевы операции (часто их называют логическими) пришли в 3D графику из математики, точнее, из булевой алгебры (названной в честь ее создателя - Джорджа Буля) и основаны на понятиях объединения, пересечения и исключения. В 3D Studio Max существует три основных булевых операции, результаты применения которых показаны на рисунке 1:
  1. Объединение (соединение объектов в один).
  2. Пересечение (в булевый объект входят только общие части исходных объектов).
  3. Исключение (вырезание).
Рисунок 1. Результаты применения булевых операций.
Объединение . Результирующий объект, полученный объединением двух объектов, содержит все точки двух исходных объектов-операндов, за исключением дубликатов общих точек.

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

Вычитание . Объект, который получается в результате выполнения этой логической операции, содержит только точки первого объекта за исключением тех точек, которые являются общими для двух объектов. Операция логического вычитания одного объекта из другого является некоммутативной. Другими словами, разность А - В – это не то же самое, что разность В - А .

Использование булевых операций

Булевы операции в 3D Studio Max можно выполнять только над двумя объектами. Эти объекты должны пересекаться, т.е. содержать общие точки. Булевы операции позволяют создавать составные объекты, выполняя операции объединения, вычитания и пересечения частей двух объектов. К булевым операциям можно получить доступ следующим образом (рис. 2).
Рисунок 1. Получение доступа к булевым операциям.

Вначале требуется выделить объект, который будет участвовать в операции первым, т.е. будет объектом А в одном из окон проекций. Затем необходимо щелкнуть на вкладке Create (Создать) панели команд и на кнопке Geometry (Геометрия). В раскрывающемся списке под этой кнопкой выберите режим Compound Objects (Составные объекты). В ветви Object Type (Тип объекта) щелкните на кнопке Boolean (Булевы операции). В панели команд появится свиток с операциями, которые можно выполнять применительно к объектам. Булевы операции упоминают в сочетании с еще одним термином – операндом. Операнд – это переменная, присвоенная выбранным объектам во время выполнения операции. Операнд во многом подобен переменным, используемым в алгебре при составлении уравнений. Например, переменные А и В можно использовать для представления двух объектов, к которым будет применена булева операция.

  • Union (Объединение). Эта функция объединяет два объекта в один и удаляет перекрывающиеся или накладывающиеся области.
  • Intersection (Пересечение). Эта функция создает объект, который содержит только перекрывающиеся области обоих объектов.
  • Substraction (Вычитание [А-В]) и Substraction (Вычитание [В-А]). Эта операция позволяет удалить один из объектов и любые перекрывающиеся области объектов. При операции данного типа выбор А-В приводит к вычитанию объекта В из объекта А, а В-А – к вычитанию объекта А из В.
  • (Добавлена в старших версиях программы) Cut (Разрез). Эта функция рассекает операнд А операндом В. Она работает аналогично модификатору Slice (Сечение), который позволяет рассечь каркас. Обратите внимание на наличие четырех вариантов вырезания: Refine (Уточнение), Split (Расщепление), Remove Inside (Удаление внутри), Remove Outside (Удаление снаружи).
  • Операция Refine добавит в операнд А новые вершины и ребра в местах его пересечения с операндом В. Операция Split рассечет объект на два куска. Операции Remove Inside и Remove Outside удалят из операнда А все грани, которые находятся, соответственно, внутри и снаружи операнда В.
Создание булевых объектов

Объекты типа Boolean (Булевы) создаются за счет применения к оболочкам двух трехмерных тел операций булевой алгебры. Оболочки исходных тел, участвующих в булевой операции – операнды (operands ), обязательно должны пересекаться. Из двух объектов, участвующих в булевой операции, один должен быть выделен до ее начала (операнд А), а другой (операнд В) указывается в ходе операции. После выделения одного из объектов, необходимо выбрать переключатель той операции, которую нужно выполнить. После того, как эти элементы выбраны, следует выбрать переключатель одного из типов копирования:

  • Move (Переместить) – в этом случае в логической операции участвует сам объект. Он пропадет после выполнения операции.
  • Сору (Копия) – в операции участвует копия второго объекта. Сам объект остается при этом без изменения.
  • Reference (Ссылка) – в операции принимает участие ссылка на второй объект.
  • Instance (Экземпляр) – в операции принимает участие экземпляр второго объекта.
Затем потребуется щелкнуть на кнопке Pick Operand В (Выбрать операнд В) и, как только она будет выделена, в окне проекции необходимо выбрать второй объект, применительно к которому нужно выполнить булеву операцию. Приступая к созданию булевых объектов, следует помнить, что иногда они нестабильны и в определенных ситуациях могут приводить к нежелательным результатам. Поэтому, прежде чем применять булевы операции, рекомендуем создать резервную копию текущего проекта, чтобы в случае повреждения объектов их можно было восстановить. В процессе работы с булевыми функциями обнаруживается, что иногда булевы объекты ведут себя крайне нестабильно в случае применения нескольких булевых операций в отношении одних и тех же объектов. Один из возможных методов разрешения этой проблемы – преобразование объекта в редактируемый каркас перед выполнением каждой булевой операции. Это может уменьшить вероятность получения нежелательных результатов.

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

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

Одним из наиболее удобных и быстрых способов моделирования является создание трехмерных объектов при помощи булевых операций.

Например, если два объекта пересекаются, на их основе можно создать третий объект, который будет представлять собой результат сложения, вычитания или пересечения исходных объектов.

Модели, создаваемые в трехмерной графике, можно условно разделить на две группы - органические и неорганические. К первой категории относятся объекты живой природы, такие как растения, животные, люди, ко второй - элементы архитектуры, а также предметы, созданные человеком (автомобили, техника и др.).

Разница подходов к моделированию объектов первой и второй группы столь велика, что в зависимости от конкретных задач для реализации проекта могут использоваться различные пакеты для работы с трехмерной графикой.

Поскольку в 3ds max основной акцент делается на моделирование неорганических объектов, то есть архитектурную визуализацию и разработку компьютерных игр, то булевыe операции - это незаменимый инструмент для каждого пользователя 3ds max.

С другой стороны, они совсем не подходят для создания большинства органических объектов. Например, смоделировать лицо человека при помощи булевых операций практически невозможно.

Рассмотрим булевыe операции. На рис. 3.51 представлено исходное изображение. В 3ds max 7 доступны четыре типа булевых операций.

  • Union (Сложение). Результатом булевого сложения двух объектов будет служить поверхность, образованная поверхностями объектов, участвующих в данной операции (рис. 3.52).
  • Intersection (Пересечение). Результатом булевого пересечения двух объектов будет поверхность, состоящая из общих участков этих объектов (рис. 3.53).
  • Subtraction (Исключение). Результатом булевого исключения двух объектов будет поверхность, состоящая из поверхностей первого и второго объектов, но не включающая в себя общие участки этих объектов (рис. 3.54).

Рис. 3.51. Расположение объектов перед выполнением булевых операций

Рис. 3.52. Объекты после выполнения булевой операции Union (Сложение)

Рис. 3.53. Объекты после выполнения булевой операции Intersection (Пересечение)

Рис. 3.54. Объекты после выполнения булевой операции Subtraction (Исключение)

  • Cut (Вычитание). Результатом булевого вычитания двух объектов будет служить поверхность, образованная исключением из поверхности одного объекта участков, занятых вторым объектом (рис. 3.55).

Рис. 3.55. Объекты после выполнения булевой операции Cut (Вычитание)

Булевы операции выполняются следующим образом.

1. Выделите первый объект, который будет участвовать в образовании конечной модели.

2. Перейдите на вкладку Create (Создание) командной панели, выберите в категории Geometry (Геометрия) строку Compound Objects (Составные объекты) и нажмите кнопку Boolean (Булева операция) (рис. 3.56).

3. Установите параметры булевой операции.

4. Воспользуйтесь кнопкой Pick Operand В (Выбрать операнд), чтобы выбрать второй объект, который будет участвовать в операции.

Рис. 3.56. Настройки объекта Boolean (Булева операция)

ПРИМЕЧАНИЕ

Несмотря на то что булевыe операции 3ds max 7 широко применяются при создании трехмерных проектов, они имеют ряд недостатков, и построение оболочки результирующей модели нередко происходит с ошибками. По этой причине многие разработчики трехмерной графики используют в своих проектах дополнительный модуль Power Booleans . Он позволяет создавать модели с более точной геометрией, чем те, которые можно получить, используя стандартные средства, а также быстрее строит полигональную сетку. Это особенно заметно при работе с объектами, имеющими большое количество полигонов.

Моделирование с использованием булевых операций подробно рассмотрено в разд. «Урок 6. Моделирование винта».

БУЛЕВА ОПЕРАЦИЯ

Булева операция предназначена для создания нового тела на основе двух или нескольких уже существующих тел. В результате выполнения операции создается новое тело, являющееся комбинацией исходных тел. Существуют три способа комбинирования исходных тел: сложение, вычитание и пересечение. Результатом операции “сложение” будет тело, включающее в себя часть, которая есть только у первого тела, часть, которая есть только у второго тела, и часть, которая является общей для обоих тел. Результатом операции “вычитание” будет тело, которое является вычитанием второго тела из первого, и будет состоять из части, которая есть только у первого тела. Результатом операции “пересечение” будет тело, которое является пересечением двух тел, и будет состоять только из части, которая является общей для обоих тел.

Задание булевой операции

Для задания булевой операции используется команда “3B:Создать Булеву операцию” . Вызов команды:

После вызова команды становится возможным выбор одной из двух опций:

Выбрать несколько операций.

Каждая опция, определяет способ создания булевой операции. Существует два способа

- создание булевой операции на основе двух тел (опция )

- создание булевой операции на основе нескольких тел (опция )

При вызове команды всегда активизирована опция “Выбрать первое тело”.

Существует еще один способ вызова команды: Подведите курсор к одной из операций модели и

нажмите , в появившемся меню выберите пункт “Создать”. Появится список возможных команд, которые можно вызвать при выборе операции. Выберите пункт “Создать булеву операцию”, при этом выбранное тело будет являться первым выбранным элементом команды.

Трёхмерное моделирование

В этом случае можно создать операцию только на основе двух тел.

Создание булевой операции на основе двух тел

При выполнении булевой операции на основе двух тел, необходимо выполнить следующие действия:

1. Выбрать первое тело.

2. Выбрать второе тело.

3. Выбрать тип операции (сложение, вычитание, пересечение).

4. Завершить ввод.

Выбор первого тела осуществляется с помощью опции

Выбрать первое тело.

После выбора первого тела становятся доступны следующие опции

Выбрать второе тело.

Отменить выбор второго операнда булевой операции.

Булева операция

На приведенном примере показан чертеж детали, для которого были выполнены необходимые трехмерные построения и с помощью операций выталкивания и вращения созданы два тела. На рисунках показаны ситуации, возникающие при различных способах выполнения булевой операции. Приведенный выше рисунок (изображение справа) отражает результат операции сложение. Результат этой операции визуально ничем не отличается от исходного состояния, когда существовали два разнородных тела. Но выполнение булевой операции необходимо для того, чтобы построенный объект стал единым целым. Тогда можно рассчитывать различные характеристики этого тела: объем, площадь поверхности и т.д. Для исходных тел может использоваться различный материал, а результирующее тело имеет единый материал.

На нижнем рисунке слева показан результат операции вычитания, а справа – пересечения.

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

Создание копий исходных операций

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

Создать копию исходных операций.

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

Трёхмерное моделирование

Если была вызвана опция "Создать копию", то перед выполнением булевой операции производится выполнение специального действия. В результате этого действия создаются тела - копии исходных тел, которые в дальнейшем можно использовать. Поясним вышесказанное на примере. На рисунке показаны исходные 2D построения и две созданные булевы операции.

Вначале были созданы три тела: два параллелепипеда на основе прямоугольного профиля и цилиндр. Затем была выполнена булева операция вычитания из первого параллелепипеда цилиндра. В результате образовался параллелепипед с отверстием. Но такую же операцию необходимо выполнить и со вторым параллелепипедом. Для этого на этапе выполнения первой булевой операции использовали опцию "Создать копию" для второго тела (цилиндра). Поэтому после первой булевой операции по-прежнему осталось три тела: параллелепипед с отверстием, второй параллелепипед и копия цилиндра. Затем выполнили вторую булеву операцию между параллелепипедом и цилиндром.

Создание булевой операции на основе нескольких тел

После вызова команды в автоменю становится доступной опция

Выбрать несколько операций.

Данная опция устанавливает режим создания булевой операции на основе нескольких тел. А также делает доступной опцию

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

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

Отменить выбор всех операций можно опцией

<К> Отменить выбор операций.

Настало время познакомиться с логическими операциями и новым типом данных – Булево.

Самая простая логическая операция – это операция Равно. Она выясняет, равны между собой два значения или нет.

Эта операция определена для значений любых типов: для чисел, для строк, для дат и так далее. Важно лишь, чтобы оба значения, которые вы сравниваете, были одного и того же типа. Например, два числа или две строки.

Логическая операция Равно обозначается знаком «=». В подавляющем большинстве случаев логические операции используются в инструкциях Если и Цикл. Но эти инструкции вам пока незнакомы.

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

Рис. 3.79. Заготовка для операции «Равно»

Теперь внутри скобок напишите операцию Равно. Например, 5 = 5.

Затем напишите еще одну инструкцию присваивания, но так, чтобы в операции Равно участвовали разные числа. Например, 5 и 2.

Запустите «1С:Предприятие» в режиме отладки и посмотрите, чему равны переменные в этих инструкциях (рис. 3.80).

Рис. 3.80. Значение «Истина» и значение «Ложь»

Вы увидите, что там, где сравниваются два одинаковых числа, результатом является значение Истина. А там, где сравниваются разные числа, результатом является значение Ложь. К тому же оба этих значения имеют тип Булево (ударение на букву «у»).

Логических операций во встроенном языке, как и в жизни, довольно много. Все они интуитивно понятны, и нет особой надобности в том, чтобы тренироваться в их использовании. Единственное, что может вызвать трудность, – это то, какими символами они обозначаются. Но в этом вам поможет таблица 3.1.

Таблица 3.1. Операции сравнения

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



А вот оставшиеся четыре операции (больше/меньше) можно применять только к двум числам, двум строкам или к двум датам.

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

Булевы операции

А сейчас можно познакомиться с самыми интересными логическими операциями. Кроме операций сравнения есть еще группа логических операций, которые называются булевы операции.

Если операции сравнения можно было выполнять (в основном) над числами, строками и датами, то булевы операции выполняются только со значениями типа Булево. То есть со значениями Истина и Ложь.

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

Для этих примеров вам понадобится записывать булевы значения прямо в тексте программы, то есть использовать литералы. Так вот, литералы типа Булево выглядят очень просто. Значение Истина обозначается Истина, а значение Ложь обозначается Ложь.

Например, если вы хотите создать переменную, которая будет описывать погоду за окном, вы можете написать так (рис. 3.81).

Рис. 3.81. Литерал значения «Истина»

А если в другой переменной вы хотите уточнить, есть на улице дождь или нет, вы можете написать так (рис. 3.82). Попробуйте и посмотрите, чему равны переменные.

Рис. 3.82. Литерал значения «Ложь»

Обратите внимание, что платформа раскрашивает слова Истина и Ложь красным цветом. Потому что это специальные зарезервированные слова. И это значит, что переменную с таким именем, если вам вдруг захочется, создать нельзя.

Чтобы познакомиться с первой булевой операцией, создайте две переменные: ЯУмеюПлавать и РядомЕстьМоре. Задайте им те значения, которые есть на самом деле. А в книге, для примера, я присвою им значение Истина (рис. 3.83).



Рис. 3.83. Переменные «ЯУмеюПлавать» и «РядомЕстьМоре»

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

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

А теперь посмотрите (рис. 3.84), как эта же фраза выглядит на встроенном языке.

Рис. 3.84. Операция «И»

Чтобы сказать то же самое на встроенном языке, используется операция И. Как она работает, вы можете проверить сами на этом примере, изменив значения переменных.

Плавать в море вы будете только в том случае, когда оно есть рядом и вы умеете плавать. Если моря рядом нет, то плавать просто негде. А если вы не умеете плавать, то у вас тоже ничего не получится. Это очень опасно, вы можете утонуть. Ну, а если и моря нет, и плавать вы не умеете, то тем более поплавать в море вам не удастся.

Теперь решите другую задачу. Создайте две переменные УМеняЕстьЛодка и УМеняЕстьПлот. Можете задать им любые значения. А в книге, для примера, я присвою им значение Истина (рис. 3.85).

Рис. 3.85. Переменные «УМеняЕстьЛодка» и «УМеняЕстьПлот»

Теперь вам нужно с помощью логической операции узнать, сможете вы переплыть через озеро или нет.

Сначала попробуйте сказать это обычными словами. Наверное, получится что-то вроде «если у меня есть плот или лодка, то я могу переплыть через озеро».

А теперь посмотрите (рис. 3.86), как эта же фраза выглядит на встроенном языке.

Рис. 3.86. Операция «ИЛИ»

Чтобы сказать то же самое на встроенном языке, используется операция ИЛИ. Как она работает, вы можете проверить сами на этом примере, изменив значения переменных.

Если у вас есть лодка, вы можете переплыть через озеро? Да.

А если у вас не лодка, а плот – тогда сможете? Да, сможете.

А если у вас есть и лодка, и плот? Конечно! Даже два раза! Один раз на лодке, а другой – на плоту (шутка)!

А в каком случае вам не удастся переплыть через озеро? Правильно. Когда у вас нет ни лодки, ни плота.

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

Создайте три переменные: ЯУмеюПлавать, РядомЕстьМоре и РядомЕстьБассейн. Задайте им те значения, которые есть на самом деле. А в книге я снова не буду усложнять и присвою им значение Истина (рис. 3.87).

Рис. 3.87. Переменные «ЯУмеюПлавать», «РядомЕстьМоре» и «РядомЕстьБассейн»

А вопрос, решением которого вы займетесь, будет практически тем же самым. Чему будет равна переменная ЯБудуПлавать?

Если вы будете отвечать словами, то скажете: «Я буду плавать, если я умею плавать и рядом есть море или бассейн». Попробуйте записать это на встроенном языке (рис. 3.88).

Рис. 3.88. Переменная «ЯБудуПлавать»

На первый взгляд кажется, что все хорошо. Но нужно проверить.

Например, вы не умеете плавать. В этом случае не важно, есть рядом бассейн или нет: плавать вы не должны. Но что говорит вам программа? Попробуйте (рис. 3.89).

Рис. 3.89. «ЯБудуПлавать = Истина»

Программа говорит вам, что плавать вы будете. Получается какое-то «опасное» программирование. С таким программированием и утонуть недолго!

В чем же дело? Может быть, вы написали неправильные операции? Нет, правильные.

Просто вы не учли, что если несколько булевых операций встречаются в одном выражении, у них есть определенный порядок выполнения. Точно так же, как было с арифметическими операциями +, -, * и /.

Сначала выполняется операция И, а затем уже выполняется операция ИЛИ. А если подряд встречаются несколько одинаковых операций, то они выполняются в той последовательности, в которой написаны.

Поэтому в примере выражение было посчитано таким образом (рис. 3.90).

Рис. 3.90. Порядок вычисления выражения

Сначала была выполнена операция И, которая дала Ложь. А затем операция ИЛИ, результатом которой явилась Истина.

На самом же деле для вас в этом выражении важны две вещи. Что вы умеете плавать и что есть, где плавать. А море это или бассейн – не так важно.

Поэтому правильным решением будет РядомЕстьМоре ИЛИ РядомЕстьБассейн заключить в скобки (рис. 3.91). Попробуйте.

Рис. 3.91. «ЯБудуПлавать = Ложь»

Тогда платформа сначала вычислит то выражение, которое в скобках. То есть узнает, есть, где плавать, или плавать негде. А потом уже поинтересуется вашим умением плавать (рис. 3.92).

Рис. 3.92. Порядок вычисления выражения

Чтобы закрепить этот пример, немного измените его условие. Создайте три переменные: ЯУмеюПлавать, РядомЕстьМоре и РядомЕстьВанна. Задайте им те значения, которые были в последнем примере: Ложь, Истина и Истина (рис. 3.93).

Рис. 3.93. Переменные «ЯУмеюПлавать», «РядомЕстьМоре» и «РядомЕстьВанна»

А вычислить нужно будет переменную, которая называется ЯБудуКупаться. Будьте внимательны: имя переменной изменилось не просто так.

Попробуйте записать выражение на встроенном языке и потом сравните с тем, что на рисунке 3.94.

Рис. 3.94. «ЯБудуКупаться = Истина»

Запустите «1С:Предприятие» в режиме отладки и посмотрите, какой получается результат, если изменить значения переменных.

Почему в этом случае скобки не понадобились, хотя пример внешне очень похож на предыдущий? Скобки не понадобились потому, что «естественный» порядок выполнения логических операций в этом выражении вполне вас устраивает (рис. 3.95).

Рис. 3.95. Порядок вычисления выражения

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

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

В заключение нужно сказать еще об одной булевой операции – операции НЕ. Она очень простая. Она возвращает булево значение, противоположное тому, которое имеется.

Чтобы посмотреть, как она работает, вы можете использовать пример, показанный на рисунке 3.96.

Рис. 3.96. Операция «НЕ»

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

  • сначала выполняется то, что в скобках;
  • затем операция НЕ;
  • затем операция И;
  • затем операция ИЛИ.

Инструкция «Если»

Наконец настало время познакомиться с еще одной инструкцией, которая используется во встроенном языке.

Если бы вы использовали только инструкцию присваивания, то ваша программа выглядела бы как прямая дорога из пункта «А» в пункт «Б». От начала к завершению (рис. 3.97).

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

Но на самом деле большинство программ выглядят по-другому. Между началом программы и ее завершением существует много разных путей, по которым может пойти исполнение программы (рис. 3.98).

Рис. 3.98. Много путей из пункта «А» в пункт «Б»

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

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

Именно для того, чтобы направить исполнение программы по одному или по другому пути, существует инструкция Если. Выглядит она очень просто (рис. 3.99).

Рис. 3.99. Инструкция «Если»

Она позволяет выделить несколько инструкций, которые будут выполняться не всегда, а только тогда, когда в результате вычисления логического выражения получается Истина.

Слова Если, Тогда и КонецЕсли являются обязательными в этой инструкции. Логическое выражение пишется между словами Если и Тогда. А КонецЕсли показывает, где заканчиваются инструкции, выполнение которых зависит от условия.

Чтобы посмотреть, как это работает, сделайте небольшой пример. Создайте переменную и запишите в нее свой возраст. А затем создайте другую переменную, ЯИдуВДетскийСад, и присвойте ей значение Истина. Но эту переменную создайте только в том случае, если вы еще не достигли школьного возраста. Чтобы не запутаться, будем считать, что школьный возраст начинается с 7 лет.

Когда вы сделаете свой пример, сравните его с тем, что на рисунке 3.100.

Рис. 3.100. Пример

Установите точку останова на строке Если …, запустите «1С:Предприятие» в режиме отладки и посмотрите значение выражения МойВозраст < 7 (Shift + F9) (рис. 3.101).

Рис. 3.101. Значение выражения «МойВозраст < 7»

Вы увидите, что оно равно Ложь. И это правильно. Ваш возраст больше, чем 7 лет.

Раз выражение ложно, значит, платформа должна пропустить все инструкции, которые написаны внутри инструкции Если. Проверьте это с помощью пошагового исполнения (F11). Сделайте один шаг (рис. 3.102).

Рис. 3.102. Один шаг исполнения

Действительно, платформа перейдет на строку КонецЕсли. А если вы шагнете еще раз, то она остановится на строке КонецПроцедуры. При этом значение переменной ЯИдуВДетскийСад будет Неопределено, потому что эта инструкция не выполнялась и такая переменная даже не создавалась.

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

Чтобы это сделать, вам потребуется сначала перезапустить отладку. Для этого выполните команду Отладка – Перезапустить (рис. 3.103).

Рис. 3.103. Перезапустить отладку

После того как отладка перезапустится, исполнение снова остановится на строке Если… Откройте локальные переменные (если это окно у вас закрыто).

Дважды щелкните мышью по ячейке со значением 25 (рис. 3.104).

Рис. 3.104. Изменение значения переменной

Она перейдет в режим редактирования. Введите 6 и нажмите Enter.

С этого момента значение переменной МойВозраст будет равно 6. А вы можете продолжать отладку так же, как и раньше.

Посмотрите значение выражения МойВозраст < 7. Теперь оно будет равно Истина (рис. 3.105).

Рис. 3.105. Значение выражения «МойВозраст < 7»

Сделайте один шаг. Исполнение зайдет «внутрь» инструкции Если (рис. 3.106).

Рис. 3.106. Один шаг исполнения

Теперь, если вы сделаете еще пару шагов, вы дойдете до конца процедуры. А значение переменной ЯИдуВДетскийСад будет равно Истина.

До сих пор вы рассматривали самую простую форму инструкции Если. На самом деле она может быть более сложной. Смотрите.

В вашем примере «особенные» действия выполняются только в том случае, когда ваш возраст меньше 7 лет. Но представьте, что вам нужно принять решение из двух вариантов. Если меньше 7 лет, вы идете в детский сад. А во всех других случаях вы идете в школу. Как это записать на встроенном языке?

Оказывается, очень просто. Для этого используется ключевое слово Иначе (рис. 3.107).

Рис. 3.107. Ключевое слово «Иначе»

Доработайте пример так, чтобы в результате его работы у вас создавались две переменные: ЯИдуВДетскийСад и ЯИдуВШколу. И чтобы они принимали правильные значения (Истина или Ложь) в зависимости от возраста, указанного в переменной МойВозраст.

Сравните свой результат с тем, что показано на рис. 3.108.

Рис. 3.108. Доработанный пример

Запустите «1С:Предприятие» в режиме отладки и проверьте по шагам правильность работы примера для разных значений возраста. Изменяйте возраст прямо в процессе отладки.

Очень часто в инструкции Если анализируется не одно, а несколько условий. Например, в одно прекрасное утро вы проснулись и вспомнили, что вам нужно идти учиться. Но вы не помните, куда именно: в детский сад, в школу или в институт.

Зато вам известны правила. До 7 лет нужно идти в детский сад. После детского сада нужно идти в школу. Учиться в школе заканчивают в 18 лет. А в 19 лет поступают в институт.

Чтобы записать этот алгоритм на встроенном языке, вам понадобится еще одно ключевое слово – ИначеЕсли (рис. 3.109).

Рис. 3.109. Ключевое слово «ИначеЕсли»

В вашем примере его нужно будет написать вместо ключевого слова Иначе. А затем написать условие, при котором вам нужно идти в школу.

А в конце примера вы снова добавите слово Иначе и укажете, что во всех остальных случаях вы идете в институт. Попробуйте сделать пример самостоятельно.

Чтобы проверить свой результат, сравните его с рисунком 3.110.

Рис. 3.110. Пример «Я иду в институт»

В режиме отладки пройдите по разным веткам инструкции Если и посмотрите, как она работает.

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

В этом заключается особенность инструкции Если, о которой нужно помнить и которую нужно учитывать. Если вы откроете локальные переменные, то увидите, что после выполнения примера переменная ЯИдуВИнститут может оказаться не определена. Например, если ваш возраст равен 15 (рис. 3.111).

Рис. 3.111. Переменная «ЯИдуВИнститут» не определена

А если возраст равен 20, то не определены окажутся переменные ЯИдуВДетскийСад и ЯИдуВШколу (рис. 3.112).

Рис. 3.112. Не определены переменные «ЯИдуВДетскийСад» и «ЯИдуВШколу»

А ведь в «живой» программе вы наверняка будете создавать подобные переменные не просто так, а для того чтобы использовать их в дальнейшем. И если какой-то из этих переменных не окажется, ваша программа работать не сможет.

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

Есть гораздо более простое и удобное решение. Прямо перед инструкцией Если вы создаете все переменные, которые вам понадобятся. И присваиваете им некоторое стандартное значение – значение «по умолчанию». Например, Ложь.

Рис. 3.113. Другой вариант примера

Сделайте этот пример в своей конфигурации и посмотрите, как он работает.

При любых значениях возраста будут существовать все переменные. И они будут иметь правильные значения (рис. 3.114).

Рис. 3.114. Все переменные определены

Красивая программа

Я уже говорил раньше, что ваша конфигурация должна быть красивой. Говорил о том, что имена переменных должны быть удобными, понятными. Говорил, что выражения должны быть записаны понятно и «читабельно». Теперь настал удобный случай рассказать о том, как должен выглядеть текст вашей программы.

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

Если вы этого не заметили, то поставьте маленький эксперимент. В модуле напишите Если а = 2 Тогда. И нажмите клавишу Enter (рис. 3.115).

Рис. 3.115. Синтаксический отступ

Вы увидите, что на новой строке курсор встанет не под буквой Е, а с некоторым сдвигом вправо. Этот сдвиг называется синтаксический отступ. Он помогает вам лучше и легче читать текст программы. Потому что «подчиненные» инструкции, расположенные внутри одной ветки, оказываются выделены визуально (рис. 3.116).

Рис. 3.116. Есть синтаксический отступ

Посмотрите, какая «каша» получилась бы, если бы синтаксического отступа не было (рис. 3.117).

Рис. 3.117. Нет синтаксического отступа

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

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

Рис. 3.118. Текст с нарушенным форматированием

Как с ним быть? Двигать каждую строку вручную, чтобы было «красиво»? Это скучно, долго и неинтересно.

Поэтому в платформе есть команда, которая может сделать это автоматически. Но сейчас вы ее не видите. Панель Текст, в которой расположена эта команда, при стандартных настройках конфигуратора не показывается. Но вы всегда можете ее включить, чтобы команда форматирования была у вас под рукой.

Для этого нажмите правой кнопкой мыши на пустом месте справа в верхней командной панели (рис. 3.119).

Рис. 3.119. Настройка панелей конфигуратора

В появившемся меню щелкните по строке Текст. В нижней части окна появится новая командная панель (рис. 3.120).

Рис. 3.120. Командная панель «Текст» и команда «Форматировать»

В этой панели находится команда Форматировать, которая вам и нужна.

Пользоваться этой командой очень просто. Сначала вы выделяете текст, который нужно отформатировать. Для этого, например, нажимаете мышью на серой полосе в первой строке текста (рис. 3.121).

Рис. 3.121. Начало выделения текста

Затем, не отпуская кнопку мыши, ведете ее до последней строки, которая вам нужна (рис. 3.122).

Рис. 3.122. Выделен текст, который нужно форматировать

И нажимаете кнопку Форматировать. Текст сразу становится красивым и отформатированным (рис. 3.123).

Рис. 3.123. Отформатированный текст

Помимо синтаксического отступа есть и другие способы сделать текст более понятным. Например, один из хороших способов – это добавление пустых строк в текст программы. Они позволяют разделить текст на несколько отдельных смысловых блоков.

Если взять пример с инструкцией Если, то такие смысловые блоки напрашиваются сами собой. Каждая ветка этой инструкции является отдельным смысловым блоком. Поэтому, если перед началом ветки вы добавите пустую строку, это только улучшит читаемость вашей программы (рис. 3.124).

Рис. 3.124. Использование пустых строк

Другой хороший и очень часто используемый прием – создание комментариев. Комментарий – это пояснение к программе, которое находится прямо в тексте программы (рис. 3.125).

Рис. 3.125. Комментарий