Manchmal ist es besser, wenn die Linien eines Objekts ihre ursprüngliche Breite beibehalten, unabhängig von der angewandten Transformation. Ein Beispiel: Sie zeichnen eine Linie auf einer Karte, die die Position des Benutzers und ein Ziel anzeigt. Wenn der Benutzer die Karte vergrößert, soll die Karte vergrößert werden, aber die Linie soll ihre Breite beibehalten.
Im SVG-Standard gibt das Attribut „non-scaling-stroke“ an, dass die Strichstärke nicht von der Vergrößerung oder Skalierung abhängt. Mit anderen Worten: Die Linien eines Objekts werden durch Transformationen und Zoomen nicht beeinträchtigt.
Hier ist ein Beispiel für zwei Rechtecke mit derselben Linienstärke. Das Rechteck auf der linken Seite verwendet das Attribut „non-scaling-stroke“, während das Rechteck auf der rechten Seite dieses Attribut nicht verwendet:
Schauen Sie sich die SVG-Datei an:
<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>
Wir haben auch neue Befehle für das Thema „4D SVG“ hinzugefügt. Sie können das Attribut „non-scaling-stroke“ für Zeichenobjekte mit der SVG_SET_STROKE_VECTOR_EFFECT Methode.
// 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; "blau"; "weiß";1)
SVG_SET_STROKE_VECTOR_EFFECT ($rect1; "non-scaling-stroke")
// Second rectangle
$rect2 :=SVG_New_rect ($svgRef;45;1;40;40;0;0; "grün"; "weiß";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)