Forum: PC-Programmierung elektrisches CAD Programm Quellcode in c++/gtk


von Daniel S. (z-irgendwas)


Lesenswert?

Hi,
ich programmiere nun schon seit einiger Zeit unter Linux mit c++/gtk. 
Nun möchte ich mich im Rahmen einer Jugend Forscht Arbeit an ein etwas 
größeres Projekt heranwagen(es soll ein Schaltplaneditor werden). Nur 
weiß ich leider nicht wie ich den grafischen teil( das zusammensetzen 
aller Bauteile) realisieren soll. Kennt jemand ein OpenSource Projekt, 
oder hat eine gute Idee, wie man das möglichst einfach Realisieren kann? 
Ich bin für jeden Vorschlag dankbar:)

Mfg Daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

OpenSource, C++, aber kein gtk: KiCAD.

von Karl H. (kbuchegg)


Lesenswert?

Daniel Stein schrieb:

> größeres Projekt heranwagen(es soll ein Schaltplaneditor werden). Nur
> weiß ich leider nicht wie ich den grafischen teil( das zusammensetzen
> aller Bauteile) realisieren soll.

Mit einem Bauteileditor, den du natürlich schreiben musst.

Wie sieht denn bei dir ein Bauteil aus?
Je nachdem ob du zb eni Bauteil aus Linien / Bögen zusammensetzen willst 
oder ob ein Bauteil zb einfach nur eine Bitmap ist, ist dann der interne 
Aufbau eines Bauteils ein anderer. Folgt aber alles daraus, wie du 
grundsätzlich ein Bauteil graphisch repräsentieren willst.

Linien/Bögen:  hat Vorteile beim Zoomen/Drucken. Dafür ist es aufwändig 
graphisch ansprechende Bauteile zu zeichnen
Bitmaps:  da kann man sich mit einem Malprogramm austoben, sitz aber 
dann beim Zoomen vor Dingen, die wie Stonehenge von oben aussehen.

von Clown (Gast)


Lesenswert?

Am Anfang muß es vielleicht nicht gleich ein Bauteile-Editor sein. Die 
ersten Symbole können auch vergleichsweise leicht von Hand entworfen und 
die nötigen Linien- und Bogenlisten dann per Texteditor angelegt werden.

Wenn GTK verwendet werden soll, ist das GtkDrawingArea(?) in Verbindung 
mit Cairo zu empfehlen.

Für Anregungen bezüglich des Dateiformats oder Implementierung, kann 
neben KiCAD vielleicht auch ein Blick auf gschem oder oregano geworfen 
werden. Letztes basiert möglicherweise sogar auf GTK.

von Daniel S. (z-irgendwas)


Lesenswert?

Erstmal vielen Dank für die Hilfe.
Erfahrung mit Cairo habe ich, bin aber nur bei dem zeichnen von Linien 
geblieben(hab keine Ahnung, wie man Bögen zeichnen soll).Mein Problem 
war eher, wenn man jetzt ein Bauteil hat, wie stellt man es an, das der 
User es beliebig mit der Maus positionieren kann? Mit cairo müsste man 
für jede Bewegung doch das komplette Fenster neu zeichnen:(

Daniel

von Karl H. (kbuchegg)


Lesenswert?

Clown schrieb:
> Am Anfang muß es vielleicht nicht gleich ein Bauteile-Editor sein. Die
> ersten Symbole können auch vergleichsweise leicht von Hand entworfen und
> die nötigen Linien- und Bogenlisten dann per Texteditor angelegt werden.

:-)
Genau so ziehe ich meine Editoren meistens hoch. Zur Bauteilbeschreibung 
erst mal ein Text File. Denn: Da kommt noch mehr dazu!
Ein Schaltplaneditor muss natürlich auch noch wissen, wo Anschlusspunkte 
sind; ob es sich bei diesem Anschluss um einen Ein- oder Ausgang 
handelt; ein Beschriftungstext für das Bauteil wär nicht schlecht; 
Bauteilwert (samt möglicher Einheiten), etc. etc.

Da kommt im Laufe der Zeit noch so einiges zusammen. Das alles erst mal 
für ein paar Bauteile in ein paar ASCII Dateien von Hand pflegen und 
erst dann wenn sich alles ein wenig stabilisiert hat, wird ein 
Bauteileditor dafür gemacht.

