Tengo un elemento g
que contiene uno o más elementos path
. Como mencioné en another question, escalo y traduzco el elemento g
al calcular un atributo transform
para que encaje en una cuadrícula en otra parte del lienzo.¿Cómo se calcula el getBBox() SVGRect?
El cálculo se realiza utilizando la diferencia entre dos rectángulos, el getBBox()
del elemento g
y el rectángulo alrededor de la cuadrícula.
aquí está la pregunta - después de hacer la transformación, puedo actualizar el contenido del elemento g
y llamo getBBox()
de nuevo, sin la eliminación de la transform
. El rectángulo resultante parece ser calculado sin considerar el transform
. Hubiera esperado que reflejara el cambio. ¿Este comportamiento es consistente con la especificación SVG? ¿Cómo obtengo el cuadro delimitador del rectángulo transformado?
Esto, por cierto, está en un documento HTML 5 que se ejecuta en Firefox 4, si eso hace la diferencia.
Actualización: Aparentemente, este comportamiento parece muy claramente en violación de la especificación. A partir del texto here at w3c:
SVGRect getBBox()
Devuelve el cuadro de límite ajustado en el espacio de usuario actual (es decir, después de la aplicación del atributo 'transformar', si lo hay) de la geometría de todos elementos gráficos contenidos, exclusivos de caricias, recortes, enmascaramiento y efectos de filtro). Tenga en cuenta que getBBox debe devolver el cuadro delimitador real en el momento en que se llamó al método, incluso en el caso de que el elemento aún no se haya procesado.
¿Estoy leyendo esto correctamente? Si es así, parece ser una errata en la implementación de SVG que usa Firefox; No he tenido la oportunidad de probar ninguna otra. Me gustaría presentar un informe de error si alguien podría indicarme dónde.
El soporte de SVG en los navegadores todavía es impredecible, después de 10 años. (Menos aún SMIL ... :() –