x

An die Vektorgrafiker - SVG


  1. An die Vektorgrafiker - SVG · Gary68 (Gast) · 13.02.2010 22:59 · [flux]

    hi,

    ich habe folgendes svg element:

    <polygon fill-rule="evenodd" fill="#919191" points="833,197 824,181
    836,174 819,147 807,155 797,140 948,46 990,113 973,123 967,113 833,197
    894,135 880,111 905,96 919,121 894,135 853,161 838,137 862,122 877,146
    853,161 937,111 920,86 945,69 962,95 937,111 " />

    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


    • Re: An die Vektorgrafiker - SVG · schlauchboot (Gast) · 14.02.2010 00:21 · [flux]

      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...


    • Re: An die Vektorgrafiker - SVG · EvanE (Gast) · 14.02.2010 00:32 · [flux]

      Gary68 wrote:

      ich habe folgendes svg element:
      <polygon fill-rule="evenodd" fill="#919191" points="
      833,197 824,181 836,174 819,147 807,155
      797,140 948,460 990,113 973,123 967,113
      833,197 894,135 880,111 905,960 919,121
      894,135 853,161 838,137 862,122 877,146
      853,161 937,111 920,860 945,690 962,950
      937,111 " />
      ... 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.

      ... siehe hier: http://www.gary68.de/temp/mapgen.svg ...
      jemand eine idee?

      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)


    • Re: An die Vektorgrafiker - SVG · Augustus Kling (Gast) · 14.02.2010 01:08 · [flux]

      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.


    • Re: An die Vektorgrafiker - SVG · Gary68 (Gast) · 14.02.2010 10:36 · [flux]

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


    • Re: An die Vektorgrafiker - SVG · MHohmann (Gast) · 14.02.2010 12:59 · [flux]

      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:

      <polygon fill-rule="evenodd" fill="#919191" points="833,197 824,181 836,174 819,147 807,155 797,140 948,46 990,113 973,123 967,113 833,197 894,135 880,111 905,96 919,121 894,135 833,197 853,161 838,137 862,122 877,146 853,161 833,197 937,111 920,86 945,69 962,95 937,111"/>

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