In letzter Zeit nehm ich dafür auch ganz gerne XML Files, weil man sie 
auch im Nachhinein noch gut erweitern kann, ohne in die 
Kompatibilitätsfalle zu laufen.

von Daniel S. (z-irgendwas)


Lesenswert?

Kennt einer von euch "eXact"? Ich finde die Idee mit dem Raster und dem 
Drag&Drop sehr schön, möchte es dennoch anders lösen. Ich finde Cairo 
eine gute wahl, doch wie macht man das mit dem Positionieren?

Daniel

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Möglicherweise wäre es sinnvoll, das Zeichnen mit OpenGL zu machen, dann 
ist es hardwarebeschleunigt und man könnte ggf. hübsche 3D-Spässchen 
einbauen. GtkGLExt ( http://projects.gnome.org/gtkglext/ ) ist eine 
Bibliothek, mit der man OpenGL in normale Gtk+ Programme einbinden kann. 
Auf der Seite gibt's auch ein C++ Binding.
PS: Wenn du mit C++ programmierst, könntest du das C++ Binding für Gtk+ 
namens gtkmm (http://www.gtkmm.org/) verwenden, das spart einiges an 
Tipparbeit.

von Daniel S. (z-irgendwas)


Lesenswert?

Ok, mein Plan sieht wie folgt aus:
Alle Positionen der Linien und Bauelemente, werden in Arrays 
gespeichert, so kann man sie später abfragen und verknüpfen(Simulation, 
Speichern, etc.).

Kann man in Cairo mehrere DrawWidgets übereinander machen? Dann könnte 
man das obere für das Positionieren einzelner Bauteile nehmen, und wenn 
man zufrieden ist, wird es einfach zum unteren hinzugefügt.

von Stefan Salewski (Gast)


Lesenswert?

>größeres Projekt heranwagen(es soll ein Schaltplaneditor werden

gschem verwendet C und GTK, aber sich da hineinzufinden ist mit Arbeit 
verbunden.

Zeichnen geht mit Cairo und GTK recht einfach, ich habe mal etwas mit 
Ruby herumgespielt, http://www.ssalewski.de/PetEd-Demo.html.en

Cairo ist aber etwas langsam, wenn es schnell sein muss ist wohl OpenGL 
besser.

von Karl H. (kbuchegg)


Lesenswert?

Daniel Stein schrieb:
> Ich finde die Idee mit dem Raster und dem
> Drag&Drop sehr schön, möchte es dennoch anders lösen. Ich finde Cairo
> eine gute wahl, doch wie macht man das mit dem Positionieren?

Gehs erst mal langsam an.
Sieh erst mal zu, dass du eine Klasse "Bauteil" hast, die einen Member 
"Grafik" beinhaltet, in dem wiederrum eine Liste von Graphikelementen 
existiert, die Linien oder Bögen sein können (von Grafikelement 
abgeleitete Klassen für Grafik-Linie bzw. Grafik-Bogen bzw. 
Grafik-Kreis). Sieh zu, dass du das an eine Position/Orientierung 
(welche sagt dir das Bauteil) malen kannst.
In diesem Zusammenhang wird zb eine Punktklasse zur Speicherung eines 
x/y Koordinatenpärchens interessant sein. Da in einem Schaltplaneditor 
keine allgemeinen Rotationen vorkommen werden, sondern nur vielfache von 
90°, würde es ausreichen die Position einfach nur als Punkt und eine von 
4 Lagen zu beschreiben. Wenn da nicht noch die Spiegelung wäre. Im 
Moment schwanke ist noch ob man da nicht der Einfachheit halber eine 
vollständige 2D-Transformationsmatrix benutzen sollte. Mit der kann man 
das alles mit Leichtigkeit beschreiben.

Dazu laden von einem File auf Anforderung des Benutzers und 
Positionieren, in dem dir der Benutzer die Position zeigt (Mausklick), 
wo er das Teil hin haben möchte. Ein entsprechendes Bauteil Objekt 
erzeugen und zu der Liste der im Dokument (dem Schaltplan) vorhandenen 
Bauteile hinzufügen. Danach Bnachrichtigung aller Views, dass sich das 
Dokument geändert hat und ein Bauteil hinzugekommen ist woraufhin der 
entsprechende View das Bauteil gemäss seiner (des Views) Bestimmung 
anzeigt.

Dann ...... hast du immer noch einen Haufen Arbeit vor dir, unter 
anderem einen Mausklick identifizieren, welches Bauteil am nächsten am 
Mausklick drann ist, überlegen wie du Undo/Redo machen möchtest (diese 
Entscheidung muss bald getroffen werden) und und und und

Und erst dann ..... kommt die Kür mit Drag&Drop.
Aber erst mal ist die Pflicht drann.


Und das ganze natürlich schön sauber objektorientiert aufbauen. Der 
Grafikteil selber macht in grafischen Editoren noch nicht einmal 10% 
aus. Der Rest ist Datenhaltung, Datenverwaltung, allgemeine 
Organisation.

von Karl H. (kbuchegg)


Lesenswert?

> werden in Arrays gespeichert

Ich hoffe mal zu deinen Gunsten, dass das ein leichtfertig dahergesagter 
Schnellschussfehler war. Mit Arrays willst du nicht rumhantieren. 
std::vector bzw std::list ist dein Freund. Leider wirst du zumindest im 
Grafikteil einen std::vector von Pointern machen müssen (damit du 
Inheritance nutzen kannst). Da würde es sich dann anbieten diesen in 
einer Klasse zu verstecken, wie zb der Grafikklasse und sich dort um das 
Datenmanagement (Allokieren bzw. Freigeben bzw. Kopien erzeugen) zu 
kümmern. Vollständigen Satz an 
Konstruktoren/Destruktor/Zuweisungsoperator nicht vergessen!

von Stefan Salewski (Gast)


Lesenswert?

@Buchegger

>Mausklick drann ist

Dran bitte mit nur einem n.

>überlegen wie du Undo/Redo machen möchtest

Ja, wie denn nun? Für jede Benutzeraktion die Inverse generieren und 
speichern? Hört sich nicht ganz einfach an, aber ist wohl die sauberste 
Lösung. Oder bei jeder Benutzeraktion eine Kopie aller Datenstrukturen 
anlegen? Würde mich nicht wundern, wenn es teils so gemacht wird. Oder 
ganz weglassen -- mein Auto hat auch kein Undo!

von Karl H. (kbuchegg)


Lesenswert?

Stefan Salewski schrieb:
> @Buchegger
>
>>Mausklick drann ist
>
> Dran bitte mit nur einem n.
>
>>überlegen wie du Undo/Redo machen möchtest
>
> Ja, wie denn nun? Für jede Benutzeraktion die Inverse generieren und
> speichern?

Ja kann man machen.
Meine Editoren machen das nach diesem Prinzip.

Alle Operationen sind in Klassen gekapselt die von einer gemeinsamen 
Basisklasse abgeleitet sind. Jede Operation implementiert eine 
Do/Undo/Redo/Finalize Member Funktion.
Dazu existiert im Dokument ein Undo Manager, der die Operationen sammelt 
und bei Bedarf den Auftrag zum Rückgängig machen erteilt. Woraufhin die 
Operation von der Undo-Liste auf die Redo Liste wandert. Wird eine neue 
Operation hinzugefügt, wird die Redo Liste verworfen und vorher 
natürlich alle Operationen darin benachrichtig, dass sie einen 
eventuelle Undo jetzt finalisieren dürfen. Eine Delete Operation löscht 
dann erst tatsächlich das von ihm gehaltene 'gelöschte' Datenobjekt. 
Vorher geht nicht, denn ein Redo könnte ja den Delete wieder aufheben 
und dann muss die Delete Operation das Datenobjekt wieder zum Dokument 
hinzufügen. Die Do bzw. Undo Funktionalität einer Delete Operation macht 
daher nichts anderes, als das Datenobjekt aus dem Dokument auszuketten 
und bei sich selber einen Pointer darauf zu installieren. Gelöscht wird 
das Datenobjekt erst, wenn die entsprechende Delete-Operation 
finalisiert wird.


Aber Achtung: Bei den Operationen handelt es nur um die ausführenden 
Objekte, die eine Operation implementieren. Das hat nichts mit GUI oder 
Benutzerinteraktion zu tun! Das sind bei mir wieder andere Klassen - ich 
nenne sie Tools.  Ein Add-Tool, welches ein Bauteil hinzufügt, kümmert 
sich darum, mit dem Benutzer zu interagieren. Ist alles soweit klar, 
dann erzeugt sie eine Add-Operation mit den entsprechenden Daten, lässt 
die Operation ihre Arbeit machen und übergibt die Operation an den 
Undo-Manager. Ein Intersect-Tool, welches alle Schnittpunkte zwischen 2 
geometrischen Elementen bestimmt, lässt sich vom Benutzer die Elemente 
zeigen, befragt dann eines der Elemente nach allen Schnittpunkten mit 
dem anderen und erzugt für jeden Schnittpunkt wieder eine Add-Operation, 
die den Schnittpunkt zur Datenbasis hinzufügt (die einzelnen 
Add-Operationen werden vorher noch in eine Gruppen-Operation gesteckt, 
damit sie für den Undo-Manager eine untrennbare Einheit sind). etc. etc.
Auf die Art ist Benutzerinteraktion und tatsächliche Manipulation der 
Datenstruktur sauber getrennt. Bei ansonsten gleicher Funktionalität ist 
es ein Kinderspiel die Benutzerinteraktion durch ein ganz anderes 
GUI-Konzept auszutauschen. Lediglich die Tool-Klassen müssen neu gemacht 
werden. Datenstruktur und Operationen auf die Datenstruktur bleiben wie 
gehabt.
(Und unter uns: so viele Operationen sind das gar nicht, die 
implementiert werden müssen)

> Hört sich nicht ganz einfach an, aber ist wohl die sauberste
> Lösung. Oder bei jeder Benutzeraktion eine Kopie aller Datenstrukturen
> anlegen? Würde mich nicht wundern, wenn es teils so gemacht wird.

Auch das wird gemacht.
Vorteil: In der Kopie sind ganz von alleine immer alle Daten vorhanden, 
auch bei Erweiterungen. Nachteil: Die Datenmengen sind enorm. Weiterer 
Nachteil: Da Kopien der Daten erzeugt werden müssen, muss man acht 
geben, wenn Datenobjekte untereinander verpointert sind. D.h. Der 
Mechanismus, der die Kopie erzeugt, muss eng mit den Datenobjekten 
zusammenarbeiten, damit die Kopie der Daten nachher auch wieder die 
gleiche funktionale Verpointerung beinhaltet. Das kann unter Umständen 
schon tricky sein. Allerdings kommt man um so einen Mechanismus sowieso 
nicht herum, denn spätestens beim Speichern in eine Datei benötigt man 
ihn, um die Datenstruktur beim nächsten Einlesen wieder korrekt aufbauen 
zu können.

Im Falle eines Schaltplan-Editors ist das zb die Wire-Information: 
Welcher Ausgang eines Bauteils ist mit welchem Eingang eines anderen 
Bauteils verbunden.

> Oder
> ganz weglassen -- mein Auto hat auch kein Undo!

Ein grafischer Editor ohne Undo ist in der Praxis unbrauchbar.

von Fragesteller (Gast)


Lesenswert?

Ähem! Mal im ernst, wenn ich hier Begriffe lese wie

funktionale Verpointerung ???
Intersect-Tool ???
Datenobjekt aus dem Dokument auszuketten ???
Undo Manager
Finalize Member Funktion

ja und dann auch noch Opengl und XML und 3D-Spässchen und warum nicht 
auch noch Spice gleich noch mit einbauen, Exel-Charts generieren und und 
und ..

Dabei hat der Fragesteller einen erleuchteten Satz seines aktuellen 
Kenntnisstandes wiedergegeben, der kaum Beachtung fand und lautete

Zitat "bin aber nur bei dem zeichnen von Linien
geblieben(hab keine Ahnung, wie man Bögen zeichnen soll)"

oder mit anderen Worten ausgedrückt: "ich hab so gut wie keinen blassen 
Schimmer, von alle dem, was da auf mich zukommt."

Vielleicht sollte er erst mal eine geeignete Bauteilstruktur bzw. Klasse 
formulieren und sich dabei mal überlegen, dass jedes Bauteil aus 
beliebig vielen primitiven eigenen Objekten wie Linien (Polygonen), 
Bögen, Kreisen, Punkten jeweils mit eigenen relativen Koordinaten 
besteht, die sich an einem (verändebaren) Raster orientieren. Die 
Primitiven können verschiedene Strichstärken, Farben (Füllungen) etc. 
aufweisen, verschiedene "Hot-Spots" beim überfahren der Maus besitzen 
(in der Mitte, am Rand, an den Anschlusspunkten), je nachdem welche 
Aktion bevorsteht (verschieben, drehen, skalieren, anschließen, 
kombinieren, gruppieren etc.) Textobjekte gehören auch dazu und dieses 
Bauteil sich selbst auf Befehl zeichnen können muss. Dann hat er zwar 
erst einen kleinen Bruchteil von allem geschafft, aber dennoch mal eine 
Grundlage (in Anbetracht des sperrlichen Kenntnisstandes).

PS: ich wüsste auch nicht auf Anhieb welche Codezeilen hierfür geeignet 
wären, würde aber wie gezeigt vorgehen. "Undo" macht mir Kopfzerbrechen, 
habe aber auch nur kurz überlegt (ist ja nicht meine Aufgabe, gelle). 
Ich halte das ganze für eine sehr anspruchsvolle Aufgabe, auch und vor 
allem in anbetracht, dass es bei TinyCad (ist ein Schaltplaneditor) nur 
sehr schleppend Fortschritte in der Entwicklung der SW gibt (und da 
arbeiten einige dran). Installiere dir das mal (falls du einen 
Windowsrechner hast). Eigentlich hat das Programm bereits alles was du 
machen möchtest und ist zudem noch überschaubar und quelloffen. Ich 
würde es in C# programmieren. Das geht mir eher ein wie C++. (ich meine 
echtes C++ "Klassengedöns" ;) und nicht C-Code).

Viel Glück!

von Stefan Salewski (Gast)


Lesenswert?

@Daniel Stein

Wahrscheinlich bist Du eh schon abgetaucht, aber was man vielleicht noch 
erwähnen sollte:

Man könnte auch daran denken ein Canvas Framework zu verwenden:

http://live.gnome.org/ProjectRidley/CanvasOverview
http://live.gnome.org/GooCanvas

Oder man macht einen "Schematic-Mode" für ein CAD-Programm, etwa für 
InkScape oder kivio/dia.

von Karl H. (kbuchegg)


Lesenswert?

Fragesteller schrieb:
> Ähem! Mal im ernst, wenn ich hier Begriffe lese wie
>
> funktionale Verpointerung ???
> Intersect-Tool ???
> Datenobjekt aus dem Dokument auszuketten ???
> Undo Manager
> Finalize Member Funktion
>

Das war für Stefan gedacht und nicht für den Fragesteller.
Ich hatte schon den Eindruck, dass Stefan damit was anfangen kann, wenn 
ich ihm einen kurzen Abriss darüber gebe, wie bei mir Undo funktioniert.


> Dabei hat der Fragesteller einen erleuchteten Satz seines aktuellen
> Kenntnisstandes wiedergegeben, der kaum Beachtung fand und lautete
>
> Zitat "bin aber nur bei dem zeichnen von Linien
> geblieben(hab keine Ahnung, wie man Bögen zeichnen soll)"
>
> oder mit anderen Worten ausgedrückt: "ich hab so gut wie keinen blassen
> Schimmer, von alle dem, was da auf mich zukommt."

Und wenn du hochscrollst, hab ich genau darauf Rücksicht genommen und 
ihm erst mal geraten mit einer einfachen Datenstruktur zu beginnen. 
Genauso wie du auch :-)

