Операции над объектами. Унифицируем интерфейсы выполнения команд 1c общую команду обычные формы

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

ü Weld (Объединение). Позволяет создать новую фигуру путем объединения двух или более перекрывающихся объектов. Исходные объекты автоматически удаляются. Для заливки нового объекта используется заливка верхнего объекта.

ü Trim (Исключение). Удаляется та часть объекта, которая перекрывает другой объект. Исходные объекты удаляются

ü Intersect (Пересечение). Создает новый объект, образованный из области перекрытия объектов. Исходные объекты сохраняются.

ü Simplify (Упрощение). Позволяет удалять все невидимые, перекрытые другими объектами части.

ü Front Minus Back (Удаление по заднему плану). В результате выполнения команды остается та часть верхней фигуры, которая ничего не перекрывала.

ü Back Minus Front (Удаление по переднему плану). В результате выполнения команды остается та часть нижней фигуры, которую ничто не перекрывало.

Более полный контроль над формированием фигур можно осуществлять, используя докер Shaping (Формирование). Здесь дополнительно можно установить параметры для сохранения исходных или целевых объектов после выполнения команды.

ü если установлен флажок Source Objects (Исходные объекты), то после выполнения команды останется тот объект, который был выделен до выделения команды;

ü при установке флажка Target Object (s) (Целевые объекты) останется тот объект, к которому была применена команда Исключение, Объединение или Пересечение.

Инструмент Knife (Лезвие)

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

ü Auto Close On Cut (Автозамыкание после разреза). После разреза части объекта становятся самостоятельными объектами.

Инструмент Eraser (Ластик)

С его помощью можно интерактивно стирать отдельные участки. Инструмент расположен в наборе инструментов на одной кнопке с инструментом Shape (Форма). На панели свойств настраиваются:

ü Erase Thickness (Ширина ластика) от 0,001 до 100 дюймов

ü Auto reduced On Erase (Сокращение числа узлов после стирания) ‑ снижает сложность фигуры после стирания отдельных ее фрагментов путем уменьшения количества узлов стираемой области

ü Circle/Square (Форма ластика) может быть круглой или квадратной

Инструмент Smudge (Размазывающая кисть)

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

ü Nb Size (Толщина острия). По умолчанию - 0,1 дюйм. Диапазон от 0,03 до 2 дюймов.

ü Использование пера с нажимом. Используется при работе с графическим планшетом.

ü Add Dryout to the effect (Интенсивность). Определяет постепенное изменение размера мазка в соответствии со скоростью перетаскивания указателя мыши. Диапазон от -10 до 10. При значении 0 эффект не проявляется.

ü Fixed value for title setting (Округлость острия). Контролирует форму мазка. Измеряется в градусах. Может принимать значения от 15 (плоское острие) до 90 (эллиптическое острие).

ü Fixed value for bealing setting (Поворот мазка). Мазок располагается под заданным углом.

Практическая работа

Упражнение Использование команд формирования объектов

1. Нарисуйте какие-либо объекты. Расположите их так. чтобы они перекрывали друг друга.

2. Откройте докер Shaping (Windows‑Docker‑Shaping или Arrange‑Shaping)/

3. В раскрывающемся списке в верхней части окна Shaping выберите команду Weld (Объединение)

4. Выделите один из перекрывающихся объектов - он будет исходным для выполнения команды

5. В докере Shaping в группе Leave Original (Сохранять оригинал) выберите, какие объекты должны остаться после выполнения команды - исходный, целевой или оба. Для выполнения команды нажмите кнопку Apply (в нижней части докера). Указатель мыши при этом примет форму жирной стрелки.

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

Повторите задания пунктов 1-6 для команд Trim (Исключение) и Intersect (Пересечение).

Упражнение Применение инструмента Knife (Лезвие)

1. Создайте на странице документа какой-либо объект и выберите инструмент Knife (Лезвие) в наборе инструментов.

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

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

