An die Vektorgrafiker - SVG

hi,

ich habe folgendes svg element:

es ist die commerzbank nördl. des hbf frankfurt an der mainzer str. es
ist ein etwa recheckiges gebäude mit drei “löchern” in der mitte.

irgendwie will das aber nicht schön aussehen, ja es ist sogar verkehrt.
zumindest meiner meinung nach.

eye of gnome zeigt es verkehrt, inkscape und gimp auch…

siehe hier:

http://www.gary68.de/temp/mapgen.svg
http://www.gary68.de/temp/mapgen.pdf

jemand eine idee?

ps: fill-rule ändern bringt nix…

WAS IST DA LOS?

many thanks!

gerhard

Hallo Gerhard,

ja, es ist falsch. Um deutlich zu sehen, was los ist, habe ich folgendes gemacht:

Erzeugen einer svg-Datei (svg-Tag hinzugefuegt). Das Ganze in OpenOffice.org Draw geladen, um 328,15 Grad gedreht und dann unter Beibehaltung der Groessenverhaeltnisse auf die ganze Seite vergroessert. Voila!

Leider kann ich die Datei nicht in diesen Beitrag einbinden, aber die Beschreibung sollte reichen, um es nachzuvollziehen. Falls Du OOo Draw nicht hasst, tut es ein M$-Pendant vielleicht auch…

In Worten: Die Polygonlinie laeuft von Aussen schraeg auf das mittlere Loch zu, erzeugt dieses, laeuft von dort zum linken Loch, erzeugt dieses, laeuft von dort zum rechten Loch, erzeugt dieses und laeuft von dort wieder nach Aussen. Da Du auf zwei verschiedenen Wegen von Aussen nach innen und zurueck laeufst, erhaelst Du das weisse Dreieck in der einen (unteren) Gebaeudeseite. Darueber hinaus sind die Linien alle etwas schief, was sich zusaetzlich unschoen bemerkbar macht.

EDIT: Nachtrag: In OOo Draw kann man den Fehler leicht korrigieren: Die schiefen Linien alle gerade ausrichten, und dann vor dem Rueckweg nach Aussen vom rechten Loch zunaechst zum mittleren Loch zurueckkehren. Wenn Du das Ganze dann zurueck skalierst und drehst, solltest Du das Gewuenschte bekommen…

Hallo Gerhard

Ohne wirklich Ahnung von der Materie zu haben, sieht es für mich so aus,
als wenn da ein Punkt auf dem Rückweg fehlt. Das führt dann zum hellen Dreieck.

Ich habe die Punkte mal in Fünfergruppen zusammengefasst (5 Punkte je Rechteck).
Vielleicht hilft das ja dein Problem zu erkennen.
Ansonsten versuche das Problem mit einem einfacheren Beispiel
(horizonzal, keine Erker, 100er Schritte) anzugehen.

Edbert (EvanE)

Vorweg: Ich kenne mich mit SVG nicht wirklich gut aus. Für Polygone mit Löchern nehme ich daher an, dass man ein Loch dadurch erzeugt indem man in ein Polygon noch ein Polygon malt und dabei 2 Eckpunkte doppelt verbindet.

In deiner Datei sieht es so aus, als würde bei den Löchern ein Punkt fehlen (nicht doppelt benutzt) was dazu führt, dass der Weg vom äußeren Polygon zum Loch und der Rückweg sich unterscheiden. Dadurch entstehen dann bei dir das Dreieck und das Fünfeck (auf den ersten Blick ebenfalls ein Dreieck).

Zum Zeichnen schlage ich daher folgendes vor:

  1. Äußeres Polygon zeichnen.
  2. Zu einem Eck eines inneren Polygons malen, dann zu den restlichen Ecken des inneren Polygons.
  3. Zum zuerst gemalten Eck des inneren Polygons zeichnen (Eck ein zweites Mal besuchen).
  4. Zum ersten Eck (Start/Ende des äußeren Polygons) zurückkehren.

Die Schritte 2 bis 4 müssen einmal pro Loch durchgeführt werden.

Nehmen wir folgendes Objekt als Beispiel
·------------------·
· ·----· ·
· · L2 · ·
· ·----· ·----· ·
· · L1 · ·
· ·----· ·
·------------------·

Wir starten links unten am äußeren Polygon (Ausgangspunkt), gehen nach rechts, nach oben, nach links, zum Anfang zurück.
Wir sind damit wieder am Ausgangspunkt. Nun zum linken unteren Eck des ersten Lochs (L1), dann nach rechts, nach oben, nach links, nach unten (zum linken unteren Eck von L1). Jetzt zurück zum Ausgangspunkt.
Nun zum linken unteren Eck des zweiten Lochs (L2), dann nach rechts, nach oben, nach links, nach unten (zum linken unteren Eck von L2). Jetzt zurück zum Ausgangspunkt.

Das zweimalige besuchen der Eckpunkte (im Beispiel jeweils die links unten) stellt sicher, dass wir genau den selben Weg vom Außenpolygon zum Loch und zurück nehmen. Damit entstehen die unerwarteten Dreiecke/Vielecke nicht mehr.

Ich hoffe ich habe richtig getippt und die Hinweise bringen dich weiter.

sieht so aus, als sei der trick, einen path statt ein polygon zu nehmen… aber teilweise ging es auch mit polygon.

Ich habe mir das ganze mal in Inkscape etwas genauer angesehen. Der Weg führt zunächst um das Gebäude herum, dann zum rechten Loch, dann zum linken Loch, dann zum mittleren Loch und schließlich wieder nach außen. Deshalb ist der Hinweg anders als der Rückweg und es gibt dieses weiße Dreieck. Inkscape und all die anderen Programme machen also genau das richtige: Wenn man von einem Punkt in diesem Dreieck eine Linien nach außen zieht, kreuzt man den Weg zwei Mal - das ist gerade, und “evenodd” bewirkt dann: keine Füllung, also weiß.

Um zu erreichen, dass das Gebäude richtig gefüllt wird, müsste man zunächst den äußeren Rand ablaufen, dann von dort aus zum ersten Loch gehen, um dieses Loch komplett herum, zurück zum gleichen Randpunkt, weiter zum nächsten Loch, wieder herum, noch mal zurück zum gleichen Randpunkt, und dann das gleiche noch mal für das dritte Loch. Das sähe dann so aus:

http://manuelhohmann.dyndns.org/mapgen.svg