Как мы можем сохранить и восстановить состояния трансформации в RaphaelJS - PullRequest
1 голос
/ 09 марта 2012

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

Я не могу понять, как выдвигать и выдвигать состояния трансформации. (эквивалент context.save () и context.restore () в канале html5)

Может ли кто-нибудь указать мне правильное направление?

спасибо.

1 Ответ

1 голос
/ 12 марта 2012

Не могли бы вы объяснить, почему вам нужно нажать и выдвинуть состояние трансформации?

В svg вам не нужно этого делать, браузеры делают это за вас. Если вы хотите, чтобы конкретное преобразование применялось к элементу, просто добавьте к нему атрибут преобразования . Вы можете применить преобразование ко многим элементам, используя <g> элементы (в Raphaël есть Paper.set , который можно использовать как элемент <g>, и у вас есть Element.transform метод для установки преобразований).

Обновление:

context.save() - в терминах svg это будет взять текущую матрицу преобразования (CTM) элемента в данный момент времени и сохранить его где-нибудь, в Raphaël, я думаю, это может быть Element.transform () (я не уверен на 100%, включает ли он весь стек преобразований или нет, в любом случае, в чистом svg CTM можно получить с помощью метода getCTM () , который доступен для всех элементов). Один из способов сделать это - вставить элемент <g> с нужным преобразованием.

context.restore() - в svg это будет эквивалентно удалению преобразования из списка преобразований, но обратите внимание, что в svg братья и сестры не «наследуют» преобразование (это не похоже на html5 canvas или OpenGL, где установлена ​​текущая матрица просто применяется ко всему, что вы рисуете после установки преобразования). Если вы хотите, чтобы преобразование применялось ко многим элементам, вы создаете <g>, который имеет преобразование, которое должно применяться ко всем дочерним элементам этого элемента, и для восстановления вы просто вставляете элементы в родительский элемент <g>. Raphaël не имеет встроенной поддержки элемента <g> (если не считать Element.set, который является аналогичной концепцией), предположение, почему Raphaël делает это, состоит в том, что он не позволяет людям пытаться делать такие вещи, как это потому, что становится очень легко раздувать DOM, не осознавая этого (помните, что SVG - это сохраненный режим графический формат, в отличие от canvas и OpenGL).

...