Булевы операции. Булевы операции и математическая логика

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

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

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

Для задания булевой операции используется команда “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. Комментарий

Булевы операции и математическая логика

Булевы операции очень близки (хотя и не тождественны) логическим связкам в классической логике . Бит можно рассматривать как логическое суждение - его значениями являются 1 «истина» и 0 «ложь». При такой интерпретации известные в логике связки конъюнкции , дизъюнкции , импликации , отрицания и другие имеют представление на языке битов. И наоборот, битовые операции легко описываются на языке исчисления высказываний .

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

Булевы операции как основа цифровой техники

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

Список битовых операций

И

«(Логическое) И» (and) - аналог конъюнкции в логике. Иногда называется логическим умножением.

Выдаёт 1 если оба входа равны 1, в противном случае 0. Если один из аргументов равен 1, то результат «И» равен другому. Если один из аргументов равен 0, то результат «И» равен 0 независимо от значения другого аргумента.

НЕ

«(Логическое) НЕ» (not), инвертирование - аналог отрицания в логике.

Данная унарная операция (с одним входом) заменяет 0 на 1 и наоборот. Реализующий её элемент называется инвертором .

ИЛИ

«(Логическое) ИЛИ» (or) - аналог дизъюнкции в логике.

Выдаёт 1 если и только если хотя бы один из входов равен 1. Операция, двойственная AND: при инвертировании выхода и всех входов (т.е. при замене 0 и 1 местами) «И» и «ИЛИ» взаимно превращается друг в друга.

Исключающее ИЛИ

«Исключающее ИЛИ» (xor), «сложение по модулю 2» - аналог исключающего ИЛИ в логике.

Если один из аргументов равен 0, то результат равен другому. Если один из аргументов равен 1, то результат равен отрицанию другого аргумента. Первое русское название операции обусловлено тем, что результат данной операции отличается от результата «ИЛИ» только в одном случае из 4 случаев входа - обоих 1 (случай одновременной истинности аргументов «исключается»). Ещё в русской грамматике значение данной логической связки передаётся союзом «либо».

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

Операции от многих аргументов

Операции «И», «ИЛИ» и «исключающее ИЛИ» являются не только коммутативными, но и ассоциативными , и потому легко обобщаются на случай нескольких аргументов (входов).

Прочие бинарные операции

Стрелка Пирса является результатом инвертирования результата «ИЛИ» своих аргументов, выдаёт значение 1 только когда оба входа 0.

«И-НЕ» (nand), или «штрих Шеффера» .

Двойственная стрелке Пирса операция: является результатом инвертирования результата «И» своих аргументов, выдаёт значение 0 только когда оба входа 1. Известна простотой реализации в ТТЛ .

Импликация («если-то») - аналог импликации в логике.

Совпадает с «ИЛИ» с инвертированным первым аргументом, выдаёт значение 0 только когда первый вход 1 а второй - 0. Данная операция не является коммутативной , в отличие от всех вышеописанных бинарных операций. Её можно понимать как арифметическое (меньше или равно).

Эквиваленция . Выдаёт 1 если и только если оба аргумента равны между собой. Является результатом инвертирования результата «исключающего ИЛИ» своих аргументов. Она же и двойственна исключающему «ИЛИ» в вышеописанном смысле.

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

Название→
Аргументы
И (AND) НЕ (NOT) ИЛИ (OR) искл. ИЛИ(XOR) импликация стрелка
Пирса
штрих
Шеффера
x y ()
(x&y)
()
(~x)
()
(x|y)
()
(x^y)
()
((~x)|y)

((~x)&(~y))

(~(x&y))
0 0 0 1 0 0 1 1 1
0 1 0 1 1 1 1 0 1
1 0 0 0 1 1 0 0 1
1 1 1 0 1 0 1 0 0

Операции над битовыми векторами

Обобщение операций на булеву алгебру

Вместо одиночных битов мы можем рассмотреть векторы из фиксированного количества битов (в программировании их называют регистрами), например, байты . В программировании регистры рассматривают как двоичное разложение целого числа: b = b 0 + 2b 1 + 2 2 b 2 + ... + 2 N − 1 b N − 1 , где N - количество битов в регистре.

