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

Подписаться
Вступай в сообщество «shango.ru»!
ВКонтакте:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ПРИМЕЧАНИЕ

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

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

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

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

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

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

Поэтому знакомиться с операцией Равно вы будете с помощью инструкции присваивания. В ней эта операция будет выглядеть немного странно, поэтому для пущей важности вы заключите ее в скобки (рис. 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. Комментарий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ОСНОВНЫЕ ПОНЯТИЯ КУРСА

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

Полный цикл проектирования изделия называют НИОКР. Это комплекс мероприятий, состоящий из научных исследований и производства опытных и мелкосерийных образцов продукции, который предшествует запуску нового продукта в промышленное производство. В структуре НИОКР предметом приложения методов геометрического моделирования являются опытно-конструкторские работы.

ОКР выполняются после завершения НИР при условии получения на этом этапе положительных результатов с точки зрения удовлетворения целей будущим изделием.

Основные этапы ОКР изложены в ГОСТ 15.001-88.”Система разработки и постановки продукции на производство”.

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

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

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

4 этап. Разработка технического проекта, содержащего окончательно выбранное и проработанное проектное решение. Окончательные выводы принимаются в ходе выполнения проверочных расчётов, в результате которых происходит уточнение или корректировка основных параметров изделия, полученных на предыдущем этапе.

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

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

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

В настоящее время в машинной графике используются три вида геометрического моделирования. Это каркасное моделирование, поверхностное моделирование и твёрдотельное моделирование.

На данном этапе развития графических систем твёрдотельное моделирование является стандартом в 3D CAD/CAM/CAE-системах проектирования.

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

Для реализации подобного круга задач появились 3D системы среднего класса. Это Solid Works, AutoDesk Inventor, SolidEdge, а также отечественные Компас 3D и T-FLEX CAD.

Чертёж в этих системах играет вспомогательную роль, а способы его создания основаны на методах отображения пространственной модели.

Структура создания твёрдотельного геометрического объекта представлена на следующей схеме.



Обратная связь

Алгоритм твёрдотельного моделирования позволяет создавать сложные геометрические модели через механизм последовательного применения булевых операций к набору элементарных объёмных тел, составляющих сложную модель. Промежуточные состояния при образовании сложного объекта автоматически фиксируются в иерархической модели данных. Следовательно, эта модель отображает на экране монитора весь процесс формоизменения сложного геометрического объекта. В графических системах данная иерархическая модель называется CSG – деревом (Constructive Solid Geometry tree) или дословно конструктор твёрдых тел.

В структуре CSG-дерева процесс последовательного моделирования сложного геометрического объекта представлен в виде следующих булевых операций над элементарными телами:

а) вычитание б) объединение в) пересечение.

Булевы операции над элементарными телами

Моделирование с помощью булевых операций - это общая и часто используемая методика. Булевы операции весьма близки к традиционным методам создания скульптур и моделирования. В 3D Studio MAX булево моделирование становится еще более полезным за счет реализации составного булевого объекта. В отличие от модификатора моделирования составной булев объект состоит из двух объектов, называемых операндами, которые представляют булеву операцию. Эти операнды остаются в виде объектов столько, сколько необходимо, и обеспечивают возможность доступа к своим параметрам и стекам модификаторов.

Составной булев объект отличается от многих программных понятий булевых операций, поскольку он не изменяет на постоянной основе формы, определяющие геометрию операндов. Позже эту геометрию можно перемещать, переопределять и производить обмен. Поскольку операнды остаются объектами, с ними можно взаимодействовать как с любым другим объектом. Для них можно даже выполнять анимацию, создавая поразительные эффекты. Затененные видовые окна 3DS МАХ позволяют видеть результат булевой операции в случае изменения операндов. Последнее является преимуществом интерактивного режима работы и вызывает ощущение, что один объект используется для вырезания другого. Оставаясь весьма полезными и развлекательными, сложность булевых операций может возрасти при вложении их одна в другую. В этой главе приводится информация, позволяющая упростить использование булевых операций. Внимание уделяется:

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

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

