Por vezes é preferível que as linhas de um objecto mantenham a sua largura original, independentemente da transformação aplicada. Por exemplo, desenha-se uma linha num mapa mostrando a posição de um utilizador e um destino. Quando o utilizador faz zoom no mapa, pretende ampliar o mapa, mas fazer com que a linha mantenha a sua largura.
Na norma SVG, o atributo “non-scaling-stroke” indica que a largura do traço não depende do zoom ou da escala. Por outras palavras, as linhas de um objecto não são afectadas pelas transformações e pelo zoom.
Aqui está um exemplo de dois rectângulos com a mesma espessura de linha. O rectângulo à esquerda utiliza o atributo “non-scaling-stroke”, enquanto que o rectângulo à direita não utiliza este atributo:
Dê uma vista de olhos ao ficheiro 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>
Também acrescentámos novos comandos ao tema “4D SVG”. É possível definir o atributo “non-scaling-stroke” para desenhar objectos com o SVG_SET_STROKE_VECTOR_EFFECT método.
// 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;0; "azul"; "branco";1)
SVG_SET_STROKE_VECTOR_EFFECT ($rect1; "non-scaling-stroke")
// Second rectangle
$rect2 :=SVG_New_rect ($svgRef;45;1;40;40;0;0; "verde"; "branco";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)