Schleife in svg

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

Ich bekomme es mal wieder nicht hin. Für meine Aufgaben zur Wahrscheinlichkeitsrechnung brauche ich eine Urne mit Kugeln. Die soll etwa so aussehen:
Bild
Irgendwas funktioniert nicht. Die Urne geht (die lasse ich im svg Code mal weg), aber die Kugeln bekomme ich nicht zu sehen. Außerdem funktioniert das mit der Änderung der Koordinaten x und y nicht. ich wollte eigentlich erreichen, dass nach der 5. und 9. Kugel eine neue Reihe angefangen wird.
view:

Code: Alles auswählen

farben = ['red','green','blue']
farben_dict = {'red': 'rot', 'green': 'grün', 'blue': 'blau'}
nenner = random.randint(10,20)
kugeln = []
x = 215
y = 145
n = 0
for kugel in range(nenner):
    if n == 5:
        x = 230
        y = 158
    if n == 9:
        y = 186
    kugel = (farben[random.randint(0,2)],x+n*30,y)
    kugeln.append(kugel)
    n +=1
parameter = {'name': 'svg/stochastik.svg', 'object': 'urne', 'center_x': 200, 'center_y':160, 'kugeln': kugeln}
print(parameter)
und svg:

Code: Alles auswählen

<svg xmlns="http://www.w3.org/2000/svg">
version=1.1"center_y3
<svg viewbox="0 0 400 220">
{% if parameter.object == "urne" %}
  {% for farbe,x,y in kugeln %}
      <circle cx={{parameter.x}} cy={{parameter.y}} r=15 fill={{parameter.farbe}} stroke="black" />
  {% endfor %}
{% endif%}
</svg>
und

Code: Alles auswählen

print(parameter)
ergibt:

Code: Alles auswählen

{'name': 'svg/stochastik.svg', 'object': 'urne', 'center_x': 200, 'center_y': 160, 'kugeln': [('blue', 215, 145), ('red', 245, 145), ('blue', 275, 145), ('blue', 305, 145), ('green', 335, 145), ('red', 380, 158), ('blue', 410, 158), ('red', 440, 158), ('red', 470, 158), ('green', 500, 186), ('blue', 530, 186), ('green', 560, 186), ('green', 590, 186), ('green', 620, 186), ('green', 650, 186), ('red', 680, 186), ('green', 710, 186), ('green', 740, 186), ('green', 770, 186), ('red', 800, 186)]}
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