Denn ich hatte den Eindruck dass er denkt, das kriegt er alles gratis 
und umsonst und mit der Installation von GTK (oder was auch immer) wäre 
der teil dann schon erledigt.

von Stefan Salewski (Gast)


Lesenswert?

>Das war für Stefan gedacht und nicht für den Fragesteller.
>Ich hatte schon den Eindruck, dass Stefan damit was anfangen kann, wenn
>ich ihm einen kurzen Abriss darüber gebe, wie bei mir Undo funktioniert.

Da sicher, danke.

Aber den Daniel Stein haben wir wohl nun doch verschreckt, wie viele 
andere auch, u.a. auch den Kai G. Ein einfacher Schaltplaneditor ist 
sicher kein Hexenwerk und eine schöne Übung für grafische, 
objektorientierte Programmierung. Aber etwas Aufwand ist es eben doch. 
Wobei das Layout-Tool dann noch wesentlich aufwendiger wird -- DRC, 
Gerber-Export, Polygon-Operationen...

von Karl H. (kbuchegg)


Lesenswert?

Stefan Salewski schrieb:

> andere auch, u.a. auch den Kai G. Ein einfacher Schaltplaneditor ist
> sicher kein Hexenwerk und eine schöne Übung für grafische,
> objektorientierte Programmierung.