Как и для многих терминов компьютерной графики, термин "булева" происходит от имени человека, который ввел это понятие (в данном случае это Джордж Буль). В математике термин "булева" появился для обозначения операции сравнения между множествами; в 3D Studio MAX подобное сравнение выполняется между геометрическими объектами. Хотя булева операция выглядит во многом похожей на модификатор, она находится на панели Create, а не на панели Modify, поскольку выполняется определение нового объекта из двух существующих (аналогично созданию loft- или morph-объектов). Булева операция в 3D Studio MAX выполняется путем создания булевого составного объекта из двух существующих объектов, которые называются операндами , при этом выполняются следующие шаги:

  1. Выберите начальный объект для булевой операции.
  2. Выберите Compound Objects (составные объекты) из списка выборки Geometry в панели Modify и затем щелкните на кнопке Boolean.
    Выбранный объект становится операндом А для составного булевого объекта. Теперь можно выбрать операнд В.
  3. Выберите требуемый тип операции (Operation:).
  4. Щелкните на Pick Operand В (выбрать операнд В) и затем выберите второй объект.
    Объекты сравниваются для определения их действительности (с точки зрения выполнения булевой операции) и, если они действительны, булева операция выполняется.
    Теперь можно изменить тип операции и увидеть различные булевы результаты.

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

ПРЕДУПРЕЖДЕНИЕ Можно щелкнуть на кнопке Pick Operand В и выбрать другой Operand В произвольное количество раз. При выборе нового операнда В первоначальный операнд со сцены удаляется. При выборе в качестве операнда В неправильного объекта щелкните на кнопке Undo перед выбором другого операнда В.

Булевы выражения в качестве составных объектов

Чрезвычайная гибкость булевых операций в 3DS МАХ состоит в том, что объекты, содержащие булевы операнды, по-прежнему существуют как объекты. Каждый операнд сохраняет свой первоначальный стек Edit History (отредактировать историю) и его можно модифицировать из панели Command. Операнды можно даже трансформировать на уровне подобъекта. На рисунке 11.2 показан результат в Track View после создания булевого объекта.

Архитектура ссылок и экземпляров 3DS МАХ демонстрирует свою мощь при работе с булевыми объектами. При первом создании булевого составного объекта можно выбирать опцию перемещения, создания копии, экземпляра или ссылки объекта, выбранного в качестве операнда В. Опцией по умолчанию является Move (переместить) и кажется, что она создает явное действие, поскольку остается только булев результат. Оба объекта, выбранные для булевой операции, теперь являются операндами подобъектов. Остальные опции выполняют булев результат с копией, экземпляром или ссылкой на выбранный объект. Во всех трех случаях объект, выбранный для операнда В, остается без изменений, а булев результат получается с использованием нового объекта в качестве операнда. В таких случаях может показаться, что ничего не произошло, до тех пор пока не переместить или не скрыть один из этих двух объектов.

ПРИМЕЧАНИЕ Из объекта, выбранного в качестве операнда В, удаляется любая анимация трансформации, в то время как операнд А (первоначальный объект) оставляет анимацию трансформации. Если операнд А имеет анимацию трансформации, для нового статического операнда используется текущее расположение кадра, его позиция и масштаб.

Хотя можно сделать копию, экземпляр или ссылку операнда В, для операнда А такой опции не существует (объект выбирается после щелчка на Boolean). Гибкий метод обхода такого ограничения заключается в кло-нировании до экземпляров всех объектов, которые предполагается использовать в булевых операциях. После этого следует использовать опцию по умолчанию Move для выборок операнда В, обеспечив возможность модификации любых объектов в рамках булевого объекта и сохранения их отношений.

СОВЕТ Чтобы создать экземпляр из объекта, который уже является операндом, войдите в Track View. Скопируйте определение объекта операнда (указано синим кружком) в буфер обмена и вставьте его в определение другого объекта в виде экземпляра. Этот метод можно также использовать в обратном порядке, полностью переопределяя геометрию операндов, например путем изменения всех квадратных отверстий на круглые.

После создания булевого объекта можно заменить операнд В из панели Modify булевого объекта с теми же самыми выборами, предоставленными при создании. Используйте эту опцию осторожно, поскольку она уничтожает со сцены первоначально выбранный операнд В. Уничтожение оригинала может создать проблему при первоначальном использовании опции Move и представлении геометрии, которая уже не существует в виде отдельного объекта. Выбор другого операнда - это то же самое, что и замена определения объекта операнда в Track View, за исключением случая, когда необходимо сделать ссылку, которая не присутствует в Track View.

После создания булевого объекта можно вернуться к каждому Modifier Stack операнда на панели Modify (см. рис. 11.3). При первом входе в панель Modify булевого объекта не выбран ни один из операндов, поэтому Modifier Stack показывает только Boolean. Для модификации стека конкретного операнда необходимо произвести выбор из списка Operands. Теперь выбранный операнд отображает свой стек. Можно настроить любой модификатор в стеке или добавить новые модификаторы для оказания влияния на объект операнда перед булевой операцией. На параметры, с которыми можно выполнять анимацию, дополнительных ограничений не существует. Для трансформации операнда необходимо активизировать режим Sub-Object для булевого объекта. При таком подходе операнды можно считать подобными гизмо за тем исключением, что в отличие от гизмо, у операндов имеются собственные Modifier Stack.