В начальной и конечной точке разреза указатель инструмента должен принимать вертикальное положение!

Упражнение Применение инструмента Eraser (Ластик)

1. Создайте на странице документа какой-либо объект и выделите его инструментом Pick (Выбор).

2. Выберите в наборе инструментов инструмент Eraser (Ластик). Мысленно определите область фигуры, которую вы хотите удалить. На панели свойств задайте форму и ширину инструмента.

3. Установите указатель в выбранном месте и дважды щелкните кнопкой мыши. Фрагмент объекта, соответствующий форме и ширине ластика, будет удален.

4. Теперь сотрите часть объекта, перетаскивая указатель произвольным образом внутри объекта. Как только кнопка мыши будет отпущена, процесс удаления завершится.

5. Для удаления прямолинейного фрагмента можно щелкнуть указателем сначала в начальной точке, а затем - в конечной точке линии.

6. Для стирания ломаной линии инструментом Erase используется следующая последовательность действий:

ü Щелкните начальную точку ломаной линии и ведите указатель мыши инструмента к следующему- узлу (за ним потянется пунктирная линия), дойдя до узла - нажмите клавишу Tab

ü затем ведите указатель к следующему узлу и снова нажимайте клавишу Tab для удаления линии по траектории движения и так далее, пока не удалите необходимый фрагмент линии или всю линию целиком;

ü в конце процедуры нажмите левую кнопку мыши - стирание закончится.

Упражнение 4 Применение инструмента Smudge (Размазывающая кисть)

1. Создайте или выделите фигуру, к которой будет применен инструмент Smudge . Если это -динамическая фигура (прямоугольник, многоугольник, эллипс и т.п.). то обратите ее контур в кривые Ctrl+Q .

2. Выберите инструментSmudge . на панели инструментов установите толщину кисти и другие свойства.

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

Упорядочивание объектов

Команды группирования

При одновременном выделении более одного объекта в строке свойств появляются следующие команды для группирования объектов:

Группировать (сгруппированные объекты выделяются как один) ‑ кнопка Group на панели свойств доступна в случае одновременного выделения двух или более объектов, команда Group из контекстного меню или сочетание клавиш <Ctrl+G >. Группа ведет себя как единый объект, т.е. любые изменения сделанные по отношению к группе распространяются на все объекты внутри группы. Каждый объект группы называется дочерним объектом. Объект в группе выделяется инструментом Pick с зажатой клавишей <CTRL >. Одновременно можно выделить только один объект в группе.

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

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

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

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

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

Полезные ссылки:

  • Объекты конфигурации,
  • Средства разработки.

Команда (Command)

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

Стандартные команды и команды, созданные разработчиком

По отношению к тому, каким образом команда появилась в конфигурации, все команды можно разделить на:

  • Стандартные,
  • Созданные разработчиком.

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

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

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

Например, могут быть добавлены общие команды УстановитьСканерШтрихкодов , НастроитьСканерШтрихкодов и другие.

Навигационные команды и команды действий

По отношению к тому, что является результатом выполнения команды, все команды можно разделить на:

  • Навигационные команды,
  • Команды действий.

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

Например, навигационная команда Склады откроет список складов в основном окне.

В результате выполнения команды действия открывается вспомогательное окно. Как правило таким образом выполняется переход к форме объекта или к форме отчета/обработки. Подробнее...

Например, команда действия Склад откроет вспомогательное окно для редактирования данных нового склада.

Независимые и параметризуемые команды

По отношению к своему внутреннему устройству, все команды можно разделить на:

  • Независимые,
  • Параметризуемые

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

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

Для выполнения параметризуемых команд требуется дополнительная информация - значение параметра команды. Подробнее...

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

Глобальные команды и локальные команды формы

По отношению команд к некоторой форме, все команды можно разделить на.

ГЛАВА 4

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

  • Основные команды и операции
  • Выделение объектов
  • Выделение объектов с выполнением команды
  • Выделение подобъектов
  • Управление видимостью объектов
  • Клонирование объектов
  • Объединение объектов в группы
  • Трансформации объектов

