Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    10

    [SVG] Gradiente non cambia colore

    Questo post è un po' la continuazione del precedente, in quando ho sempre i due file xml e xslt. In questo caso l'xslt utilizza l'svg per creare un grafico a barre che visualizza i punti in classifica delle squadre della serie A 2008/09.

    Ho il seguente codice SVG:

    Codice PHP:
    <svg:svg width="1400" height="700" align="center">

      <
    xsl:for-each select="SERIE_A_08-09/SQUADRA">
       <
    xsl:sort select="POSIZIONE" data-type="number"/>


       <
    xsl:variable name="colori" select="COD_COLORI"/>
       <
    xsl:variable name="colore1" select="substring-before($colori,&quot;,&quot;)" />
       <
    xsl:variable name="colore2" select="substring-after($colori,&quot;,&quot;)" />
       <
    xsl:variable name="nome" select="NOME"/>
       <
    xsl:variable name="postext" select="((position()-1)*70)"/>
       <
    xsl:variable name="contatore" select="((position()-1)*70)+5"/>
       <
    xsl:variable name="punti" select="PUNTI_CLASSIFICA"/>
       <
    xsl:variable name="altezza" select="(600*$punti) div 84"/>


       <
    svg:linearGradient id="gradiente" gradientUnits="userSpaceOnUse" x1="{$contatore}y1="{600-$altezza}" x2="{$contatore}y2="600">
       <
    svg:stop offset="0" stop-color="{$colore1}"/>
       <
    svg:stop offset="1" stop-color="{$colore2}"/>
       </
    svg:linearGradient>


       <
    svg:rect x="{$contatore}y="{600-$altezza}" width="40" height="{$altezza}fill="url(#gradiente)" stroke="black" stroke-width="2"/>

      </
    xsl:for-each>
    </
    svg:svg
    Per la definizione del gradiente ho usato le istruzioni presenti nella guida SVG di html.it.

    Il mio problema è che il gradiente non viene aggiornato con i colori e i valori dei vari elementi del for-each, ma mi visualizza tutte le colonne con lo stesso gradiente, cioè quello del primo elemento letto dal for-each.
    Il problema è di sicuro nella definizione del gradiente, infatti se sostituisco il fill="url(#gradiente)" con fill="{$colore1)" ottengo barre di colori diversi... come faccio a togliere il "sola lettura" ai parametri del gradiente una volta definito la prima volta? e, inoltre, perchè il gradiente va in "sola lettura" dopo la prima definizione?

    grazie in anticipo a chiunque sarà in grado di aiutarmi.

    Max

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    10
    Ho risolto cambiando dinamicamente sia l'id del gradiente che il relativo riferimento nel fill:

    Codice PHP:

    <svg:defs>
    <
    svg:linearGradient id="{position()}" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="0%" y2="100%">
     <
    svg:stop offset="0" stop-color="{$colore1}"/>
     <
    svg:stop offset="1" stop-color="{$colore2}"/>
    </
    svg:linearGradient>
    </
    svg:defs>   


    <
    svg:rect x="{$contatore}y="{600-$altezza}" width="40" height="{$altezza}fill="url(#{position()})" stroke="black" stroke-width="2"/> 
    mi sfugge comunque il perchè, una volta definito la prima volta, il gradiente non cambiasse, a parità di id.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.