Опции обновления

Опции Update (обновления) для булевых операций управляют тем, как фактически выполняются булевы вычисления. Для сложных объектов булевы вычисления могут занимать достаточно большое время. Эти вычисления замедляют редактирование других объектов, если они являются экземплярами или ссылками на булевы операнды. Если при моделировании возникают паузы, измените опцию Update. Опция Manually (вручную) является одним из наиболее консервативных методов и обеспечивает наибольшее управление вычислением операций. Такой режим наиболее пригоден для сложных моделей. Метод When Rendering (во время визуализации) не вычисляет операцию до тех пор, пока не будет выполнена окончательная визуализация, после чего производится возврат откорректированного результата на сцену. Метод When Selected (при выборе) несколько ненадежен в обновлении результата и на него не следует полагаться.

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

СОВЕТ Длительные булевы вычисления можно завершить, нажав клавишу Escape во время отображения курсора ожидания. После такого завершения режим Update автоматически переходит в Manually, поэтому теперь можно точно управлять временем вычисления обновления (поскольку геометрия, по всей вероятности, является сложной).

Интерактивные булевы операции

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

ПРИМЕЧАНИЕ Для сложных булевых операций режим Update для булева выражения должен быть установлен в Manually, чтобы операнд можно было позиционировать без дополнительных задержек на вычисления. После помещения операнда на требуемое место щелкните на Update для просмотра нового результата.

Понимание опций Display (отображения) булевой операции является ключевым моментом при выполнении интерактивных изменений. Результат булевой операции показывает опция по умолчанию Result (результат). При изменении опции на Operands (операнды) отображаются оба операнда А и В так, как будто булевой операции не выполнялось. Полностью отображенный операнд скрывает булев результат, поэтому в некоторой степени приходится работать вслепую. На практике лучше всего является комбинация, при которой выбирается Result и активизируется опция Show Hidden Ops (показать скрытые операнды). При этом недостающие операнды отображаются в виде проволочных каркасов (но только в затененных видовых окнах) и обеспечивается информация о точном местонахождении операнда и о его текущем влиянии на булеву операцию.

ПРИМЕЧАНИЕ Помните, что операнд всегда можно присвоить другому контроллеру объекта или контроллеру уникального Path, Look At (посмотреть на) или Expression (выражение) для создания эффектов, подобных анимированным кусочкам сверла или ожогам лазера.

Вложенные булевы объекты

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

После создания булевого объекта на той же самой геометрии можно выполнять дополнительные булевы операции путем выбора объекта в качестве операнда А для нового составного булевого объекта. Каждый раз при выполнении на объекте булевой операции фактически создается оригинал операнда нового булевого объекта. Таким образом определяется "булево дерево", состоящее из одиночных ветвей - весьма линейная прогрессия шагов. К каждой выполняемой булевой операции можно осуществить доступ позже, хотя применяемый для этого метод требует небольшой практики, поскольку все это происходит на панели Modify. Результаты выполнения трех последовательных булевых операций показаны на рисунке 11.4. Коробка вычитает сферу, затем цилиндр и, в конце концов, конус.

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

При выполнении нескольких булевых операций, одну за другой, следует соблюдать осторожность. После завершения операции и, таким образом, составного булевого объекта, необходимо выйти из диалога Boolean или последующий выбор заменит только что выполненную операцию и удалит объект со сцены. Хотя для этого требуются дополнительные щелчки на кнопках, необходимо выйти из списка Compound Objects (составные объекты) путем выбора геометрии другого типа (например, Path Grids) и затем вернуться к Compound Objects для определения следующего булевого объекта.

При навигации по булевому дереву в Track View необходимо помнить, что в нем отражаются только объекты с параметрами, с которыми можно выполнить анимацию. Если булев объект создан из необработанного каркаса или лоскута, показываются только трансформации операнда, поскольку у него нет параметров создания, которые нужно настраивать. Когда для этого же объекта задается модификатор, для модифицированного объекта создается новый вход. То, что у операнда такая же метка, что и у Transform (с голубым кружком модификатора вместо зеленого треугольника контроллера) может привести к замешательству. При глубоком погружении в дерево, изображенное ранее на рисунке 11.4, следите за голубыми кружками Operand. Только самый глубокий операнд А содержит определение объекта; определения всех других объектов находятся внутри предыдущих операндов В.