2. Основные команды и операции

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

Основные команды и операции над объектами в среде Мах можно определить по следующим группам:

  • Выделение объектов;
  • Выделение объектов с выполнением команды;
  • Выделение подобъектов;
  • Управление видимостью объектов; Клонирование объектов;
  • Объединение объектов в группы.
  • Трансформации объектов
  • Рассмотрим каждую из них детальнее.

3. Выделение объектов

Выделение объектов

Существует несколько дублирующих друг друга приемов для выполнения и управления операциями выделения объектов. Кроме самого традиционного из них - левого щелчка мыши на выбираемом объекте, эту процедуру можно произвести через группу пунктов Select (Выбор) из падающего меню Edit (Редактирование) (рис. 4.01).

Ниже приводится список этих пунктов с кратким описанием их функций:

  • Select All (Выбрать Все) - позволяет выделить все нескрытые и «размороженные» объекты (смысл этих терминов будет описан далее).
  • Select None (Сбросить Выделение) - снимает выделение со всех объектов сцены.
  • Select Invert (Выбрать Все Невыделенные) - выделяет инверсно все невыбранные объекты.

РИСУНОК 4.01 . Пункты выбора объектов

  • Select By Color (Выбрать По Цвету) - создать выделение по указанному цвету объекта
  • Select By Name (Выбрать По Имени) - выбрать один или несколько объектов по имени из общего списка через диалоговое окно (рис. 4.02).


РИСУНОК 4.02. Выбор объектов по имени из списка

  • Region (Область Выделения) - имеет два переключателя, задающие режим выбора объектов:
  • Window (Охват) - в набор попадают объекты, полностью помещающиеся в область выделения;
  • Crossing (Секущая Рамка) - объекты выбираются, даже если они лишь соприкасаются с областью выделения.

Также выполнение операции выбора объектов можно выполнить с помощью группы кнопок в (рис. 4.03):

РИСУНОК 4.03. Группа кнопок выбора объектов в Основной Панели Инструментов

  • Select Object (Выбрать Объект) - модальная кнопка, включающая режим выбора объектов левым щелчком мыши. По каждому левому щелчку предыдущий выбор сбрасывается и выбранным оказывается лишь один, последний из объектов. Для добавления нового объекта в набор без сброса - левый щелчок выполняется с нажатой клавишей , для исключения выбранного объекта из набора - щелчок совместно с клавишей .
  • Selection Region (Форма Области Выделения) - список кнопок для изменения формы области выделения объектов. Может быть задана как Rectangular (Прямоугольная), Circular (Круглая) или Fence (Ломаная).

Для выбора нужной формы нажмите на эту кнопку (до появления всего списка) и, удерживая левую кнопку мыши, перемещайте курсор по списку, отпустив ее на соответствующей кнопке.

Select By Name (Выбрать По Имени) - кнопка, вызывающая упоминавшееся ранее диалоговое окно Select Objects (Выберите Объекты) (рис. 4.02). Остановимся на его параметрах.

Основное информационное поле содержит список объектов сцены, причем порядок сортировки и способ показа зависит от групп настроек Sort (Сортировка) и List Types (Список Типов).

Первая из них позволяет задавать способ сортировки имен объектов сцены по Alphabetical (Алфавиту), By Type (Типу), Color (Цвету) и Size (Размеру).

Флажки группы List Types управляют правилом, какие из категорий объектов Мах будут показаны в общем списке, а какие - скрыты. Кнопки Аll (Все), None (Ничего) и Invert (Инвертировать) необходимы для быстрого управления всем набором флажков группы.