Тем не менее, ничто не мешает рассматривать эти регистры именно как битовые векторы и проводить булевые операции покомпонентно (бит номер k значения есть результат операция от битов номер k аргументов). Кстати, математически говоря, булевы операции распространяются таким образом на произвольную булеву алгебру . Таким образом мы получаем операции побитового И, ИЛИ, НЕ, искл. ИЛИ и т. д. Как арифметические, данные операции не обладают хорошими свойствами за исключением побитового НЕ, которое для чисел в дополнительном коде совпадает с вычитанием из −1 (~x == -1-x). Однако, они очень полезны в программировании.

Битовые сдвиги

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

Также различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).

Арифметический сдвиг (правый)

Циклический сдвиг

Циклический сдвиг через перенос

Логический сдвиг

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

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

Арифметический сдвиг

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

Циклический сдвиг

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

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

2-адическая интерпретация

Целое число, записанное (в дополнительном коде) в бесконечный (в сторону положительных степеней двойки) двоичный регистр является естественным объектом для теории p-адических чисел при p = 2 . Множество целых 2-адических чисел (т.е. произвольных бесконечных битовых последовательностей) может быть рассмотрено как булева алгебра точно так же как и множество значений битового регистра конечной длины. Все вышеперечисленные битовые операции оказываются непрерывными отображениями . Хотя практическое программирование не располагает регистрами бесконечной длины, это не мешает использовать данный теоретический факт в криптографии для создания быстродействующих алгоритмов шифрования.

Практические применения

Физическая реализация битовых операций

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

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

Наиболее распространены электронные реализации битовых операций при помощи транзисторов , например резисторно-транзисторная логика (РТЛ), диодно-транзисторная логика (ДТЛ), эмиттерно-связанная логика (ЭСЛ), транзисторно-транзисторная логика (ТТЛ), N-МОП логика, КМОП логика и др..

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

Схемы аппаратной логики

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

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

Использование в программировании

Благодаря реализации в арифметическом логическом устройстве (АЛУ) процессора многие их регистровые битовые операции аппаратно доступны в языках низкого уровня . В большинстве процессоров реализованы в качестве инструкции регистровый НЕ; регистровые двухаргументные И, ИЛИ, исключающее ИЛИ; проверка равенства нулю (см. выше); три типа битовых сдвигов, а также циклические битовые сдвиги.

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

Термин «булева операция» в математике используется для обозначения операций сравнения между множествами. В 3D Studio MAX аналогичные операции сравнения применяются в отношении совмещающихся или перекрывающихся геометрических объектов сцены. Булева операция осуществляется путем создания булева составного объекта из двух существующих объектов — данные объекты называются операндами и обязательно должны пересекаться в некоторой области пространства. Операнды представлены в виде отдельных объектов на всей стадии редактирования булева составного объекта, что позволяет при необходимости выбирать и модифицировать их и даже выполнять анимацию.

Теоретические основы булева моделирования

В 3D Studio MAX предусмотрены пять типов булевых операций (рис. 1):

  • Union (Объединение) — результатом операции является объект, который получается вследствие объединения двух исходных объектов; при этом части объектов, оказавшиеся внутри общего внешнего объема, удаляются;
  • Intersection (Пересечение) — полученный объект является результатом пересечения двух исходных объектов; при этом части объектов, оказавшиеся вне общего внутреннего объема, удаляются;
  • (Вычитание (A-B)/Вычитание (B-A)) — результатом является объект, полученный посредством вычитания одного объекта из второго, все части которого отсекаются объемом первого и удаляются;
  • Cut (Вырезание) — полученный объект является результатом вырезания на поверхности первого объекта в местах пересечения со вторым объектом соответствующих отверстий и проемов.

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