СОВЕТ При использовании в качестве операндов примитивов Track View перечисляет их параметры под общим заголовком Operand. Задани]е для примитива модификатора, например Material, перемещает параметры создания в сферу модифицированного объекта, расположенную под операндом, вместе с меткой, обозначающей тип объекта.

Булевы характеристики

При создании булевого объекта сохраняются сглаживающие группы и идентификаторы материалов отдельных объектов. К сожалению, проецирование (mapping) полностью удаляется и его необходимо применить после получения окончательного булевого результата. В случае, если объекту присвоено проецирование через модификаторы UVW, его можно восстановить. Если создается копия, но не экземпляр, первоначального объекта или модификатора, присвойте новый UVW Mapping после выполнения булевой операции, и для восстановления проецирования используйте функцию Acquire (приобрести) модификатора. Отметим, что эта операция не работает для процедурных присвоении проецирования.

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

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

Иногда булев результат содержит дефекты в виде петель и искажений. Эти дефекты часто вызваны тем, что аналогичные сглаживающие группы действуют друг на друга методами, которые не должны применяться, или вершины объединяются так, что сглаживание произойти не может. Если такого рода дефекты видны, примените модификатор Edit Mesh, выберите все вершины и выполните Weld Selected (объединить выбранные). Если дефекты не исчезают, необходимо проанализировать присвоения сглаживающих групп (перед булевой операцией или после нее).

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

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

Соображения по улучшению булевых операций

Булев код в 3DS МАХ очень обобщен и позволяет работать с произвольными поверхностями. Однако подобное обобщение означает, что не каждый объект образует действительный булев объект и что некоторые "действительные" результаты могут иметь артефакты (например, длинные грани планки) или содержать нежелательные результаты. Ниже приведен контрольный перечень, который поможет при поиске неисправностей и создании моделей, дружественных для булевых операций:

  • Нормали для всей поверхности должны быть унифицированы без всяких ложных граней, указывающих в неправильном направлении. Нормали граней используются в определении направления поверхности и результирующего булевого объекта.
  • Каркас должен быть построен правильно; это означает, что грани, совместно использующие ребро, должны совместно использовать две вершины, а ребро может совместно использоваться только двумя гранями. (Внутренние основные грани вершин объекта вращения для последнего правила являются типичным кошмаром.)
  • Обеспечивайте объединение всех вершин. Может потребоваться объединение всех вершин вручную с помощью Edit Mesh даже для последовательных булевых операций.
  • Копланарные грани, в особенности те, которые находятся внутри одного и того же объекта, причиняют беспокойство и их следует избегать. Одним из наихудших случаев являются копланарные грани, расположенные тыльными сторонами друг к другу (они легко создаются путем построения примитива с нулевой высотой).
  • Булевы операции надежно работают только с одиночными элементами. Если любой из операндов состоит из множества элементов (например, Teapot или Hedra), в каждый момент времени может успешно работать только один элемент.
  • Если операция не удается, выключите опцию Optimize Result (оптимизировать результат) в нижней части свитка так, чтобы последний проход, контролирующий компланарные грани, не вычислялся. Включенная опция Optimize Result часто может быть причиной получения некорректных результатов.
  • Если операция по-прежнему не удается или создает расщепленные грани, попытайтесь выполнить небольшую настройку операндов.
  • Изменяйте уровень детализации операнда, в особенности возле области, которая является локальной для действующей булевой операции.

Не допускайте того, чтобы этот контрольный перечень испугал вас и заставил избегать булевых операций. Большинство этих опций работает с первой попытки, в особенности если геометрия подчиняется первым трем правилам, а это, скорее всего, будет выполняться при создании геометрии в рамках 3DS МАХ.

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

Вырезание при помощи булевого вычитания

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

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

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

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

Булево пересечение создает объект, который иначе следовало бы "вырезать" при помощи операции булевого вычитания. Результат иногда трудно визуализировать, но он может создать геометрию, которую иначе трудно промоделировать (см. рис. 11.6). Здесь второй операнд действует в качестве разреза в шести направлениях.

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

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

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

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

Булево объединение также применяется для создания двух элементов, которые можно отделить от других при помощи функции Detach в Edit Mesh. Если операция булевого объединения используется для редактирования объектов там, где геометрия перекрывается однократно, каркас не образуется. Когда результирующие объекты разделяются, в каркасе появляется отверстие в месте соединения объектов. Для эффективного использования этого метода лучше всего присвоить каждому операнду уникальный идентификационный номер материала (Material ID#) так, чтобы можно было легко выбирать грани по Material ID# из Edit Mesh при выполнении отсоединения.



← Вернуться

×
Вступай в сообщество «shango.ru»!
ВКонтакте:
Я уже подписан на сообщество «shango.ru»