A volte è preferibile che le linee di un oggetto mantengano la loro larghezza originale, indipendentemente dalla trasformazione applicata. Ad esempio, si disegna una linea su una mappa che mostra la posizione dell’utente e una destinazione. Quando l’utente ingrandisce la mappa, si vuole ingrandire la mappa ma far sì che la linea mantenga la sua larghezza.
Nello standard SVG, l’attributo “non-scaling-stroke” indica che la larghezza del tratto non dipende dallo zoom o dal ridimensionamento. In altre parole, le linee di un oggetto non sono influenzate dalle trasformazioni e dallo zoom.
Ecco un esempio di due rettangoli con lo stesso spessore di linea. Il rettangolo a sinistra utilizza l’attributo “non-scaling-stroke”, mentre quello a destra non lo utilizza:
Osservate il file SVG:
<svg viewBox="0 0 90 45" xmlns="http://www.w3.org/2000/svg"> <rect x="1" y="1" width="40" height="40" fill="white" stroke="blue" stroke-width="1px" vector-effect="non-scaling-stroke"/> <rect x="45" y="1" width="40" height="40" fill="white" stroke="green" stroke-width="1px" /> </svg>
Abbiamo anche aggiunto nuovi comandi al tema “4D SVG”. È possibile definire l’attributo “non-scaling-stroke” per gli oggetti di disegno con il metodo SVG_SET_STROKE_VECTOR_EFFECT metodo.
// Create view box
$svgRef:=SVG_New (90;45)
// First rectangle with the non-scaling-stroke attribute
$rect1 :=SVG_New_rect ($svgRef;1;1;40;40;0;0; "blu"; "bianco";1)
SVG_SET_STROKE_VECTOR_EFFECT ($rect1; "non-scaling-stroke")
// Second rectangle
$rect2 :=SVG_New_rect ($svgRef;45;1;40;40;0;0; "verde"; "bianco";1)
// Save image on disk
File ("/RESOURCES/Images/rectangle.svg").create()
SVG_SAVE_AS_TEXT ($svgRef; File("/RESOURCES/Images/rectangle.svg").platformPath)
// Clear reference
SVG_CLEAR ($svgRef)