Задача «Векторный графический редактор (Команда)»

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

На вход редактору поступает два файла. Один файл содержит в себе 2D-сцену в приблизительно следующем формате:

rect[1] 10 10 20 20
rect[2] 50 50 70 70
line[O_o] 1 1 90 7
ellipse[cool] 5 5 90 10

Первый элемент каждой строки содержит тип объекта (прямоугольник, линия, эллипс) и его идентификатор в квадратных скобках. Идентификатор представляет из себя строку (в которой не содержится символа ]) и уникален в рамках одного типа объектов. Далее идут координаты x1 y1 x2 y2 для прямоугольника и линии, x y w h для эллипса.

Второй файл содержит команды для редактора:

translate rect[1] 50 70
scale line[O_o] 1 1.5
rotate 90
undo

Команда translate смещает указанный объект (задаются dx и dy). scale изменяет масштаб (задаются коэффициенты масштаба sx и sy. rotate поворачивает объект вокруг его центра на заданное количество градусов (также можно реализовать более сложную версию с поворотом вокруг заданной точки). После имени команды идёт идентификатор объекта. Если он не указан, то операция применяется ко всем объектам.

Команда undo отменяет последнюю операцию (у неё нет аргументов).

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