Существует несколько методов создания булевых объектов:

  • Copy (Копия) — при создании булева объекта сохраняется оригинал операнда В;
  • Move (Перенос) — при создании булева объекта оригинал операнда В не сохраняется;
  • Instance (Образец) — создается Boolean-объект и одновременно сохраняется копия операнда В; при изменении копии булев объект будет изменяться, а при изменении булева объекта будет меняться копия;
  • Reference (Ссылка) — создается Boolean-объект и одновременно сохраняется копия В-операнда; если при этом изменять оригинал, то Boolean-объект тоже изменится; если же изменять Boolean-объект, то оригинал при этом изменяться не будет.
  • Результат булевой операции не всегда оказывается удачным, поэтому следует соблюдать ряд условий:
  • исходные объекты должны пересекаться в некоторой области пространства, причем характер пересечения нужно тщательно отрегулировать в окнах проекций;
  • исходные объекты должны иметь достаточное количество сегментов и быть сглаженными, иначе результат окажется слишком грубым или совсем не соответствующим задуманному;
  • каркасы должны быть построены правильно — грани, совместно использующие ребро, должны совместно использовать и две вершины, а ребро может совместно использоваться только двумя гранями. Для редактируемых сеток может потребоваться объединение совпадающих вершин вручную в режиме Edit Mesh .

Для примера попробуйте создать булеву операцию вычитания на примере трех перекрывающихся сфер (рис. 2). Выделите центральную сферу, на панели Create установите категорию объектов Geometry , в списке типов объектов укажите тип Compound Objects (Составные Объекты), щелкните по кнопке Boolean и установите операцию Subtraction (A-B) . Обратите внимание, что в начальный момент оказывается определенным лишь операнд A (рис. 3), поэтому для указания операнда B щелкните по кнопке Pick Operand B (Выбрать операнд B), а затем укажите мышью самую большую из сфер. В итоге в сфере, использованной в качестве операнда A, появится выемка (рис. 4). Если операнд B был задан неправильно, не следует сразу же вновь щелкать по кнопке Pick Operand B и указывать другой объект (хотя программа это позволяет), поскольку объект, неудачно выбранный как операнд B , не восстановится (рис. 5). В таких ситуациях нужно сначала отменить предыдущий выбор операнда B командой Undo и только потом сделать новый выбор.

Моделирование при помощи булева объединения

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

Для примера попробуем последовательно объединить три стандартных примитива — две сферы и цилиндр — в форму гантели. Создайте исходные объекты и разместите их по отношению друг к другу нужным образом (рис. 6 и 7). Выделите цилиндр, активируйте булеву операцию Union , для определения операнда B щелкните по кнопке Pick Operand B (Выбрать операнд B ), а затем укажите мышью одну из сфер. В итоге цилиндр и сфера станут единым объектом. Выделите объединенный объект, активизируйте режим создания булевых объектов, щелкните по кнопке Pick Operand B (Выбрать операнд B ) и укажите вторую сферу. Результатом станет получение одного единственного булева объекта (рис. 8).

Моделирование при помощи булева вычитания

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

На первом этапе воспользуемся булевой операцией вычитания для формирования цилиндрического отверстия внутри шара. Создайте исходные объекты в виде шара и цилиндра (радиус сечения цилиндра должен быть меньше радиуса шара, а его длина — больше радиуса шара) и выровняйте их друг в отношении друга по осям X, Y и Z, применив операцию Align (Выровнять) (рис. 9). Проведите рендеринг и сразу же скорректируйте параметры объектов так, чтобы они оказались достаточно гладкими, особенно в области пересечения; если этого не сделать, то созданный булев объект тоже не будет иметь надлежащей гладкости. В данном случае видно (рис. 10), что степень гладкости требуется увеличить — это достигается путем повышения плотности объектов: увеличения количества сегментов и сторон сегментов и уменьшения размера сегментов (рис. 11). В то же время при работе со сложными моделями для ускорения процесса моделирования в ряде случаев лучше увеличивать плотность объектов, задействованных в качестве операндов, не перед созданием булевой операции, а после — в ходе редактирования операндов на уровне объектов.

Выделите цилиндр, установите режим создания булевых объектов, установите операцию Subtraction (B-A) (Вычитание B-A), для указания операнда B щелкните по кнопке Pick Operand B (Выбрать операнд B ) и укажите сферу. Это приведет к удалению внутренней части сферы точно по размеру исходного цилиндра таким образом, что в сфере появится сквозное отверстие (рис. 12).