Warum das Bild nicht angezeigt wird weiß ich auch nicht :(
Benutzeravatar
Dennis89
User
Beiträge: 1186
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

das war ein Downloadlink von deiner Dropbox um das Bild runter zu laden.
Hochgeladen auf imgur.com und dann mit dem `img`-Tags:
Bild

Zum Rest kann ich dir leider nicht weiterhelfen.

Grüße
Dennis
Zuletzt geändert von Dennis89 am Sonntag 5. Mai 2024, 12:20, insgesamt 1-mal geändert.
"When I got the music, I got a place to go" [Rancid, 1993]
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

Das mit den Grafiken mittels Dropboxlink hat zuhause immer wunderbar funktioniert. Das muss jetzt an der Organisation meines Reiselaptops liegen - ich bin zurzeit wieder auf Reisen.
Benutzeravatar
grubenfox
User
Beiträge: 435
Registriert: Freitag 2. Dezember 2022, 15:49

Pitwheazle hat geschrieben: Sonntag 5. Mai 2024, 11:59 und svg:

Code: Alles auswählen

<svg xmlns="http://www.w3.org/2000/svg">
version=1.1"center_y3
<svg viewbox="0 0 400 220">
{% if parameter.object == "urne" %}
  {% for farbe,x,y in kugeln %}
      <circle cx={{parameter.x}} cy={{parameter.y}} r=15 fill={{parameter.farbe}} stroke="black" />
  {% endfor %}
{% endif%}
</svg>
bei großer Ahnungslosigkeit: wie sieht denn das wirkliche svg aus, welches bei dem obigen Code irgendwo hinten rauskommt? Zum Beispiel das `{% endfor %}` sieht ja gar nicht nach svg aus....
PS: die zweite Zeile sieht auch sehr kaputt aus
Zuletzt geändert von grubenfox am Sonntag 5. Mai 2024, 13:30, insgesamt 1-mal geändert.
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

Im Objectinspektor wird es gar nicht angezeigt. ???
Ich poste hier mal meinen ganzen svg Code. Das Glücksrad ("n-Eck") das ich aus Segmenten erstelle funktioniert mit der Schleife wunderbar:

Code: Alles auswählen

<svg xmlns="http://www.w3.org/2000/svg">
version=1.1"center_y3
<svg viewbox="0 0 400 220">
{% if parameter.object == "urne" %}

<rect width="165" height="150" x="{{parameter.center_x}}" y="{{parameter.center_y|add:-150}}" 
        stroke="None" fill="LightSkyBlue"  />
  <path d="M {{parameter.center_x}}, {{parameter.center_y|add:-150}}
      L {{parameter.center_x}}, {{parameter.center_y}}
      L {{parameter.center_x|add:165}}, {{parameter.center_y}}
      L {{parameter.center_x|add:165}}, {{parameter.center_y|add:-150}}"  
      fill = None stroke="black" />

  {% for farbe,x,y in kugeln %}
      <circle cx={{parameter.x}} cy={{parameter.y}} r=15 fill={{parameter.farbe}} stroke="black" />
  {% endfor %}

{% elif parameter.object == "n-eck" %}
    <g id="dreieck" >
      <path d="M {{parameter.schenkel_1_x}}, {{parameter.schenkel_1_y}}
          L {{parameter.center_x}}, {{parameter.center_y}}
          L {{parameter.schenkel_2_x}}, {{parameter.schenkel_2_y}}
          Z"  
          stroke="black" 
        />
    </g>
      {% for winkel,farbe in parameter.rotate %}
        <use href="#dreieck"  fill= "{{farbe}}" transform="rotate ({{winkel}} {{parameter.center_x}} {{parameter.center_y}})"/>
      {% endfor %}
      <circle cx={{parameter.center_x}} cy={{parameter.center_y}} r=15 fill="white" stroke="black" />
      <path d="M {{parameter.center_x|add:10}}, {{parameter.center_y|add:-110}}
          L {{parameter.center_x}}, {{parameter.center_y|add:-90}}
          L {{parameter.center_x|add:-10}}, {{parameter.center_y|add:-110}}
          Z"  
          fill="white" stroke="black" 
        />
{% endif%}
</svg>
Benutzeravatar
noisefloor
User
Beiträge: 3875
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

`kugeln` ist im Kontext des Templates doch gar nicht definiert und genau so wenig `parameter.x`, `parameter.y` und `parameter.farbe`. Es muss IMHO doch

Code: Alles auswählen

{% for kugel in parameter.kugeln %}
      <circle cx={{ kugel[1] }} cy={{ kugel[2] }} r=15 fill={{ kugel[0] }} stroke="black" />
  {% endfor %}
heißen.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

Prima, der Tipp hat in die richtige Richtung geführt. Richtig ist natürlich:

Code: Alles auswählen

  {% for farbe,x,y in parameter.kugeln %}
      <circle cx={{x}} cy={{y}} r=15 fill={{farbe}} stroke="black" />
  {% endfor %}
Danke!
Benutzeravatar
Kebap
User
Beiträge: 695
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

grubenfox hat geschrieben: Sonntag 5. Mai 2024, 13:08 Zum Beispiel das `{% endfor %}` sieht ja gar nicht nach svg aus....
Stimmt, das kommt aus der Django-Template-Sprache, mit der man (u.a.) SVG-Dateien etwas komfortabler und parametrisiert erstellen kann.

https://docs.djangoproject.com/en/5.0/r ... /language/
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten