Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SVG example

109 views
Skip to first unread message

Michael Gerbracht

unread,
Nov 7, 2013, 2:54:50 PM11/7/13
to
ich w�rde gerne in einem .net Programm (C#) selbsterstellte SVG-Grafiken
darstellen. Bei meiner eigenen Recherche habe ich leider sehr wenig finden
k�nnen - nur einige sehr gro�e Projekte, bei denen ich nicht verstehe, wie
ich sie zum Laufen bekomme (bin noch VS-Anf�nger). Ich habe aber den Tipp
bekommen, dass es bei der VS2005 SDK ein Beispiel gibt, SVGViewer. Ich habe
auch noch eine .ISO Datei mit VS2005 finden k�nnen, aber VS2005 l�sst sich
anscheinend nicht unter Windows 8.1 installieren ("es gibt
Kompatibilit�tsprobleme").

Daher meine Frage: K�nnte mir jemand evtl. nur das SVGViewer Projekt per
E-Mail schicken (Signatur beachten!) oder anderweitig zur Verf�gung stellen,
wenn Ihr es noch irgendwo habt? Oder kennt Ihr vielleicht ein anderes, recht
einfaches Beispiel-Projekt? Ich m�chte ja nur SVG-Daten in einem Fenster
anzeigen - habe nicht erwaret, dass es so kompliziert ist.

Vielen Dank!
Michael

--
Please replace "nospam" by "m.gerbracht" when replying by mail

Bjoern Hoehrmann

unread,
Nov 7, 2013, 4:13:27 PM11/7/13
to
* Michael Gerbracht wrote in de.comp.lang.dotnet.csharp:
Das gibt es wohl http://msdn.microsoft.com/en-us/library/bb166456 aber
es ist unwahrscheinlich, dass das Beispiel nennenswert viel von der SVG
Spezifikation implementiert; entweder ist das sehr abgespeckt, oder es
braucht irgendeine externe Komponente. Inzwischen kann der IE allerdings
SVG, damit w�re die einfachste Variante vermutlich einen WebBrowser ein-
zubinden. Es gibt auch http://sourceforge.net/projects/svgdomcsharp/ ein
paar Ans�tze SVG direkt in C# zu implementieren, aber selbst Weiterent-
wicklungen ala http://sharpvectors.codeplex.com/ werden seit langem
nicht aktualisiert, da h�tte ich also eher weniger Hoffnung.
--
Bj�rn H�hrmann � mailto:bjo...@hoehrmann.dehttp://bjoern.hoehrmann.de
Am Badedeich 7 � Telefon: +49(0)160/4415681http://www.bjoernsworld.de
25899 Dageb�ll � PGP Pub. KeyID: 0xA4357E78 � http://www.websitedev.de/

Michael Gerbracht

unread,
Nov 8, 2013, 10:51:26 AM11/8/13
to
In article <i90o79trmhldcr3kt...@hive.bjoern.hoehrmann.de>,
Bjoern Hoehrmann <bjo...@hoehrmann.de> wrote:
> * Michael Gerbracht wrote in de.comp.lang.dotnet.csharp:
> >ich w�rde gerne in einem .net Programm (C#) selbsterstellte SVG-Grafiken
> >darstellen. Bei meiner eigenen Recherche habe ich leider sehr wenig finden
> >k�nnen - nur einige sehr gro�e Projekte, bei denen ich nicht verstehe, wie
> >ich sie zum Laufen bekomme (bin noch VS-Anf�nger). Ich habe aber den Tipp
> >bekommen, dass es bei der VS2005 SDK ein Beispiel gibt, SVGViewer. Ich
> >habe auch noch eine .ISO Datei mit VS2005 finden k�nnen, aber VS2005 l�sst
> >sich anscheinend nicht unter Windows 8.1 installieren ("es gibt
> >Kompatibilit�tsprobleme").
> >
> >Daher meine Frage: K�nnte mir jemand evtl. nur das SVGViewer Projekt per
> >E-Mail schicken (Signatur beachten!) oder anderweitig zur Verf�gung
> >stellen, wenn Ihr es noch irgendwo habt? Oder kennt Ihr vielleicht ein
> >anderes, recht einfaches Beispiel-Projekt? Ich m�chte ja nur SVG-Daten in
> >einem Fenster anzeigen - habe nicht erwaret, dass es so kompliziert ist.

> Das gibt es wohl http://msdn.microsoft.com/en-us/library/bb166456 aber es
> ist unwahrscheinlich, dass das Beispiel nennenswert viel von der SVG
> Spezifikation implementiert; entweder ist das sehr abgespeckt, oder es
> braucht irgendeine externe Komponente.

Vielen Dank, die Seite kenne ich schon, ich sehe nur nicht, wie ich an das
Projekt komme. Dort hei�t es: "Open the SVGViewer.sln solution in the <Visual
Studio SDK Installation Path>\VisualStudioIntegration\Samples\IDE\CSharp\
Example.SvGViewer\". Dieser Pfad existiert bei mir nicht. Habe au�erdem schon
nach der "*SvGViewer*" auf der Festplatte gesucht - ohne Erghebnis. Aber wenn
es ohnehin nicht hilft, dann brauche ich es auch nicht zu probieren.

> Inzwischen kann der IE allerdings SVG, damit w�re die einfachste Variante
> vermutlich einen WebBrowser ein- zubinden.

Ja, das w�re vielleicht auch keine schlechte Idee, wenn es m�glich ist das
SVG in einem eigenen Fenster anzuzeigen. Hab mich noch nicht damit
besch�ftigt, aber ich denke das sollte gehen. Dann w�rde ich eine quasi leere
HTML-Datei generieren, die nur die SVG-Grafik zeigt. Evtl. die kompatibelste
Variante, da sie auch noch weiterentwickelt wird.

> Es gibt auch http://sourceforge.net/projects/svgdomcsharp/ ein paar Ans�tze
> SVG direkt in C# zu implementieren, aber selbst Weiterent- wicklungen ala
> http://sharpvectors.codeplex.com/ werden seit langem nicht aktualisiert, da
> h�tte ich also eher weniger Hoffnung.

Vielen Dank trotzdem, werde ich mir mal anschauen, denn ich will nur
wissenschaftliche Graphen anzeigen, da brauche ich keine komplizierten
Schatteneffekte oder Linsenverzerrung oder so, ein paar Quadrate, Kreise,
Linien und Schrift gen�gen da schon fast.

Ok, ich werde mir die M�glichkeiten mal in Ruhe ansehen! Vielen Dank f�r die
Tipps!

Ulrich Korndoerfer

unread,
Nov 9, 2013, 5:34:22 PM11/9/13
to
Hallo,

Michael Gerbracht schrieb:
> ich würde gerne in einem .net Programm (C#) selbsterstellte SVG-Grafiken
> darstellen. Bei meiner eigenen Recherche habe ich leider sehr wenig finden
> können - nur einige sehr große Projekte, bei denen ich nicht verstehe, wie
> ich sie zum Laufen bekomme (bin noch VS-Anfänger). Ich habe aber den Tipp
> bekommen, dass es bei der VS2005 SDK ein Beispiel gibt, SVGViewer. Ich habe
> auch noch eine .ISO Datei mit VS2005 finden können, aber VS2005 lässt sich
> anscheinend nicht unter Windows 8.1 installieren ("es gibt
> Kompatibilitätsprobleme").
>
> Daher meine Frage: Könnte mir jemand evtl. nur das SVGViewer Projekt per
> E-Mail schicken (Signatur beachten!) oder anderweitig zur Verfügung stellen,
> wenn Ihr es noch irgendwo habt? Oder kennt Ihr vielleicht ein anderes, recht
> einfaches Beispiel-Projekt? Ich möchte ja nur SVG-Daten in einem Fenster
> anzeigen - habe nicht erwaret, dass es so kompliziert ist.
>
> Vielen Dank!
> Michael
>

Zu Deiner Info: die OpenSource Bibliothek Cairo kann SVG rendern. Für
.NET (Mono) gibt es Languagebindings. Siehe zb

http://www.mono-project.com/Mono.Cairo

oder allgemeiner

http://cairographics.org/bindings/

Es gibt auch einen komfortablen COM-Wrapper (COM-Objekte kann man ja
einfach von .NET aus verwenden), zu finden unter

http://www.vbrichclient.com

Dort findet man die Cairo-Bibliothek als Windowsbinary mit der StdCall
Konvention, implementiert in vb_cairo_sqlite.dll (in dieser Dll ist
neben Cairo auch noch die SQLite-Datenbanksoftware implementiert). Dies
würde schon ausreichen (die Cairo-Methoden in der Dll können ja per
PInvoke aufgerufen werden und die Doku der Methoden sollte in der
originalen Cairo-Doku auf cairographics.org zu finden sein). Der
COM-Wrapper heißt vbRichClient5.dll und stellt diverse COM-Objekte zur
Verfügung. Er hat sogar eine Wrapperklasse, die speziell für das Rendern
von SVGs gemachtg wurde (cSVG mit zwei Methoden: einer zum Laden der
SVG-Daten und eine zum Rendern). Der COM-Wrapper ist allerdings mit VB6
erzeugt (native Code) und benötigt deshalb die VB6-Runtime. Die wiederum
sollte auf jedem halbwegs aktuellem Windowssystem vorhanden sein,
ansonsten wäre sie bei MS per Download erhältlich.

--
Ulrich Korndoerfer

VB tips, helpers, solutions -> http://www.prosource.de/Downloads/
MS Newsgruppen Alternativen -> http://www.prosource.de/ms-ng-umzug.html

Michael Gerbracht

unread,
Nov 10, 2013, 5:29:52 AM11/10/13
to
Hallo Ulrich,

In article <be7rjm...@mid.individual.net>,
Ulrich Korndoerfer <ulrich_wa...@prosource.de> wrote:
> Michael Gerbracht schrieb:
> > ich würde gerne in einem .net Programm (C#) selbsterstellte SVG-Grafiken
> > darstellen. [...]

> Zu Deiner Info: die OpenSource Bibliothek Cairo kann SVG rendern. Für
> .NET (Mono) gibt es Languagebindings. Siehe zb

> http://www.mono-project.com/Mono.Cairo

> oder allgemeiner

> http://cairographics.org/bindings/

> Es gibt auch einen komfortablen COM-Wrapper (COM-Objekte kann man ja
> einfach von .NET aus verwenden), zu finden unter

> http://www.vbrichclient.com

> Dort findet man die Cairo-Bibliothek als Windowsbinary mit der StdCall
> Konvention, implementiert in vb_cairo_sqlite.dll (in dieser Dll ist
> neben Cairo auch noch die SQLite-Datenbanksoftware implementiert). Dies
> würde schon ausreichen (die Cairo-Methoden in der Dll können ja per
> PInvoke aufgerufen werden und die Doku der Methoden sollte in der
> originalen Cairo-Doku auf cairographics.org zu finden sein). Der
> COM-Wrapper heißt vbRichClient5.dll und stellt diverse COM-Objekte zur
> Verfügung. Er hat sogar eine Wrapperklasse, die speziell für das Rendern
> von SVGs gemachtg wurde (cSVG mit zwei Methoden: einer zum Laden der
> SVG-Daten und eine zum Rendern). Der COM-Wrapper ist allerdings mit VB6
> erzeugt (native Code) und benötigt deshalb die VB6-Runtime. Die wiederum
> sollte auf jedem halbwegs aktuellem Windowssystem vorhanden sein,
> ansonsten wäre sie bei MS per Download erhältlich.

Ok, vielen Dank für den Hinweis! Ich erzeuge die Grafiken bereits mit Cairo,
allerdings mit LuaCairo (der Code zum Erzeugen der Grafiken ist in lua
geschrieben, daher möchte ich bei LuaCairo bleiben). Die Idee war mit
LuaCairo SVG-Grafiken zu erzeugen, diese an C# weiterzureichen und dort zu
rendern. Hier gibt es eine Liste mit surfaces, die sich in LuaCairo rendern
lassen:

http://www.dynaset.org/dogusanh/download/luacairo.html

"COM" taucht dort nicht explizit auf, ich frage mich aber, ob WIN32 identisch
ist mit COM? Oder gibt es etwas naheliegendes, wenn man sich die Liste
ansieht? Bräuchte ich zur Darstellung noch den COM-Wrapper? Mir fehlt noch
der Durchblick...

Bjoern Hoehrmann

unread,
Nov 10, 2013, 8:34:29 AM11/10/13
to
* Michael Gerbracht wrote in de.comp.lang.dotnet.csharp:
>Ok, vielen Dank für den Hinweis! Ich erzeuge die Grafiken bereits mit Cairo,
>allerdings mit LuaCairo (der Code zum Erzeugen der Grafiken ist in lua
>geschrieben, daher möchte ich bei LuaCairo bleiben). Die Idee war mit
>LuaCairo SVG-Grafiken zu erzeugen, diese an C# weiterzureichen und dort zu
>rendern. Hier gibt es eine Liste mit surfaces, die sich in LuaCairo rendern
>lassen:
>
>http://www.dynaset.org/dogusanh/download/luacairo.html
>
>"COM" taucht dort nicht explizit auf, ich frage mich aber, ob WIN32 identisch
>ist mit COM? Oder gibt es etwas naheliegendes, wenn man sich die Liste
>ansieht? Bräuchte ich zur Darstellung noch den COM-Wrapper? Mir fehlt noch
>der Durchblick...

Ich würde davon ausgehen, das "Win32Surface" verwendet GDI Funktionen
zum malen. COM steht für Component Object Model, damit kann man nicht
direkt malen, damit macht man Software-Schnittstellen.
--
Björn Höhrmann · mailto:bjo...@hoehrmann.de · http://bjoern.hoehrmann.de
Am Badedeich 7 · Telefon: +49(0)160/4415681 · http://www.bjoernsworld.de
25899 Dagebüll · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Ulrich Korndoerfer

unread,
Nov 10, 2013, 7:46:54 PM11/10/13
to
Hallo,

Michael Gerbracht schrieb:

> Hallo Ulrich,
> ...
> Ok, vielen Dank für den Hinweis! Ich erzeuge die Grafiken bereits mit Cairo,
> allerdings mit LuaCairo (der Code zum Erzeugen der Grafiken ist in lua
> geschrieben, daher möchte ich bei LuaCairo bleiben). Die Idee war mit
> LuaCairo SVG-Grafiken zu erzeugen, diese an C# weiterzureichen und dort zu
> rendern. Hier gibt es eine Liste mit surfaces, die sich in LuaCairo rendern
> lassen:
>
> http://www.dynaset.org/dogusanh/download/luacairo.html
>
> "COM" taucht dort nicht explizit auf, ich frage mich aber, ob WIN32 identisch
> ist mit COM? Oder gibt es etwas naheliegendes, wenn man sich die Liste
> ansieht? Bräuchte ich zur Darstellung noch den COM-Wrapper? Mir fehlt noch
> der Durchblick...
> ...

Versuche mal abzuhelfen:

Cairo ist eine Graphikbibliothek, die Graphiken erzeugen kann. Dazu
stellt sie ua. eine Reihe von graphikerzeugenden Befehlen zur Verfügung
(zB zum Linienzeichnen, Rechteckzeichnen etc). Diese graphikerzeugenden
Befehle brauchen aber eine "Zeichenfläche", auf die sie zeichnen sollen.
Im Cairo-"Speak" heissen die "Surfaces". Man wählt also eine
"Zeichenfläche" aus und "zeichnet" darauf durch den Aufruf der von Cairo
zur Verfügung gestellten Zeichenmethoden. Cairo setzt diese Cairo
eigenen Zeichenmethoden um in für die ausgewählte Zeichenfläche
verständliche Daten/Methoden.

Die Zeichenfläche kann zB eine "SVG-Zeichenfläche" sein. Dann wird, wenn
per Cairo-Methode eine Linie auf eine "SVG-Zeichenfläche" gezeichnet
werden soll, einfach ein passender SVG-Eintrag erzeugt. Wäre die
Zeichenfläche eine "WIN32-Zeichenfläche", würde die Cairo-Methode einen
passenden Windows-API Aufruf zum Zeichnen einer Linie generieren.

LuaCairo ist eine Anwendung, die es erlaubt, per Lua-Code interaktiv
Cairo anzuweisen, diverse Zeichenbefehle auszuführen. Das "Ergebnis"
dieser Zeichenbefehle ist dabei sichtbar, da LuaCairo alle diese
Zeichenbefehle erstmal auf eine (wenns ein Rechner unter Windows ist)
"Win32-Surface" ausgibt. Das ist praktisch, weil man gleich das Ergebnis
sieht (an der graphischen Ausgabe), was man da vorgegeben hat. So kann
man lernen, was die Cairo-Zeichenaufrufe bewirken (zB wie sich die
Vorgaben für Linienenden auswirken).

Dank des Cairo-Konzeptes ist es nun einfach, nachdem man zufrieden ist
mit dem, was man da ausgeben liess, den ganzen Schmodder nicht graphisch
auf den Schirm auszugeben, sondern (zur späteren Verwendung sozusagen)
im SVG-Format als Datei abzuspeichern. Dazu muß man nur die gleichen
Cairo-Graphikbefehle auf eine andere "Surface", eben die "SVG-Surface",
ausgeben.

Will man nun diese SVG-Daten wieder in eine "Graphik umwandeln", kann
man dazu wiederum Cairo benutzen. Dazu muß man aber die SVG-"Befehle"
wieder in Cairo-Zeichenmethoden umwandeln, die ihrerseits wieder auf die
zur Verfügung stehenden "Surfaces" rendert. Man könnte also mit Cairo
aus einer SVG-Graphik wieder eine SVG-Graphik erzeugen, oder aber eine
Bitmapgraphik im PNG Format oder eine Vektorgraphik im PDF-Format
(letztendlich Postscript) etc.

Man braucht also Cairo. Das steht hauptsächlich (so ist das halt eben
bei OpenSource) im Sourcecode zur Verfügung. Die übersetzte Version muß
ans Betriebsystem, auf dem sie verwendet werden soll, angepasst sein
(unter Windows sind das andere Voraussetzungen als zb unter Linux).

Unter Windows sollte das Ergebnis eine Dll mit einer Aufrufkonvention
gemäß StdCall sein. Sowas ist nicht leicht zu finden, da die OpenSource
Szene hier Vorbehalte (um nicht zu sagen, Vorurteile) hat. Deshalb mein
Hinweis auf die von Olaf Schmidt zur Verfügung gestellte Windowsversion.
Alternativ gibt es noch eine Variante, die Cairo im Rahmen einer Gtk+
bzw Gimp-Installation sozusagen als Beifang mit bringt.

Du willst diese Dll aus einem .NET Programm heraus ansprechen. Das geht
mit PInvoke. Einfacher ist es, diesen Umweg über PInvoke auszulassen und
direkt .NET kompatible Methoden verwenden zu können. Sowas nennt man
Wrapper oder Language Binding. Das Mono-Projekt hat sowas. Oder eben der
COM-Wrapper von Olaf.

Bjoern Hoehrmann

unread,
Nov 10, 2013, 8:54:19 PM11/10/13
to
* Ulrich Korndoerfer wrote in de.comp.lang.dotnet.csharp:
>Unter Windows sollte das Ergebnis eine Dll mit einer Aufrufkonvention
>gemäß StdCall sein. Sowas ist nicht leicht zu finden, da die OpenSource
>Szene hier Vorbehalte (um nicht zu sagen, Vorurteile) hat.

Ich habe in 15 Jahren Open Source Entwicklung unter Windows noch nicht
gehört, dass man die diesbezüglichen Voreinstellungen von Visual C++
überschreiben soll. Und es scheint mir auch nicht sinnvoll zu sein, z.B.
wenn die Bibliothek nur Funktionen des C-Standards verwendet und nicht
auf die Windows API zugreift. Microsofts Laufzeitbibliotheken benutzen
da ja auch die C-Aufrufkonvention.
0 new messages