Seite 1 von 1
Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 13:50
von Pitwheazle
Ich möchte dieses Rechteck mit einer Bemaßung versehen:

Ich bekomme aber nur den ersten Buchstaben angezeigt. Ich übergebe z.B. dies an das Template:
svg Code
Code: Alles auswählen
<style>
.masse { font: bold 20px sans-serif; }
</style>
{% elif grafik.object == "rechteck" %}
<polygon class="zwei" points="{{grafik.x1}},{{grafik.y1}} {{grafik.x2}},{{grafik.y2}} {{grafik.x3}},{{grafik.y3}} {{grafik.x4}},{{grafik.y4}}" style="stroke:black;stroke-width:1;fill: #E0FFFF"/>
{%for x, y, txt in grafik.seiten %}
<text x="{{x}}" y="{{y}}" class="masse">{{txt}}</text>
{%endfor%}
ums Verplatzen wird nur der erste Buchstabe angezeigt - was mache ich denn jetzt schon wieder falsch?
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 14:08
von Sirius3
Du kannst Dir ja selbst anschauen, ob txt den Wert hat, den Du glaubst, dass er haben sollte.
Wenn nicht, dann passiert irgendetwas zwischen dem ersten Code und dem zweiten Code, das Du hier aber nicht zeigst.
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 14:21
von Pitwheazle
Aber auch wenn ich den svg Code in
<text x="{{x}}" y="{{y}}" class="text">langer Text</text>
abändere, wird mir nur der erste Buchstabe angezeigt. Ich weiß nicht so recht welche Codeteile ich hier hier noch einstellen könnte, die dieses Problem verursachen.