Дополнительный список флажков в левой нижней части окна управляет следующими параметрами:

  • Display Subtree (Отобразить Иерархию) - включение отображения объектов, имеющих иерархические связи или открытых групп (группы будут рассмотрены далее).
  • Select Subtree (Выделять Иерархию) - включение выбора таких объектов.
  • Case Sensitive (Регистрозависимость) - влияние регистра в наборе имени в верхнем текстовом поле.
  • Select Dependents (Выбор Зависимых Объектов) - выбор объекта вызовет одновременный выбор всех его Instances (Экземпляров) и References (Ссылок).

Кнопки АИ (Все), None (Ничего) и Invert (Инвертировать) над этим списком позволяют быстрое управление выделением имен объектов. И, наконец, список Selection Set (Именованные Наборы) позволяет осуществить выбор одного из нескольких предварительно созданных и названных наборов объектов. Далее в этой главе мы подробно остановимся на создании таких наборов.

Для выбора категории объектов, с которыми производится выделение необходимо использовать Selection Filter (Фильтр Выбора). Этот список позволяет выбрать одну или несколько категорий объектов для работы с ними и исключить остальные.

Значение списка Аll (Все Объекты) применяется ко всем объектам сцены и снимает все ограничения.

Изображение:

Изображение:

4. Выделение объектов с выполнением команды

Выделение объектов с выполнением команды

Остальные кнопки в описывемой группе в Main Toolbar (Основной Панели) все являются модальными и дают возможность, произведя выбор, перейти к выполнению соответствующей команды:

  • Select and Link (Выбрать и Связать) - выполняет операцию иерархической связи подчиненных объектов сцены по типу Parent-Child (Родитель-Потомок).
  • Select and Move (Выбрать и Переместить) - позволяет начать перемещение объекта или объектов сразу после завершения выделения.
  • Select and Rotate (Выбрать и Повернуть) - то же для операции поворота над выбранными объектами.
  • Select and Scale (Выбрать и Масштабировать) - в зависимости от текущего состояния списка кнопок Scale это может быть операция Uniform (Однородного), Non-Uniform (Неоднородного) масштабирования и Squash (Сплющивания) сразу по окончании выбора.

Для создания Named Selection Set (Именованного Набора) необходимо выполнить выделение нужных объектов и ввести уникальное имя в текстовом поле списка имен в Main Toolbar (Основной Панели) (рис. 4.04).

Каждое новое имя добавляется в список имен и сохраняется в файле проекта Мах. Для настроек и изменений именованных наборов служит диалоговое окно Named Selection Set (рис. 4.05), которое вызывается командой Named Selection Sets (Именованные Наборы) в меню Edit, или одноименной кнопкой на основной панели инструментов.


РИС. 4.04. Список Именованных Наборов


РИСУНОК 4.05. Редактирование Именованных Наборов

Кнопки, расположенные в верхней части этого окна позволяют:

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

Изображение:

Изображение:

5. Выделение подобъектов

Выделение подобъектов

Возможность работать с Sub-Objects (Подобъектами) возникает в том случае, если выбранный объект имеет многоуровневую структуру. Подобъектами в среде Мах являются уровни Vertex (Вершина), Segment (Сегмент) и Spline (Кривая) в объектах типа Shape (Форма); Vertex (Вершина), Edge (Ребро), Face (Грань), Polygon (Плоскость) и Element (Элемент) в объектах типа Mesh (Каркас) и т.д. Любой из модификаторов - особых инструментов изменения внутренней структуры объектов - может иметь уровень Sub-Object (Подобъек-та), что отображается в окне Modifier Stack (Стеке Модификаторов). Если знак «+» возле названия модификатора отсутствует, то модификатор не допускает работу с подобъектным уровнем, и наоборот (рис. 4.06).


РИСУНОК 4.06. Выбор Подобъектного Уровня

Для удобства перехода в режим Sub-Object и обратно в контекстном меню выбранного объекта, вызываемого правым щелчком, содержится одноименный пункт (рис. 4.07).


РИСУНОК 4.07. Подобъектный Уровень в Контекстном Меню

Находясь в режиме Sub-Object можно также создавать Named Selection Set (Именованные Наборы) для подобъектов, но доступны они будут только в этом режиме.

