2011-12-02 22 views
7

Quiero aplicar o 'hornear' una transformación de varias rutas en Raphael JS 2, de modo que pueda combinarlas en una sola ruta.¿Cómo aplicar la matriz de transformación a las coordenadas de ruta en Raphael JS 2?

Aquí hay una ruta de ejemplo, donde me gustaría que el atributo "transformar" se aplique a todas las coordenadas "d".

<path style="" fill="#000000" stroke="none" d="M150,-265C182,-275,171,-220,180,-194L178,-194C181,-192,180,-185,181,-180C211,-169,282,-173,306,-166C308,-169,316,-171,315,-165C268,-157,225,-148,184,-137C188,-118,186,-96,190,-79L282,-131C289,-131,296,-135,297,-126C293,-118,271,-105,236,-80C190,-48,155,-20,125,-6C112,-15,115,-34,111,-51C121,-70,108,-107,107,-133C70,-132,-5,-126,0,-157C18,-170,39,-181,64,-191C75,-190,92,-181,100,-185C99,-198,95,-211,89,-225Z" transform="matrix(0.1389, 0, 0, 0.1389, 291.91, 235.465)" stroke-width="7.199999999999999"> 

entiendo que el marco svg-edit puede convertir camino coordina a posiciones absolutas, y quitar la matriz de transformación en el proceso.

Algunas preguntas relacionadas, que no pude conseguir mi respuesta de:

+0

Terminé almacenando la transformación original para cada ruta en el conjunto. Cada vez que necesito transformar todo el conjunto, primero pre-transformaré "... T" las rutas individuales usando las transformaciones almacenadas. Esta solución no es ideal, ya que hace laggy de arrastre para juegos grandes. – Jedateach

+0

SvgToHtml convertirá las coordenadas de ruta en posiciones absolutas y eliminará la matriz de transformación en el proceso. http://irunmywebsite.com/raphael/SVGTOHTML_LIVE.php – Chasbeen

Respuesta

0

Una solución parcial se pueden encontrar en este jsFiddle: http://jsfiddle.net/X6YNm/1/

//include whoa font, and raphael 
paper = Raphael('holder'); 
var text = paper.print(300, 50, 'Foo', paper.getFont('whoa'), 50, 'baseline'); 
var path = new Array(); 
for (var i = 0; i < text.length; i ++) { 
    path[i] = paper.path(Raphael.pathToRelative(text[i].attr('path'))); 
    path[i].attr({ fill: 'red' }).translate(i * 250, 300); 
} 

Es cr adquiere una nueva ruta, basada en cada personaje en el conjunto original. Sin embargo, el violín no espacia correctamente los caracteres.

Algunos discusión relacionada en el grupo Raphael Google: Un poco de discusión en grupo Google aquí: https://groups.google.com/d/msg/raphaeljs/OP29oelR5Eg/zPi5m6rjsvIJ

7

Aquí hay una jsFiddle que se aplica todas las transformadas para usted: http://jsfiddle.net/ecmanaut/cFSjt/

Es posible que Rafael expone parte o la totalidad de la herramientas que he llenado, pero si no, estas funcionan bien. Si sus necesidades también cubren más elementos que no son de ruta (como grupos, rectas, círculos, elipses, etc.), primero conviértalos en elementos de ruta (por ejemplo, usando pathify).

+0

Agradable. Me sorprende que algo así no sea parte del núcleo de Raphael, pero parece que no puedo encontrarlo en los documentos. Parece que habría muchos casos en los que uno querría "aplicar" una transformación a algunos datos de ruta. Una pregunta: ¿no está asumiendo SVG (y no VML) en su función al trabajar directamente con el nodo? ¿Podría dar un ejemplo "puro" de Raphael de clonación y aplanar una ruta transformada de Raphael utilizando estos métodos? – Ben

Cuestiones relacionadas