Многие программы, работающие с графикой, имеют в своём арсенале инструмент свободного преобразования. Названия этого инструмента в разных графических редакторах могут различаться, но суть одна: данный инструмент позволяет перетаскивать, масштабировать и вращать выделенный графический объект (иногда присутствуют и дополнительные возможности, например наклон и т.д.). В Adobe Flash CS5.5 этот инструмент выглядит следующим образом:

Бывают ситуации, когда такой инструмент желателен и в флеш-приложениях. Например, вы делаете на ActionScript свой графический редактор и хотите добавить в него инструмент трансформации. И в этом случае у вас два возможных пути:
Путь первый. Писать собственный инструмент трансформации.
Путь второй. Взять уже созданный до вас готовый инструмент. Для этого достаточно в поисковике вбить запрос «TransformManager» и вы, скорее всего, получите кучу ссылок и несколько уже готовых библиотек с реализацией инструмента преобразования. Естественно, что всё самое интересное окажется платным :-( А как иначе... закон подлости никто не отменял...
Но есть и бесплатные библиотеки, реализующие инструмент свободной трансформации. Об одной из них сейчас и поговорим. Это библиотека классов FreeTransformManager от Ryan. Библиотека написана на ActionScript 3.0 и, как явствует даже из её названия, является бесплатной. Конечно, она не идеальна (как часто я это повторяю:-)), но она умеет:
- перетаскивать выделенный объект;
- вращать выделенный объект;
- масштабировать выделенный объект;
- гибкая настройка внешнего вида самой рамки выделения.
Для начала просто посмотрим, что она из себя представляет. Итак, смотрим и играемся:
Удобная штука. Не так ли? :-)
А теперь давайте научимся встраивать данную реализацию инструмента трансформации в наши проекты. Рассмотрим процесс использования данной библиотеки классов на примере флеш-проекта в Adobe Flash CS5.5.
Первым делом, подключаем саму библиотеку (библиотека прилагается к исходнику, а ссылка на исходник в конце поста - вот такой вот несложный квест) ...
Код ActionScript 3.0:
import com.ryan.geom.*;
Затем создаём объект класса FreeTransformManager.
Код ActionScript 3.0:
var freeTransformManager:FreeTransformManager = new FreeTransformManager();
Для целей тестирования можно передать конструктору объекта в качестве параметра булево значение true и тогда на экран будет выводиться дополнительная информация о манипуляциях с объектом. Звучит сложно, но на примере всё просто и понятно. Итак, пример:
Код ActionScript 3.0:
var freeTransformManager:FreeTransformManager = new FreeTransformManager(true);
Кроме этого мы можем настроить внешний вид нашего инструмента преобразования. Для этих целей служит целый набор свойств класса FreeTransformManager:
- boundingBoxOutlineColor - цвет линии вокруг выделенного объекта;
- boundingBoxOutlineThickness - толщина линии вокруг выделенного объекта;
- handleFillColor - цвет заливки точек трансформации;
- handleOutlineColor - цвет обводки точек трансформации;
- handleRadius - радиус точек трансформации.
Для примера приведу настройки, которые использовались в двух предыдущих флеш-роликах...
Код ActionScript 3.0:
var freeTransformManager:FreeTransformManager = new FreeTransformManager();
freeTransformManager.boundingBoxOutlineColor = 0xff0000;
freeTransformManager.boundingBoxOutlineThickness = 2;
freeTransformManager.handleFillColor = 0xff0000;
freeTransformManager.handleOutlineColor = 0x0000ff;
freeTransformManager.handleRadius = 6;
Так, с настройками покончили и переходим к самому главному - регистрируем объекты, к которым и будет применяться инструмент свободного преобразования. Делается это с помощью метода registerSprite(), который в качестве первого параметра принимает объект из списка отображения, к которому можно применить трансформацию, а в качестве второго параметра - настройки трансформации.
Код ActionScript 3.0:
freeTransformManager.registerSprite(mc,{minScale:0.1,maxScale:2});
Здесь "mc" - это мувиклип на сцене. А второй параметр указывает минимальный и максимальный уровень масштабирования данного объекта (весьма полезное ограничение).
Практика показала, что иногда надо временно скрывать инструмент трансформации. Для этого используется метод hideHandlers()...
Код ActionScript 3.0:
freeTransformManager.hideHandlers();
Чтобы снова сделать инструмент доступным, воспользуемся методом showHandlers()...
Код ActionScript 3.0:
freeTransformManager.showHandlers();
А теперь объединим все приведённые выше куски кода в единый законченный код...
Код ActionScript 3.0:
/*
подключаем библиотеку классов
*/
import com.ryan.geom.*;
import flash.display.MovieClip;
/*
создаём объект, который и будем подвергать свободной трансформации
*/
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0x333333,1);
mc.graphics.drawRect(0,0,250,200);
mc.graphics.endFill();
addChild(mc);
mc.x = 150;
mc.y = 100;
/*
создаём и настраиваем объект FreeTransformManager
*/
var freeTransformManager:FreeTransformManager = new FreeTransformManager();
freeTransformManager.boundingBoxOutlineColor = 0xff0000;
freeTransformManager.boundingBoxOutlineThickness = 2;
freeTransformManager.handleFillColor = 0xff0000;
freeTransformManager.handleOutlineColor = 0xff0000;
freeTransformManager.handleRadius = 6;
/*
регистрируем объект для работы с ним инструментом FreeTransformManager
*/
freeTransformManager.registerSprite(mc,{minScale:0.1,maxScale:2});
Копируем данный код на временную шкалу проекта в Adobe Flash и проверяем его в работе.
Исходник под Adobe Flash CS5.5 и библиотеку классов FreeTransformManager можно скачать здесь.
А здесь можно посмотреть на использование FreeTransformManager в реальном флеш-проекте.