У меня есть элемент g
, содержащий один или несколько элементов path
. Как я уже упоминал в еще одном вопросе, я масштабирую и переводит элемент g
, вычисляя атрибут transform
так, чтобы он соответствовал сетке в другой части холста.
Расчет выполняется с использованием разницы между двумя прямоугольниками, getBBox()
от элемента g
и прямоугольника вокруг сетки.
Вот вопрос - после выполнения преобразования я обновляю содержимое элемента g
и вызываю getBBox()
снова, не удаляя transform
. Полученный прямоугольник, по-видимому, вычисляется без учета transform
. Я бы ожидал, что это отразит изменения. Согласуется ли это поведение с спецификацией SVG? Как получить ограничивающий прямоугольник преобразованного прямоугольника?
Это, BTW, находится в документе HTML 5, работающем в Firefox 4, если это имеет значение.
Обновление: похоже, это поведение кажется довольно явно нарушением спецификации. Из текста здесь, в w3c:
SVGRect getBBox()
Возвращает ограниченный ограничивающий прямоугольник в текущем пользовательском пространстве (т.е. после применения атрибута "transform", если он есть) в геометрии всех содержащихся графических элементов, исключая эффекты поглаживания, обрезки, маскировки и фильтрации). Обратите внимание, что getBBox должен возвращать фактический ограничивающий прямоугольник во время вызова метода даже в том случае, если элемент еще не был отображен.
Я читаю это правильно? Если это так кажется ошибкой в реализации SVG, Firefox использует; У меня не было возможности попробовать что-либо другое. Я бы опубликовал отчет об ошибке, если кто-то мог указать мне куда.