Изображение:

Изображение:

6. Управление видимостью объектов

Управление видимостью объектов

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

Все элементы управления видимостью сосредоточены в панели Display (Показ) и в Display Floater (Панели Показа) которую можно вызвать из падающего меню Tools (Инструменты).

Каждый из объектов сцены может иметь несколько уровней видимости:

  • Объект виден и в видовых экранах и при визуализации сцены.
  • Объект виден в видовых экранах, но не отображается и не участвует в визуализации сцены.
  • Объект виден в видовых экранах и отображается при обсчете сцены, но «заморожен» (недоступен) для команд выбора и редактирования.
  • Объект скрыт и не виден ни в видовых экранах, ни при визуализации.

Строго говоря, существут еще несколько вариантов видимости объектов, но они менее характерны и останавливаться на них не стоит.

Наиболее удобен способ управления объектами через Display Floater (Панель Показа), поэтому разберем его детальнее. Эта панель (рис. 4.08) состоит из двух закладок Hide / Freeze (Скрыть / Заморозить) и Object Level (Уровень Объекта).

Первая из них повторяет все основные команды панели Display за исключением некоторых редко используемых. Две группы рельефных кнопок отвечают за команды Hide (Скрыть) и Unhide (Показать), еще две - Freeze (Заморозить) и Unfreeze (Разморозить). Флажок Hide Frozen Object (Скрывать Замороженные Объекты) позволяет замораживать и скрывать объекты одновременно. Рельефные кнопки позволяют скрывать / замораживать Selected (Выбранные), Unselected (Невыбранные) объекты, осуществить выбор By Name (По Имени) и By Hit (По Щелчку).

Закладка Object Level (Уровень Объекта) управляет настройкой Hide By Category (Категориями Скрываемых Объектов) и набором флажков Display Properties (Показ Свойств Объекта). Панель Display Floater (Панель Показа) в любой момент может быть убрана с экрана (левым щелчком по кнопке закрытия) или повторно вызвана.

РИСУНОК 4.08. Плавающая Панель Показа

Изображение:

7. Клонирование объектов

Клонирование объектов

Существует несколько способов создавать копии объектов в Мах. Наиболее используемым является выделение копируемого объекта или группы объектов и применение одной из команд трансформации - Move (Переместить), Rotate (Повернуть) или Scale (Масштабировать) с нажатой клавишей . После завершения выполнения команды происходит вызов диалогового окна (рис. 4.09), где необходимо указать тип создаваемого объекта или группы объектов. Их существует три типа:


РИСУНОК 4.09. Выбор Режимов Клонирования

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

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

  • Instance (Экземпляр) - новый объект является полной копией исходного, и между ними создается следующая двусторонняя логическая связь: любые изменения оригинала сразу же отображаются во всех его экземплярах и наоборот.
  • Reference (Ссылка) - вариант экземпляра, но с односторонней связью. Только изменения оригинала влекут за собой такие же изменения во всех ссылках. Любое изменение ссылок объектов применяется только к конкретному модифицируемому объекту-ссылке.

Остается добавить, что окно Clone Options (Режимы Клонирования) позволяет задавать имя для создаваемых объектов в текстовом поле Name (Имя) и выбирать число новых копий счетчиком Number of copies (Число Копий).

Существует вариант клонирования объектов с использованием пункта Clone (Клонировать) в падающем меню Edit (Редактирование). Его использование вызывает такое же окно Clone Options (Режимы Клонирования), но без возможности изменить число создаваемых копий равное 1. Этот вариант создания копий объектов удобен, если копии должны иметь те же координаты, что и оригинал.

Еще один вариант клонирования состоит в использовании команд Mirror (Зеркало) и Array (Массив).

Первая из них вызывается кнопкой Mirror Selected Objects (Создать Зеркальное Отражение Объектов) из Дополнительное диалоговое окно Mirror: Screen Coordinates (Зеркало: Экранные Координаты) (рис. 4.10) позволяет выбрать ось копирования - X, Y, Z или плоскость копирования - XY, YZ, ZX.


