Aus einem SVG (mit Inkscape erstellt) soll ein Pfad in Koordinaten von gleichmässig verteilten Punkten umgewandelt werden. Das angefügte SVG zeigt den Pfad. Keine Angst, ich mache schon einen einzigen Pfad daraus, wenn es denn soweit ist! Mit welchem Programm/Script kann ich das bewerkstelligen?
Hintergrund: Von der Steuerung meiner Modelleisenbahn kann ich die Position eines Zuges erhalten und würde die gerne graphisch anzeigen. Also ein roter Kreis oder so der auf der Linie entlangfährt. Wenn ich nun eine Tabelle hätte mit einigen hundert Punkten wäre der Rest für mich kein Problem. Zwischenwerte kann ich interpolieren! Manuelles eintragen von so vielen Punkten würde ich gerne vermeiden...
Vielleicht gibt es ja auch noch andere, einfachere Lösungen! Freue mich auf Ideen!
Im Zuge meiner Recherche ziehe ich auch einen Umweg über Gcode in Betracht, da habe ich schon mal Koordinaten - aber noch noch keine gleichmässigen Wegstücke.
da habe ich schon mal Koordinaten - aber noch noch keine
gleichmässigen Wegstücke.
Was willst Du mit den Punkten am Ende machen? In welcher Form brauchst
Du die Punkte?
Korrektur: Ich brauche nicht unbedingt gleichmässige Wegstücke. Ich stelle mir eine Tabelle vor etwa so:
1
| Wegstrecke | X | Y |
2
+------------+----+----+
3
| 0 | 25 | 10 |
4
| 2.2 | 27 | 10 |
5
usw.
Ich bekomme also von der Steuerung den gefahrenen Weg, z.B. 1.1, und die Tabelle gibt mir dann mit Interpolation X=26 und Y=10 zurück. Dort male ich dann einen roten Kreis oder so.
Inkscape kann dir dabei helfen, Koordinaten äquidistanter Wegpunkte zu
generieren:
Mit "Extensions/Generate from Path/Distribute Along Path" kannst du ein
Objekt (am besten einen kleinen Kreis) wiederholt als Kopie auf einem
gegebenen Pfad platzieren. Der Abstand zwischen den einzelnen Kopien
entlang des Pfads kann durch den Parameter "Space between copies"
festgelegt werden. Das Kästchen "Follow path orientation" sollte
deaktiviert sein, denn dadurch werden die Kopien nur verschoben und
nicht rotiert was die Ermittlung der absoluten Koordinaten (s.u.)
vereinfacht. Weitere Infors liefert der "Help"-Tab des Dialogs.
Die neu generierten Objekte sind in einer Gruppe zusammengefasst und
sehen in der SVG-Datei wie folgt aus:
Die Koordinaten cy und cy sind dabei diejenigen des ursprünglichen
Objekts und für alle Kopien gleich. Zu diesen Koordinaten muss die
Verschiebung in "transform" hinzuaddiert werden, um die absoluten
Koordinaten der Punkte zu erhalten.
Moment, vielleicht habe ich die Fragestellung nicht verstanden: Soll das laufend gemacht werden, (z.B. um "Knoten" auf der Linie äquidistant abzubilden), oder nur einmal (z.B. um Bohrungen für LEDs auf einer Anzeigeplatte zu positionieren)?
Meine obige Antwort ging vom ersten Fall aus.
Wenn es nur darum geht, das ein einziges Mal zu machen, sollte das jedes CAD können. Bei mir tritt diese Aufgabe z.B. regelmäßig auf, wenn ich Schablonen mit Nahtlöchern herstelle. Ich mache das dann mit TurboCAD. Daß es dafür ein Inkscape-Plugin gibt, ist natürlich auch klasse!
Falls das später im Browser läuft, könntest du die Punkte euch einfach
per CSS & JS auf dem Pfad platzieren.
Ja jetzt bin ich ein bisschen im Dilemma. Das geht im Browser so schön einfach! Eigentlich wollte ich ein Windows-Window nehmen und das Ganze mit PureBasic umsetzen. Dafür fehlten mir nur die Koordinaten.
Aber im Browser muss ich ja noch die Datenübernahme machen. Sowas mache ich normalerweise mit SpiderBasic und Inline-JS, wie: Beitrag "Browsercache ausschalten" aber die ganzen Callbacks schrecken mich wieder ab...
Was ist passiert? Ist zwischenzeitlich ein Meteorit eingeschlagen? ;-)
Please first convert objects to paths!
Vermutlich hast du eine andere Inkscape-Version (ich habe 1.3.2), bei
der das zu verteilende Objekt zwingend ein Path sein muss (ein Kreis ist
keiner). Mit "Path/Object to Path" kannst du den Kreis in einen Path
konvertieren, dann sollte es funktionieren.
Bei mir werden nach der Konvertierung die Kreise durch vier
90°-Kreisbögen dargestellt:
Der Bezugspunkt liegt nun aber nicht mehr im Mittelpunkt des Kreises,
sondern an seinem rechten Rand. Das muss bei der Umrechnung in absolute
Koordinaten berücksichtigt werden, indem von der x-Koordinate noch der
Kreisradius (hier 0.5) subtrahiert wird.
So habe nun einen rudimentären Anzeiger programmiert. Was jetzt mit dem TrackBar einstellbar ist, kommt dann von der Zug-Steuerung. Bild, Source und .exe im Anhang! Bild flackert noch, weil immer neu gezeichnet - mach's dann mit einem Sprite!