Формируемые при помощи булева вычитания отверстия могут иметь самую разную форму, а результат зависит не только от размеров и формы объектов, но и от положения их в отношении друг друга, а также от того, какой из объектов был указан первым. Возьмите в качестве исходных объектов куб и шар и разместите их показанным на рис. 13 образом. Выделите куб, установите в режиме создания булевых объектов операцию Subtraction (A-B) и в качестве операнда B укажите сферу — результатом станет появление в ней соответствующего углубления (рис. 14), а потом сохраните результат (он нам позже потребуется). Отмените созданную булеву операцию и примените к исходным объектам булево вычитание Subtraction (A-B) , но в качестве первого операнда укажите сферу — и вместо куба с углублением итогом операции окажется шар, в котором как бы вырезана одна из его четвертей (рис. 15). Стоит отметить, что для получения того же самого результата совсем не обязательно было менять местами операнды: с таким же успехом можно было вместо операции Subtraction (A-B) выбрать операцию Subtraction (B-A) . Подобная взаимозамена операций Subtraction (A-B) и Subtraction (B-A) очень удобна, так как при неверном выборе операнда A не потребуется отменять операцию, а достаточно лишь переключиться с одной операции вычитания на другую.

Как было отмечено, форма получающейся выемки определяется вторым операндом. Попробуйте вместо шара создавать выемки и углубления другими объектами. Например, при применении объекта Hose (Шланг) (рис. 16) может быть получена резьбообразная выемка (рис. 17). Если же взять в качестве операнда B граненую призму Gengon (рис. 18), то выемка окажется многогранной (рис. 19), а при использовании веретена Spindle — скошенной (рис. 20 и 21) и т.п.