РИСУНОК 4.10. Создание Зеркальных копий объектов

Положение переключателя Clone Selection (Клонировать Выделение) дает возможность выбрать тип создаваемых копий, причем положение No Clone (He Клонировать) выполняет зеркальное отображение исходного объекта, не создавая копий.

Команда Array (Массив) вызывается из списка кнопок, расположенных на панели инструментов Axis Constraints (Ограничения осей). Одноименное диалоговое окно Array позволяет задать способ копирования, размерность массива (1,2 или 3D), а также вид трансформации (Move, Rotate или Scale) которая будет применена к каждой копии (рис. 4.11).


РИСУНОК 4.11. Создание Массивов

Изображение:

Изображение:

Изображение:

Изображение:

8. Объединение объектов в группы

Объединение объектов в группы

Для облегчения управления наборами объектами и с целью упрощения насыщенных объектами сцен применяют команду Group (Сгруппировать). Ее вызов осуществляется через одноименный пункт падающего меню Group (Группировка) и применяется к выбранным объектам. Возникает окно ввода имени создаваемой группы (рис. 4.12). После подтверждения имени группы возникает новый объект сцены.


РИСУНОК 4.12. Набор имени группы

С объектами, объединенными по определенным критериям в группу (составные элементы сложного объекта, часто повторяющиеся наборы однотипных объектов и т. п..), очень удобно производить такие операции как выбор, клонирование, присвоение материалов, трансформации и многое другое. Группы могут иметь многоуровневую вложенную структуру. Рассмотрим возможности работы с группами объектов в среде Мах. Все команды управления сосредоточены в упоминавшемся ранее падающем меню Group (Группировка):

  • Group (Сгруппировать) - объединяет выбранные объекты в группу с новым именем, набираемым в одноименном диалоговом окне (рис. 4.12). Имя группы отображается жирным шрифтом в поле Name (Имя) или в квадратных скобках в диалоговом окне Select Objects (Выбор Объектов) (рис. 4.13).


РИСУНОК 4.13. Отображение групп в списках объектов

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

Close (Закрыть) - возвращает группу в стандартное состояние, скрывая объект с именем группы и возвращая полную группировку всем объектам группы.

  • Ungroup (Разгруппировать) - удаляет группировку объектов, входящих в выбранную группу, позволяя раздельную работу над каждым из них.
  • Explode (Полная Разгруппировка) - удаляет группировку объектов, составляющих многоуровневую, вложенную группу.
  • Detach (Отсоединить) - выделяет выбранный объект (или объекты) из состава группы. Для выполнения этой команды необходимо сначала открыть группу командой Open (Открыть).
  • Attach (Присоединить) - добавляет выбранные объекты в группу, указываемую левым щелчком мыши.

Изображение:

Изображение:

9. Трансформации объектов

Трансформации объектов

Виды Трансформаций

В среде Мах с любым объектом, набором нескольких объектов или группой можно производить три базовые операции преобразований - Move, Rotate и Scale (Перемещение, Поворот и Масштабирование), которые объединены одним общим термином - Transforms (Трансформации). Все трансформации назначены соответствующим кнопкам в Main Toolbar (Основной Панели), а Scale (Масштабирование) - списку кнопок. Преобразование перемещения позволяет изменять положение объекта в трехмерном пространстве, поворота -его ориентацию и масштабирования - линейные размеры объекта. Причем последнее преобразование может быть трех видов:

  • Uniform (Однородное) - равномерное масштабирование по трем координатным осям X,Y, Z;
  • Non-Uniform (Неоднородное) - выполняется по одной из осей или плоскостей объекта;
  • Squash (Сплющивание) - взаимно противоположное одновременное масштабирование по одной из осей и плоскости двух других, или наоборот.

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