nur oben links taucht jetzt ein Kringel auf.
Den svg Code füge ich mit
Code: Alles auswählen
{% if grafik.name %}
{% include grafik.name %}
{% endif %}
ins template ein und im View übergebe ich
Code: Alles auswählen
grafik = {'name': 'svg/geometrie.svg', 'object': 'figur', 'h_hoehe': h_hoehe, 'h_breite': h_breite,
'x1':x1, 'y1':y1,'x2':x2, 'y2':y2,'x3':x3, 'y3':y3,'x4':x4, 'y4':y4,
'seiten': [
((xkoo[n]+xkoo[n+1])/2+seiten_x[n], (ykoo[n]+ykoo[n+1])/2+seiten_y[n], seiten[n]) for n in range(0,4)
]}
("rechteck" habe ich zwischenzeilich in "figur" abgeändert - da kommen noch z.B. Dreiecke)
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 15:21
von Kebap
Hast du den Hinweis von SIrius3 befolgt? Deine Antwort geht nicht darauf ein, was du vorgefunden hast.
Du kannst Dir ja selbst anschauen, ob txt den Wert hat, den Du glaubst, dass er haben sollte.
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 15:36
von Sirius3
@Pitwheazle: dann poste hier doch mal ein fertiges svg.
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 15:44
von Pitwheazle
Nun, ich dachte, das hätte ich. Ich habe den Inhalt von "grafik" mit print(grafik) ausgeben lassen bevor ich ihn an das template übergebe. Und bekomme z.B.:
Code: Alles auswählen
{'name': 'svg/geometrie.svg', 'object': 'figur', 'h_hoehe': 400, 'h_breite': 600, 'x1': 240, 'y1': 210, 'x2': 360, 'y2': 210, 'x3': 360, 'y3': 190, 'x4': 240, 'y4': 190, 'seiten': [(300.0, 230.0, 'l='), (370.0, 200.0, 'h=2mm'), (300.0, 190.0, ''), (240.0, 200.0, '')]}
und wenn ich den Inhalt von
durch irgeneinen anderen Text ersetze, dann bekomme ich den ja auch angezeigt - halt immer nur den ersten Buchstaben. Und wenn ich {{text}} im svg Code durch "langer Text" ersetze bekomme ich auch nur das "l" angezeigt. Wo kann ich denn den Inhalt sonst noch überprüfen, bzw, wo kann er denn sonst noch verändert werden? Der svg Code wird doch direkt im template angezeigt.
Und auch im inspector wird der Wert angezeigt:

Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 15:45
von Pitwheazle
Sirius3 hat geschrieben: Freitag 11. November 2022, 15:36
@Pitwheazle: dann poste hier doch mal ein fertiges svg.
Was meinst du mit "fertig" den gesamten Code? (Der gilt auch für alle meine anderen Grafiken)
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 15:57
von Pitwheazle
Vielen Dank für eure Mühe, ich habe die Lösung gefunden. Ich muss die Koordinaten als int übergeben und habe
Code: Alles auswählen
((xkoo[n]+xkoo[n+1])/2+seiten_x[n], (ykoo[n]+ykoo[n+1])/2+seiten_y[n], seiten[n]) for n in range(0,4)
in
Code: Alles auswählen
(int((xkoo[n]+xkoo[n+1])/2+seiten_x[n]), int((ykoo[n]+ykoo[n+1])/2+seiten_y[n]), seiten[n]) for n in range(0,4)
geändert, jetzt klappt es! ... Warum auch immer.
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 16:08
von Sirius3
In deinem Screenshot (grrrr) sieht man ja jetzt, dass du die Koordinaten mit Komma statt mit Punkt angegeben hast.
Das sieht man an Deinem Template nicht!
Das ist für jeden Programmierer auch sehr überraschend.
Da musst Du ja irgendwas extrem seltsames gemacht haben.
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 16:14
von Pitwheazle
Ich habe es gefunden. Ich muss die Koordinaten als int übergeben und musste:
Code: Alles auswählen
'seiten': [
(xkoo[n]+xkoo[n+1])/2+seiten_x[n], (ykoo[n]+ykoo[n+1])/2+seiten_y[n], seiten[n]) for n in range(0,4)
in
Code: Alles auswählen
'seiten': [
(int((xkoo[n]+xkoo[n+1])/2+seiten_x[n]), int((ykoo[n]+ykoo[n+1])/2+seiten_y[n]), seiten[n]) for n in range(0,4)
abändern.
Entschuldigt wieder mal die Mühe!
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 16:22
von __blackjack__
@Pitwheazle: Das musst Du aber nur machen weil ja irgendwas Punkte in Kommas verändert, nicht weil man da tatsächlich nur ganze Zahlen angeben kann. Und dieses irgendwas ist ja wohl Code von Dir. Das ist jetzt ein workaround für ein Problem, aber nicht wirklich die Lösung.
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 16:29
von Pitwheazle
__blackjack__ hat geschrieben: Freitag 11. November 2022, 16:22
Und dieses irgendwas ist ja wohl Code von Dir. Das ist jetzt ein workaround für ein Problem, aber nicht wirklich die Lösung.
Nein? Ich hatte schon festgestellt, dass svg Koordinaten ganzzahlig sein müssen (das Problem hatte ich schon mal) und wenn ich den Durchschnittswert meiner beiden Ganzzahlwerten (xkoo[n] und xkoo[n+1]) bilde, indem ich diese addiere und durch Zwei teile, entsteht eine Kommazahl und mit der kann, nach meiner Erfahrung, svg nicht umgehen.
Re: Text in svg zeigt nur einen Buchstaben
Verfasst: Freitag 11. November 2022, 19:10
von __blackjack__
@Pitwheazle: Koordinaten müssen bei SVG nicht ganzzahlig sein, das können auch Gleitkommazahlen sein, allerdings wie das im Rechnerbereich üblich ist mit einem Dezimal*punkt*. Also 0.5 geht, 0,5 nicht, und irgendwas sorgt anscheinend bei Deinem Code dafür, dass Punkte durch Kommas ersetzt werden, und *das* geht nicht. Und das ist auch grundsätzlich ein Problem, denn das sollte so nicht sein. Man kann dann ja auch keine Texte mit Punkten am Satzende oder z.B. bei Abkürzungen verwenden.