Domanda

Il mio compito è sviluppare un algoritmo che adatta diversi tipi di curve su una data sequenza di punti nello spazio bidimensionale.

Per poter testare il mio algoritmo, ho scelto SVG per visualizzare il risultato. Ho diversi problemi con esso.

Poiché potrebbero esserci input e output molto diversi nel mio algoritmo, è essenziale poter visualizzare i file SVG generati con la possibilità di ingrandire!

Ma un percorso in SVG può essere visualizzato solo con una certa larghezza. Se ingrandisco, la larghezza del percorso si allarga. Vorrei che la larghezza fosse ad esempio 1 pixel a tutti i livelli di zoom. C'è una soluzione per questo?

Inoltre: SVG può visualizzare i punti? Sì, punti semplici e grezzi. Ho scoperto che non può.

Grazie

È stato utile?

Soluzione

Molti altri formati vettoriali (come PostScript e PDF) ti permetteranno di usare una larghezza del tratto di 0 per un " hairline " ictus. Non così con SVG. Tuttavia, penso che puoi ottenere ciò che desideri se usi una percentuale di tratto tratto. Vedi le specifiche SVG del w3c per i dettagli , ma, fondamentalmente, dovresti essere in grado di fare qualcosa del genere:

stroke-width:"1%"

Questo dovrebbe accarezzare la tua curva con una larghezza della linea che è un costante dell'1% del rettangolo di delimitazione, indipendentemente dal livello di zoom.

Per quanto riguarda i punti, SVG non li supporta. Quando l'ho fatto in passato (usando PostScript) ho sempre usato un arco con un piccolo redius per disegnare un piccolo cerchio (che puoi riempire per creare un punto, se lo desideri).


@Zoli: dopo il tuo commento, stavo per suggerirti di esaminare PostScript in modo da poter utilizzare la larghezza della linea sottile quando mi sono imbattuto in effetto vettoriale tratto senza ridimensionamento nella specifica SVG :

vector-effect="non-scaling-stroke"

Basta aggiungere questo alla curva e dovrebbe essere invariante al ridimensionamento, secondo le specifiche. Il loro esempio usa line, ma dovrebbe funzionare anche sulle tue curve.

Altri suggerimenti

Non c'è < punto > elemento o qualcosa del genere in SVG attualmente, ma aggiungendo che è stato discusso in SVG WG, quindi potrebbe essere incluso in futuro. Sentiti libero di esprimere le tue esigenze e requisiti per un & Lt; point & Gt; elemento della mailing list svg pubblica: www-svg@w3.org.

Una soluzione alternativa è usare ad esempio < line > e lascia che siano di lunghezza pari a zero, se lo desideri puoi avere dei tappi rotondi per visualizzarne un punto. Tutto dipende da cosa ti serve per questo. Un cerchio con r = 0 potrebbe adattarsi meglio.

La proprietà 'effetto vettoriale' con valore 'non-scaling-stroke' è ciò che dovresti usare per dire che il tratto non dovrebbe ridimensionare. Non è così difficile implementare una soluzione javascript che assicuri che i tratti siano adeguatamente ridimensionati se "effetto vettoriale" non è supportato in modo nativo. Opera 9.5+ lo supporta in modo nativo.

Grazie Naaff l'aiuto. Penso che rimarrò con Firefox, e specificherò per ogni esecuzione dell'algoritmo la larghezza della linea nel file svg generato. Sarà adeguato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top