Обычно выполнение преобразований с объектами сцены выполняется с приблизительной точностью («на глаз») в соответствии с визуальным восприятием положения, ориентации или масштаба. Однако, существуют случаи, когда необходим точный ввод параметров, для осуществления которого и служит способ Type-In (Точный Ввод). Соответствующее диалоговое окно может быть вызвано через пункт Transform Type-In (Точный Ввод Параметров Трансформаций) падающего меню Tools. В зависимости от типа выбранной трансформации, вызывается окно Move, Rotate или Scale Transform Type-In (Перемещение, Поворот или Масштабирование), которое содержит две группы счетчиков - Absolute: World (Абсолютные: Мировые Координаты) и Offset: Screen (Приращения: Экранные Координаты) (рис. 4.14).


РИСУНОК 4.14. Точный Ввод Параметров

Первоначально, при вызове этого окна в счетчиках первой группы отображаются точные значения положения выбранного объекта в трехмерном пространстве, его ориентация. При переключении на другой вид трансформаций (используя соответствующие модальные кнопки в Main Toolbar (Основной Панели) или через вызов контекстного меню редактируемого объекта) окно Type-In сразу же изменяется на соответствующее.

Дополнительными средствами, управляющими параметрами трансформаций в Мах, являются Restriction (Ограничения), задаваемые группой модальных кнопок, Reference Coordinate System (Координатная Система), выбираемая из списка кнопок. Все они расположены на панели инструментов Axis Constraints (Ограничения осей) (рис. 4.15). Еще один список кнопок Point Center (Центр Трансформаций), предназначенный для управления трансформациями, находится на Main Toolbar (Основной Панели).

РИСУНОК 4.15. Группа кнопок Ограничений Остановимся на каждом из них подробнее.

Три или более объекта, затем:

    выполните команду «Формат > Выровнять/Распределить > <вариант действия>» главного меню;

    выполните команду «Выровнять/Распределить > <вариант действия>» контекстного меню;

    на панели инструментов «Выравнивание » нажмите кнопку, соответствующую необходимому действию.

Доступны следующие варианты выравнивания/распределения объектов:

    Выровнять по левому краю . Выделенные объекты будут выровнены по левому краю относительно крайнего левого объекта:

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

    Выровнять по правому краю . Выделенные объекты будут выровнены по правому краю относительно крайнего правого объекта:

    Выровнять по верхнему краю . Выделенные объекты будут выровнены по верхнему краю относительно крайнего верхнего объекта:

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

    Выровнять по нижнему краю . Выделенные объекты будут выровнены по нижнему краю относительно крайнего нижнего объекта:

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

    Распределить по вертикали . Выделенные объекты будут находиться друг от друга на одинаковом расстоянии. Расстояние рассчитывается аналогично предыдущему пункту:

Паттерн Command (Команда)

Название и классификация паттерна

Команда - паттерн поведения объектов.

Назначение паттерна Command

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

Используйте паттерн Command, если:

  • система управляется событиями. При появлении такого события (запроса) необходимо выполнить определенную последовательность действий;
  • необходимо параметризировать объекты выполняемым действием, ставить запросы в очередь или поддерживать операции отмены (undo) и повтора (redo) действий;
  • нужен объектно-ориентированный аналог функции обратного вызова в процедурном программировании.

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

Описание паттерна Command

Паттерн Command преобразовывает запрос на выполнение действия в отдельный объект-команду. Такая инкапсуляция позволяет передавать эти действия другим функциям и объектам в качестве параметра, приказывая им выполнить запрошенную операцию. Команда - это объект, поэтому над ней допустимы любые операции, что и над объектом.

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

В паттерне Command может быть до трех участников:

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

Структура паттерна Command

Структура паттерна Command показана на рис. 63.

Сначала клиент создает объект ConcreteCommand, конфигурируя его получателем запроса. Этот объект также доступен инициатору. Инициатор использует его при отправке запроса, вызывая метод execute(). Этот алгоритм напоминает работу функции обратного вызова в процедурном программировании - функция регистрируется, чтобы быть вызванной позднее.

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