Eine wunderbare Übung!

> Aber etwas Aufwand ist es eben doch.

Du sagst es. Die Leute unterschätzen das.
Von einem Malprogramm ala Paint, bei dem ein paar Pixel in einer Bitmap 
manipuliert werden zu einem kleinen CAD (ist ja egal was es dann macht) 
ist es eine schöne Wegstrecke auch wenn es auf den ersten Blick so 
ähnlich aussieht. Aber es ist machbar und es lauern einige 
Stolpersteine, aber so ein Hexenwerk ist es dann auch wieder nicht. Die 
größte Überraschung: Man benötigt im Speicher eine Repräsentierung der 
Grafik in der Datenstruktur.

Die größte Enttäuschung ist meistens, dass man von den ach so tollen 
Bibliotheken erst mal wenig bis gar nichts brauchen kann. Zeichenfläche, 
Linien ausgeben, Mausposition erfahren. Das wars dann schon. Alles 
andere muss man mehr oder weniger selber machen. Wobei einem OpenGL mit 
den Display Listen und der Art und Weise wie Mausklicks auf das Primtiv 
zurückführen einem da schon einiges an Arbeit abnimmt. Aber auch das 
muss man erst mal lernen.

von Rolf Magnus (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Die größte Enttäuschung ist meistens, dass man von den ach so tollen
> Bibliotheken erst mal wenig bis gar nichts brauchen kann. Zeichenfläche,
> Linien ausgeben, Mausposition erfahren. Das wars dann schon. Alles
> andere muss man mehr oder weniger selber machen.

Heutzutage bringen doch GUI-Bibliotheken meisten ein "Canvas" mit oder 
bieten als Zusatz-Bibliothek eins an. Das nimmt einem große Teile der 
Arbeit ab. Bei Qt z.B. gibt es QGraphicsScene. Da kann man dann einfach 
Kreise, Linien, Text, aber z.B. auch Widgets, Pixmaps oder ganze SVGs 
reinstecken, und das kümmert sich schon ums Positionieren, Drehen, 
Zoomen, Mausinteraktion u.s.w.

von Stefan Salewski (Gast)


Lesenswert?

>Heutzutage bringen doch GUI-Bibliotheken meisten ein "Canvas" mit

Hatte ich doch oben schon erwähnt:

Beitrag "Re: elektrisches CAD Programm Quellcode in c++/gtk"

Müsste man sich mal ansehen...

von Jobst Q. (jobst_q)


Lesenswert?

"Oder man macht einen "Schematic-Mode" für ein CAD-Programm, etwa für
InkScape oder kivio/dia"

Auf jeden Fall würde ich es sehr begrüßen, wenn es endlich mal einen 
Schaltbildeditor geben würde, der SVG-Dateien ausgeben kann. Damit man 
sie mit den enormen Möglichkeiten von Inkscape weiterbearbeiten kann 
oder sie auch mit einfachen Textprogrammen automatisch abändern.

Mit der Qt-Canvas dürfte das eigentlich nicht schwer sein, die hat die 
SVG-Ausgabe mit eingebaut. Ich würde es auch gerne selber machen, doch 
mir fehlt die Zeit.

von Stefan Salewski (Gast)


Lesenswert?

Jobst Q. schrieb:
> "Oder man macht einen "Schematic-Mode" für ein CAD-Programm, etwa für
> InkScape oder kivio/dia"
>
> Auf jeden Fall würde ich es sehr begrüßen, wenn es endlich mal einen
> Schaltbildeditor geben würde, der SVG-Dateien ausgeben kann. Damit man
> sie mit den enormen Möglichkeiten von Inkscape weiterbearbeiten kann
> oder sie auch mit einfachen Textprogrammen automatisch abändern.
>

Bei Cairo bekommt man die Backends PDF, SVG usw. ja praktisch geschenkt, 
das ist einer der Vorteile. gschem verwendet ab 1.6 bereits Cairo, da 
sollte man SVG-Export einbauen können. Mein oben erwähntes Progrämmchen 
wird SVG natürlich auch unterstützen.

> Mit der Qt-Canvas dürfte das eigentlich nicht schwer sein, die hat die
> SVG-Ausgabe mit eingebaut. Ich würde es auch gerne selber machen, doch
> mir fehlt die Zeit.

Dann musst Du halt warten, oder den Umweg über PDF/PostScript probieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.