Вопрос нужен, чтобы оценить, способен ли кандидат работать с потерянной иерархией данных и восстанавливать структуру сцены программно.
Если библиотека «сплющивает» SVG, иерархию можно восстановить на этапе парсинга. Для этого используют исходный SVG DOM или метаданные элементов. Группы собираются вручную на основе id, data-* атрибутов или вложенности. Далее эта структура маппится на объекты Canvas.
Многие Canvas-библиотеки упрощают SVG-структуру, так как им не нужна полная DOM-иерархия. Однако в сложных редакторах иерархия групп часто критична.
Восстановление строится не на Canvas, а на данных:
SVG содержит полную структуру
Canvas — только результат отрисовки
Поэтому сначала нужно сохранить или восстановить структуру, а уже потом работать с Canvas-объектами.
Парсинг SVG до передачи в библиотеку
Используется DOMParser
Проход по <g> и дочерним элементам
Формирование собственного дерева
Использование метаданных
id
data-group
кастомные атрибуты
Маппинг на Canvas-объекты
Каждому Canvas-объекту присваивается ссылка на узел структуры
Группы собираются вручную через Group
// svgNode -> список дочерних элементов
// далее создаём fabric.Group на основе этих связей
Требуется дополнительная память
Сложнее синхронизировать изменения
Библиотека может не поддерживать вложенные группы напрямую
Иерархия SVG восстанавливается не средствами Canvas, а через предварительный анализ SVG-структуры. Это требует собственной модели данных, но даёт полный контроль над группами и слоями.