receiver->action();

Рис. 63. UML-диаграмма паттерна Команда

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

Участники

Command - Команда: объявляет интерфейс для выполнения операции.

ConcreteCommand - конкретная Команда: определяет связь между объектом-получателем Receiver и действием; реализует операцию Execute путем вызова соответствующих операций объекта Receiver.

Client - клиент: создает объект класса ConcreteCommand и устанавливает его получателя.

Invoker - инициатор: обращается к команде для выполнения запроса.

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

Отношения

Клиент создает объект ConcreteCommand и устанавливает для него получателя.

Инициатор Invoker сохраняет объект ConcreteCommand.

Инициатор отправляет запрос, вызывая операцию команды Execute. Если поддерживается отмена выполненных действий, то ConcreteCommand перед вызовом Execute сохраняет информацию о состоянии, достаточную для выполнения отката.

aReceiver aClient

Г"| newCommand(aReceiver)

StoreCommand(aCommand)

Рис. 64. UML-диаграмма последовательностей паттерна Команда

Объект ConcreteCommand вызывает операции получателя для выполнения запроса.

На рис. 64 видно, как Command разрывает связь между инициатором и получателем (а также запросом, который должен выполнить последний).

Результаты применения паттерна Команда

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

Команды - это самые настоящие объекты. Допускается манипулировать ими и расширять их точно так же, как в случае с любыми другими объектами.

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

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

Реализация паттерна Command

Рассмотрим реализацию паттерна Command на примере игры «Шахматы». Имитируем возможность выполнения следующих операций:

  • создать новую игру;
  • открыть существующую игру;
  • сохранить игру;
  • сделать очередной ход;
  • отменить последний ход.

void open(string file) { cout

void save(string file) { cout

void make_move(string move) { cout

string getPlayerInput(string prompt) { string input; cout > input; return input;

// Базовый класс class Command {

virtual ~Command() 0 virtual void execute() = 0; protected:

Command(Game* p): pgame(p) {} Game * pgame;

class CreateGameCommand: public Command

CreateGameCommand(Game * p): Command(p) {} void execute() { pgame->create();

class OpenGameCommand: public Command

OpenGameCommand(Game * p) : Command(p) {} void execute() { string file_name;

file_name = getPlayerInput("Enter file name:"); pgame->open(file_name);

class SaveGameCommand: public Command

SaveGameCommand(Game * p) : Command(p) {} void execute() { string file_name;

file_name = getPlayerInput("Enter file name:"); pgame->save(file_name);

class MakeMoveCommand: public Command

MakeMoveCommand(Game * p): Command(p) {} void execute() {

// Сохраним игру для возможного последующего отката pgame->save("TEMP F1LE"); string move;

move = getPlayerInput("Enter your move:"); pgame->make_move(move);

class UndoCommand: public Command

UndoCommand(Game * p) : Command(p) {} void execute() {

// Восстановим игру из временного файла pgame->open("TEMP_FILE");

// Имитация действий игрока vector v;

// Создаем новую игру

v.push_back(new CreateGameCommand(&game));

// Делаем несколько ходов

v.push_back(new MakeMoveCommand(&game));

// Последний ход отменяем v.push_back(new UndoCommand(&game));

// Сохраняем игру

v.push_back(new SaveGameCommand(&game));

for (size_t i=0; i execute();

for (size_t i=0; i

Вывод программы:

Save game in TEMPFILE Enter your move: E2-E4 Make move E2-E4 Save game in TEMP FILE Enter your move: D2-D3 Make move D2-D3 Open game from TEMP_FILE Enter file name: gamel.sav Save game in game 1 .sav

Достоинства паттерна Command

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

Родственные паттерны

Паттерн Компоновщик можно использовать для реализации макрокоманд.

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

Команда, которую нужно копировать перед помещением в список истории, ведет себя, как Прототип.

Loading...Loading...