2012-04-18 10 views
24

Sto scrivendo alcune cose con d3 e mi sono imbattuto in un bizzarro problema. I percorsi chiusi terminano con un carattere 'Z', ma ogni tracciato che faccio chiude (e riempie) indipendentemente dal fatto che includo o meno una Z. Anche in isolamento con esempi copiati dalle specifiche ciò accade. Ad esempio:Il percorso SVG non chiuso sembra essere chiuso

<svg> 
    <path d="M 40 60 L 10 60 L 40 42.68 M 60 60 L 90 60 L 60 42.68"/> 
</svg> 

Sono sconcertato su quale potrebbe essere il problema. Gradirei qualsiasi intuizione.

+2

OK, il problema era che veniva riempito dando l'impressione di chiudere il percorso. Quindi alcuni css standard per qualsiasi lavoro di svg dovrebbero includere: percorso { riempimento: nessuno; } – ballaw

+0

Ci scusiamo per aver chiesto prematuramente una domanda. – ballaw

+2

Solo per quello che so, sono contento che tu abbia fatto questa domanda dal momento che mi ha aiutato oggi. –

risposta

40

La linea rilevanti dal SVG specification, riguardante filling paths:

L'operazione di riempimento riempie sottotracciati aperte eseguendo l'operazione di riempimento come se un "closePath" ulteriore comando sono stati aggiunti al percorso per collegare l'ultimo punto di il sottotracciato con il primo punto del sottotracciato.

Quindi, per quanto riguarda la riempiono è interessato, c'è una "Z" implicito alla fine. Tuttavia, per il tratto , non esiste alcuna chiusura implicita, quindi non traccerà un tratto collegando l'ultimo punto al primo punto a meno che non si aggiunga esplicitamente una "Z".

Se si desidera solo applicare un tratto, usare i CSS per disattivare il riempimento:

path { 
    fill: none; 
    stroke: #000; 
    stroke-width: 1.5px; 
} 

(. Vedo che risposto alla tua domanda, ma ho pensato che altri potrebbero ancora trovare una spiegazione utile)

2

Ho votato la risposta, ma a volte il css non è un'opzione quando si tenta di convertire lo svg su tela e si desidera impedire il riempimento o la chiusura del percorso svg. Equivalente alla soluzione css ma senza css ...

<svg fill="white" fill-opacity="0" stroke="#000" stroke-width="1.5"> 
    <path d="M 40 60 L 10 60 L 40 42.68 M 60 60 L 90 60 L 60 42.68"/> 
</svg> 
+3

Non riempie = "nessuno" funziona anche qui? –