Скопируем "drawCmds.push", перейдем в начало документа и пройдемся поиском, чтобы посмотреть, что в принципе добавляется в массив. Видим, что всегда это буква и массив данных. Эта информация в сочетании с именем массива, которое не говорит, а намекает смекалистым на то, что в нем хранятся команды рисования, позволяет нам придумать имя для будущего класса объекта данных. Мы назовем его DrawingCommand.
Создаем класс DrawingCommand.

Код AS3:
package com.itechnica.svg {
public class DrawingCommand {
private var commandType:String;
public function DrawingCommand(type:String, ...args) {
initInstance(type, args);
}
private function initInstance(type:String, args:Array):void {
commandType = type;
}
}
}
И на этом месте мы вынуждены остановиться. Как мы видели, в зависимости от различных значений буквы, сущность и количество переменных может быть разным. И по складывающейся логике мы должны в методе initInstance прописать switch, в котором будем делать выбор действий.
В таком раскладе мне это категорически не нравится. Вместо массива мы получим объект данных мало чем по своей практичности отличающийся от него. При необходимости им воспользоваться нам придется каждый раз вначале выяснять
как мы можем им воспользоваться проверяя его тип. От этого впоследствии нам придется избавляться с помощью замены условных операторов полиморфизмом. Так не проще ли сейчас грамотно реализовать логику, чтобы потом не возвращаться? Ведь эту часть мы делаем с нуля.
Так и поступим.
Кратко опишу чего мы будем добиваться: мы сделаем для каждой команды рисования свой класс. Чтобы эти классы правильно типизировались и могли иметь общую логику, отнаследуемся от класса DrawingCommand. Чтобы создавать экземпляры этих классов, сделаем DrawingCommand фабрикой.
Еще раз вернемся к коду и посмотрим, какие именно классы нам придется создавать. В этом нам очень поможет метод getShapes класса SVGDisplayInFlash, поскольку в нем компактно использованы все варианты применения.
Удаляем всё содержимое класса, копируем блок switch из getShapes и закомментируем его.
Поскольку у нас будет целая группа классов, то создаем в папке svg папку draw и перемещаем туда класс.
Выглядит сейчас он так:

Код AS3:
package com.itechnica.svg.draw {
public class DrawingCommand {
// switch (d[0]) {
// case "F" :
// drawTarget.beginFill(dp[0], dp[1]);
// break;
// case "S" :
// drawTarget.lineStyle(dp[0], dp[1], dp[2]);
// break;
// case "M" :
// drawTarget.moveTo(dp[0], dp[1]);
// break;
// case "L" :
// drawTarget.lineTo(dp[0], dp[1]);
// break;
// case "C" :
// drawTarget.curveTo(dp[0], dp[1], dp[2], dp[3]);
// break;
// }
}
}
Первым делом объявим полный набор публичных статических констант, чтобы избавиться от применения строковых данных в коде:

Код AS3:
public static const FILL:String = "F";
public static const STYLE:String = "S";
public static const MOVE:String = "M";
public static const LINE:String = "L";
public static const CURVE:String = "C";
И идем заменять в коде соответствующие строки на константы.
Чтобы это сделать быстро и качественно, используем File Search. Но перед этим, чтобы ограничить поиск только нужными папками создадим новый workspace с именем SVGToFlashSrc, в который включим только файлы, лежащие в папке src.
- выделяем строку "F" (с кавычками);
- CTRL+H, выделенная строка должна оказаться в поле ввода
- выбираем workspace с именем SVGToFlashSrc;
- жмем кнопку Replace...
- в поле with вводим: DrawingCommand.FILL
- далее шаг за шагом заменяем, однако не делаем этого в вызовах String2.replace(...) потому, что если заменим, то бардак там будет полным. Ибо чует сердце, что единообразие вызовов этих методов нам еще понадобится.