Булева операция Intersection (Пересечение) является обратной к булевым операциям Subtraction (A-B)/Subtraction (B-A) (Вычитание (А-В)/Вычитание (В-А), так как получаемые с ее помощью булевы объекты представляют собой фрагменты операндов A и B, которые удаляются при операции булева вычитания, если ее провести в отношении тех же самых объектов. Возьмите в качестве исходных рассмотренные выше куб и шар, выберите куб в качестве операнда A , а затем проведите булеву операцию Intersection (Пересечение) — результатом будет получение четверти шара, которая ранее оказывалась вырезанной в ходе операции Subtraction (B-A) (рис. 22).

Рис. 22. Исходные объекты и булевы объекты при операциях Intersection и Subtraction (В-А)

Более интересные варианты поверхностей создаются при использовании в качестве операнда B скрученных объектов. Можно попробовать получить подобный объект на основе примитива Torus , в исходном состоянии имеющего такой вид, как на рис. 23, а после скручивания (параметр Twist ) на 360° — как на рис. 24. Дополнительно создайте цилиндр, разместите объекты, как показано на рис. 25, и при выполнении булевой операции Subtraction (A-B) укажите цилиндр как операнд A — результат представлен на рис. 26.

Создание вложенных булевых объектов

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

Для примера возьмите ранее созданный и сохраненный булев объект (рис. 27), создайте еще один цилиндр и разместите его так, как показано на рис. 28. Выделите исходный булев объект (для этого придется выйти из списка Compound Objects (Составные объекты) путем выбора геометрии другого типа), активируйте булеву операцию вычитания Subtraction (A-B) и вторым операндом укажите отдельный цилиндр — в кубе появится еще одна выемка (рис. 29). Полученный булев объект можно использовать для новой булевой операции, например вырезав в нем пирамидой треугольную выемку (рис. 30 и 31).

Рис. 29. Результат первой вложенной булевой операции

Редактирование булева объекта

У созданного булева объекта можно изменить цвет; объект можно перемещать, масштабировать и поворачивать обычным образом. При необходимости в области параметров на панели Modify можно откорректировать имена операндов, установить способ отображения булева объекта и определить особенности его обновления при редактировании. Работая со сложными моделями, которые долго перерисовываются, иногда лучше отказаться от автоматического режима обновления в пользу ручного режима Manually (Вручную) — тогда для перерисовки модели нужно будет щелкать по кнопке Update (Обновить).

Здесь же можно установить опцию Hidden Ops , которая позволяет при просмотре результата видеть в виде сетки операнд, исчезающий при выполнении булевой операции (рис. 32). Данная опция служит для информации о точном местонахождении операнда и о его влиянии на булеву операцию и часто используется при создании анимации.

Кроме того, булев объект можно редактировать на уровне операндов. Рассмотрим это на примере изучения взаимосвязи между положением операндов по отношению друг к другу и внешним видом булева объекта. Создайте в качестве исходных объектов два цилиндра и разместите их так, как показано на рис. 33. Выделите меньший из объектов, установите булеву операцию вычитания Subtraction (B-A) и вторым операндом укажите другой цилиндр, вследствие чего в большем цилиндре появится отверстие (рис. 34). Данное отверстие не будет сквозным, что обусловлено исходным положением цилиндров.

Полученный результат можно изменить, причем для этого даже не потребуется отменять булеву операцию, поскольку операнды булева объекта в определенной степени редактируемы, причем независимо друг от друга: их можно выделять, перемещать, масштабировать и поворачивать по отношению друг к другу, меняя таким образом сам булев объект. Редактирование операндов осуществляется в режиме Sub-Object , для перехода в который нужно при выделенном булевом объекте раскрыть свиток Boolean панели Modify , подсветить строку Operands , а затем указать редактируемый операнд (рис. 35) и произвести над ним нужные манипуляции. При перемещении операнда или любой другой манипуляции над ним в проекции Perspective будет сразу же отображаться обновленный булев результат. Для примера переместите в окне проекции Left операнд A влево — по мере перемещения глубина отверстия будет увеличиваться (рис. 36), а при обратном перемещении — уменьшаться (рис. 37). Если продолжить перемещение операнда A влево, то в конце концов отверстие станет сквозным (рис. 38), а при обратном движении превратится в едва заметную выемку (рис. 39).

Аналогичным способом можно не только перемещать и поворачивать операнды, но и менять их размеры. Попробуйте для операнда A провести масштабирование инструментом Select and Uniform Scale —— таким способом можно менять размеры выемки, например сделать ее очень большой по диаметру (рис. 40) или, наоборот, очень маленькой. Для того чтобы вернуться из режима редактирования операндов в режим редактирования булева объекта, нужно подсветить в палитре Modify строку Boolean — после этого операции масштабирования, перемещения и поворота будут относиться ко всему булеву объекту в целом.

Операнды можно редактировать и на уровне объектов: менять длину, ширину, высоту, число сегментов и т.п. Чтобы перевести булев объект в режим редактирования на уровне объекта, на палитре Modify следует активировать строку Operands , выбрать нужный операнд, а затем в списке Boolean щелкнуть на строке под строкой Operands , где, например, в случае использования примитивов будет фигурировать имя примитива в общем виде (рис. 41).

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

Пиала

Создайте в качестве исходных объектов шар и параллелепипед (Box ) и разместите их так, как показано на рис. 42. Шар в окне Perspective не виден, так как его верхняя часть находится внутри параллелепипеда, а нижняя оказалась скрыта. Выделите параллелепипед и примените к нему булеву операцию вычитания Subtraction (B-A) , указав шар вторым операндом, — в итоге останется только нижняя половина шара (рис. 43). Выделите созданный булев объект, конвертируйте его в редактируемую сетку, выбрав из контекстного меню команду Convert To=>Convert to Editable Mesh (Конвертировать в => Конвертировать в редактируемую сетку), и перейдите в режим редактирования полигонов. Поскольку работа предстоит довольно кропотливая, перейдите в режим отображения одной проекции, щелкнув на кнопке Min/Max Toggle (рис. 44).

Теперь потребуется последовательное применение операций Bevel , масштабирования и Extrude (Вытеснение). Вначале сделайте фаску, установив значение справа от Bevel (Фаска) равным примерно –1 (рис. 45). Затем примените операцию масштабирования и уменьшите выделенную часть объекта, а потом удалите самый верхний фрагмент половины шара посредством операции Extrude (рис. 46). Нанесите небольшую фаску для скашивания удаляемой поверхности, еще раз проведите масштабирование и примените операцию Extrude — и действуйте так до тех пор, пока заготовка не станет напоминать грубую чашу (рис. 47). Для сглаживания поверхности примените модификатор MeshSmooth (Сглаживание сетки) — возможно, в итоге пиала станет напоминать представленную на рис. 48.

Примерно такую же пиалу можно получить и более быстрым способом, но тоже с применением булевых операций. Возьмите в качестве основы полученную выше в ходе булева вычитания нижнюю половину сферы (рис. 49), создайте ее копию, потом немого уменьшите ее в размерах инструментом Select and Uniform Scale , выровняйте по осям X, Y и Z, щелкнув по кнопке Align (рис. 50), а затем слегка переместите вверх. Выделите меньшую полусферу и создайте новый булев объект с помощью булева вычитания Subtraction (B-A) , указав в качестве операнда B большую полусферу (рис. 51). Полученная после сглаживания пиала представлена на рис. 52.

Волчок

Создайте конус (Cone ) (рис. 53). Сформируйте объект Box (Коробка) и выровняйте его командой Align по конусу по осям X, Y и Z (рис. 54). Сделайте копию второго объекта, а затем разместите объекты, как показано на рис. 55. Выделите конус, установите в режиме создания булевых объектов операцию Subtraction (A-B) и в качестве операнда B укажите объект Box 01 (рис. 56). Затем повторите данную операцию, но операндом A в этом случае станет созданный перед этим булев объект, а операндом B — объект Box 02 (рис. 57). Создайте новый конус с параметрами, указанными на рис. 58, а затем выровняйте его по булеву объекту по осям X, Y и Z (рис. 59).

Выделите булев объект и сделайте его зеркальное отображение по оси Z с формированием копии, щелкнув по кнопке Mirror Selected Object (Зеркальное отображение выделенного объекта), и настройте параметры зеркального отображения (рис. 60). Точно таким же образом сделайте зеркальную копию конуса — получится волчок (рис. 61).

Ключ

Попытаемся создать имитацию ключа, предварительно сформировав все его детали путем лофтинга, а затем объединив их при помощи булевой операции. Создайте серию сплайнов примерно такого вида, как на рис. 62: прямоугольник предназначен для использования в качестве сечения loft-объекта, а все остальные сплайны будут играть роль пути. Обратите внимание, что при создании лофт-объектов в данном случае нужно выбрать метод указания сечения, а не пути — иначе после их получения придется потратить много времени на размещение loft-объектов нужным образом. Выделите первую окружность, щелкните по кнопке Geometry Create Compound Objects Object Type (Тип объекта) щелкните на кнопке Loft (Лофтинговый), затем по кнопке Get Shape (Указать путь), и укажите мышью прямоугольник. Выделите вторую окружность и вновь создайте лофтинговый объект, указав в качестве сечения тот же самый прямоугольник. Точно таким же способом создайте лофтинговые объекты для всех остальных сплайнов (рис. 63).

Теперь нужно превратить отдельные фрагменты ключа в единый объект, что проще всего сделать с помощью создания вложенного булева объекта. Выделите первый loft-объект, активизируйте булеву операцию Union , щелкните на кнопке Pick Operand B и укажите второй loft-объект. Создайте новый булев объект, задействовав полученный булев объект как операнд A, а один из loft-объектов — как операнд B и продолжайте до тех пор, пока не объедините все фрагменты ключа. Окончательный результат показан на рис. 64.

Оконная рама

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

Кружка с ручкой

Для основы кружки создайте цилиндр (рис. 67) и конвертируйте его в редактируемую сетку, выбрав из контекстного меню команду Convert to=>Convert to Editable Mesh (Конвертировать => Конвертировать в режим редактирования сетки). Активируйте режим редактирования вершин Vertex и выделите внутренние вершины только верхнего сечения (рис. 68) — проще всего выделить все внутренние вершины (верхнего и нижнего сечений) на проекции Top , а затем при нажатой клавише Alt исключить вершины нижнего сечения на проекции Front . Перетащите на проекции Front выделенные вершины инструментом Select and Move вниз таким образом, чтобы сформировалась внутренняя пустая полость кружки (рис. 69). Не снимая выделения, активируйте инструмент Select and Uniform Scale и отмасштабируйте выделенную область так, чтобы внутренние вершины совпали в вершинами промежуточного яруса (рис. 70), а внутренняя полость кружки стала одинаковой по диаметру как в верхней части кружки, так и в нижней.

На проекции Top выделите внутренние вершины верхнего и среднего сечений (рис. 71) — это удобнее осуществить, вначале выделив все внутренние вершины с областью выделения Circular Selection Region , а затем исключив вершины нижнего сечения при нажатой клавише Alt областью выделения Rectangular Selection Region . Отмасштабируйте их на проекции Top так, чтобы радиус, на котором они расположены, приблизился к внешнему радиусу, а толщина стенки кружки уменьшилась (рис. 72). На проекции Front выделите оказавшиеся в ходе масштабирования за пределами объекта вершины верхнего сечения (рис. 73) и переместите их вниз (рис. 74). Аналогичную операцию проведите в отношении внутренних вершин нижнего сечения (рис. 75).

Для создания ручки к кружке активизируйте категорию объектов Shapes (Формы) командной панели Create (Создание), в списке разновидностей объектов укажите тип Splines (Сплайны) и инструментом Line (Линия) постройте криволинейный сплайн (рис. 76), который будет использован как путь при построении лофтингового объекта. Создайте эллипс для использования в качестве сечения loft-объекта. Выделите эллипс, щелкните по кнопке Geometry (Геометрия) командной панели Create (Создать) и выберите в раскрывающемся списке разновидностей объектов вариант Compound Objects (Составные объекты). В свитке Object Type (Тип объекта) щелкните по кнопке Loft (Лофтинговый), потом по кнопке Get Path (Указать путь) и укажите мышью предварительно созданный сплайн пути. Поместите созданную ручку на ее место, отрегулировав ее положение на всех проекциях (рис. 77). Рассмотрев объект со всех сторон, вы увидите, что некоторые фрагменты ручки выступают в полости кружки, а потому их стоит удалить. Для этого конвертируйте ручку в режим редактируемой сетки, выделите лишние вершины (рис. 78) и нажмите клавишу Del .

Чтобы кружка и ручка стали единым целым, нужно объединить их при помощи булевой операции. Выделите кружку, установите выполнение операции Union , щелкните по кнопке Pick Operand B , а затем по ручке — объекты объединятся. При этом на панели Modify будет видно, что исходными элементами булевой операции является объект типа Editable Mesh (Редактируемая сетка) и loft-объект (рис. 79). Подберите для булева объекта нужные параметры сглаживания и проведите рендеринг — линия соединения ручки с кружкой станет практически незаметной (рис. 80).

Головка для накидного гаечного ключа

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

Создайте два цилиндра и соедините их между собой булевой операцией объединения (рис. 81). Затем создайте два сплайна — звезду и линию (рис. 82), выровняйте звезду относительно большего цилиндра по осям X, Y и Z (рис. 83). Создайте loft-объект, указав линию в качестве пути, отрегулируйте его положение относительно объекта из цилиндров (рис. 84). Вырежьте соответствующую полость из большого цилиндра, выделив многогранный лофтинговый объект, активировав булеву операцию вычитания Subtraction (A-B) и указав цилиндры в качестве операнда B , в результате чего внутри большого цилиндра появится многогранная полость (рис. 85).

Создайте параллелепипед, ширина и высота которого одинаковы и по размеру немного меньше диаметра вырезанной полости. Поместите его внутрь большего цилиндра и выровняйте по осям X и Z (рис. 86). На основе уже созданного булева объекта и параллелепипеда сформируйте вложенный булев объект, вырезав параллелепипедом соответствующую полость внутри большого цилиндра (рис. 87). Затем создайте цилиндр с меньшим радиусом, чем радиус меньшего из уже имеющихся цилиндров, поместите его внутрь меньшего цилиндра и выровняйте по осям X и Z (рис. 88). Вырежьте данным цилиндром полость внутри меньшего из цилиндров вложенного булева объекта при помощи операции булева вычитания и получите деталь, представленную на рис. 89, которая будет иметь примерно такой же вид, как головка для накидного гаечного ключа.

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Помимо "Глобальной" булевой операцией в 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.