Seite 1 von 1

Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 11:59
von Pitwheazle
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)]}

Re: Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 12:00
von Pitwheazle
Warum das Bild nicht angezeigt wird weiß ich auch nicht :(

Re: Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 12:12
von Dennis89
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

Re: Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 12:16
von Pitwheazle
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.

Re: Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 13:08
von grubenfox
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

Re: Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 13:21
von Pitwheazle
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>

Re: Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 13:29
von noisefloor
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

Re: Schleife in svg

Verfasst: Sonntag 5. Mai 2024, 13:41
von Pitwheazle
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!

Re: Schleife in svg

Verfasst: Montag 6. Mai 2024, 11:16
von Kebap
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/