Hallo, in Windows.Forms kann man auf dem Graphics-Objekt Linien, etc. zeichnen. Allerdings sind die Elemente keine Objekte, d.h. nach dem Zeichnen ist Schluss. Ich suche nun eine Möglichkeit, Linien, Kreise etc. als Objekte behandeln und z.B. auch ermitteln zu können, ob sich die einzelnen Objekte schneiden. Momentan fehlt mir die Zeit mich in XAML einzuarbeiten, sonst würd ich's mit WPF versuchen. Ich würd gern bei Windows.Forms bleiben. Gibt's in den weiten des Frameworks etwas, das ich übersehen habe? Ralf
Ralf schrieb: > Hallo, > > in Windows.Forms kann man auf dem Graphics-Objekt Linien, etc. zeichnen. > Allerdings sind die Elemente keine Objekte, d.h. nach dem Zeichnen ist > Schluss. Ich suche nun eine Möglichkeit, Linien, Kreise etc. als Objekte > behandeln und z.B. auch ermitteln zu können, ob sich die einzelnen > Objekte schneiden. > Momentan fehlt mir die Zeit mich in XAML einzuarbeiten, sonst würd ich's > mit WPF versuchen. Ich würd gern bei Windows.Forms bleiben. > > Gibt's in den weiten des Frameworks etwas, das ich übersehen habe? Musst du dir selbst machen. Das ist genauso, wie ein Buchstabe kein Objekt ist, sondern erst ein String. Oder ein Pixel kein eigenes Objekt ist, sondern erst eine Sammlung von Pixel (ein Bild). Je nachdem was man machen will, ist eine Linie für jeden was anderes und wird in Form einer Datenstruktur anders dargestellt. Hier gibt es normalerweise eine Trennung zwischen interner Datenstruktur und deren Darstellung. Windows (bzw. .Net) stellt dir Möglichkeiten zur Darstellung zur Verfügung aber um die geometrische Datenhaltung musst du dich selbst kümmern. Da gibts einfach zu viele unterschiedliche Möglichkeiten, je nachdem was man macht und was das Ziel ist. Man könnte zwar mit Metafiles da was machen. Ich denke allerdings nicht, dass sich das wirklich lohnt, da groß zu investieren. Ausser für ganz einfache Zeichenprogramme, ist das alles zu schwach auf der Brust. http://msdn.microsoft.com/de-de/library/system.drawing.graphics.aspx
> Das ist genauso, wie ein Buchstabe kein Objekt ist, sondern erst ein > String. Oder ein Pixel kein eigenes Objekt ist, sondern erst eine > Sammlung von Pixel (ein Bild). Ansichtssache. Für mich sind beides Objekte :) Aber ich weiss was du meinst. Dadurch dass es sich bei Pixeln, Linien etc. um die grundlegendsten Elemente handelt bin ich davon ausgegangen dass diese eben auch als Objekte abgebildet wurden. > Je nachdem was man machen will, ist eine Linie für jeden was anderes und > wird in Form einer Datenstruktur anders dargestellt. > Hier gibt es normalerweise eine Trennung zwischen interner Datenstruktur > und deren Darstellung. Du meinst ob z.B. eine Linie aus den absolut notwendigen Daten (P1/P2) oder mehr (z.B. Linienstärke, -farbe) besteht? > Windows (bzw. .Net) stellt dir Möglichkeiten zur Darstellung zur Verfügung > aber um die geometrische Datenhaltung musst du dich selbst kümmern. Da > gibts einfach zu viele unterschiedliche Möglichkeiten, je nachdem was man > macht und was das Ziel ist. Auch klar, jeder braucht andere "Features" - wäre ja durch Vererbung kein Problem. Im Prinzip heisst das aber, wenn jemand z.B. vektororientiert mit .NET zeichnen (nicht malen) will, dann muss er sich das alles selbst schreiben? Hätt ich nicht gedacht... Ralf
> Im Prinzip heisst das aber, wenn jemand z.B. vektororientiert mit .NET > zeichnen (nicht malen) will, dann muss er sich das alles selbst > schreiben? Hätt ich nicht gedacht... Wieso musst du da was selbst schreiben? Es gibt reichlich Grafikbibliotheken (GDI, GDI+, Direct2D, OpenGL) die du verwenden kannst...
Ralf schrieb: >> Hier gibt es normalerweise eine Trennung zwischen interner Datenstruktur >> und deren Darstellung. > Du meinst ob z.B. eine Linie aus den absolut notwendigen Daten (P1/P2) > oder mehr (z.B. Linienstärke, -farbe) besteht? Zum Beispiel. Ja Oder aber Ob ich die Linie durch Angabe ihrer Endpunktskoordinaten angebe Oder durch Startpunkt und Offset Oder parameterisch in Form von y = k*x + d Oder als Schnittgerade zweier Ebenen Oder ... Ist es eine 2D Linie oder reden wir überhaupt von 3D Grafik (deren 2D Projektion dargestellt wird). Oder ist die Linie überhaupt eine Kante in einem Polyeder? Welcher Polyeder? In Form eines BREP beschrieben oder parameterisch? Rotationskörper oder Extrusionskörper? Du siehst schon. Man kommt da vom hundersten ins tausendste. Allen gemeinsam ist: Irgendwann muss eine Linie in einer bestimmten Farbe auf den Bildschirm gepinselt werden. Das ist dann der kleinste gemeinsame Nenner. >> Windows (bzw. .Net) stellt dir Möglichkeiten zur Darstellung zur Verfügung >> aber um die geometrische Datenhaltung musst du dich selbst kümmern. Da >> gibts einfach zu viele unterschiedliche Möglichkeiten, je nachdem was man >> macht und was das Ziel ist. > Auch klar, jeder braucht andere "Features" - wäre ja durch Vererbung > kein Problem. Du kannst deine geometrischen Primtiva Speichern in Form von Listen. Du kannst aber zb auch einen Quadtree benutzen. Was ist mit Gruppierungen (4 Linien bilden zusammen ein Rechteck)? Soll es Layer geben? Wie verhalten sich Layer? etc. etc. > Im Prinzip heisst das aber, wenn jemand z.B. vektororientiert mit .NET > zeichnen (nicht malen) will, dann muss er sich das alles selbst > schreiben? Hätt ich nicht gedacht... Irgendwo wirds sicherlich auch ein fertiges Framework geben. Ich hab meine immer selbst gemacht. Geht einfach am schnellsten und ich hab das was ich brauche. Dann ist ja auch noch die Frage, in welcher Form soll das auf eine Datei gespeichert werden, wie kommt es ins Clipboard, etc. (Themenkreis Datenformate - DXF, OBJ, ...)
Karl Heinz Buchegger schrieb: > Irgendwo wirds sicherlich auch ein fertiges Framework geben. Zum Beispiel XNA. Gibts frei zum Download. XNA 3.1 für VS2008: http://www.microsoft.com/en-us/download/details.aspx?id=39 XNA 4.0 ab VS2010: http://www.microsoft.com/en-us/download/details.aspx?id=23714
@Sharping: > Wieso musst du da was selbst schreiben? Es gibt reichlich > Grafikbibliotheken (GDI, GDI+, Direct2D, OpenGL) die du verwenden > kannst... GDI war doch auch mit XAML, dachte ich? Die beiden anderen werd ich gleich mal suchen, danke. @Karl Heinz Buchegger: > Du kannst deine geometrischen Primtiva Speichern in Form von Listen. Wobei ich die Liste mit den "wichtigen" Sachen fülle? Also für ne Linie mit P1/P2, für ein (nicht rotiertes) Rechteck ebenfalls mit P1/P2, etc. Oder meintest du direkt die Geometrie abspeichern? > Ich hab meine immer selbst gemacht. Geht einfach am schnellsten und ich > hab das was ich brauche. Klar, aber das von der Pike auf selbst zu machen erfordert m.E. ein größeres Grundwissen, oder? Ich stehe nur selten vor der Notwendigkeit eine GUI bzw. überhaupt ein PC-Programm erstellen zu müssen, daher mangelt es mir an einigen Stellen an Wissen. NET verwende ich hauptsächlich wegen der einfachen GUI-Erstellung, aber solche Sachen wie "im GAC registrieren", strong name, weak name, etc. sagen mir alles nichts. Wenn mir ein professioneller NET-Programmierer über meine Mini-Tools gucken würde kämen da sicherlich noch ein paar "du musst aber noch..." heraus. > Dann ist ja auch noch die Frage, in welcher Form soll das auf eine Datei > gespeichert werden, wie kommt es ins Clipboard, etc. (Themenkreis > Datenformate - DXF, OBJ, ...) Das stimmt, aber primär geht's erstmal drum, überhaupt etwas angezeigt zu bekommen, dann mach ich mir Gedanken drum, ob ich's speichern muss und wenn ja wie. @Edson: > Zum Beispiel XNA. Gibts frei zum Download. Danke, ich schau's mir an. Ralf
http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.graphicspath.aspx http://msdn.microsoft.com/en-us/library/system.drawing.region.aspx Für Direct2D, DirectWrite gäbe es z.B. http://direct2dsharp.codeplex.com/ http://slimdx.org/
Ralf schrieb: > @Karl Heinz Buchegger: >> Du kannst deine geometrischen Primtiva Speichern in Form von Listen. > Wobei ich die Liste mit den "wichtigen" Sachen fülle? Also für ne Linie > mit P1/P2, für ein (nicht rotiertes) Rechteck ebenfalls mit P1/P2, etc. > Oder meintest du direkt die Geometrie abspeichern? Ich dachte eigentlich mehr an eine Liste von Primitiva in C++
1 | class Primtiv |
2 | {
|
3 | ...
|
4 | |
5 | virtual void Draw( ... ); |
6 | };
|
7 | |
8 | class Line : public Primitiv |
9 | {
|
10 | ...
|
11 | virtual void Draw( ... ) |
12 | {
|
13 | ....
|
14 | DrawLine( ... ); |
15 | }
|
16 | };
|
17 | |
18 | class Circle : public Primitiv |
19 | {
|
20 | ...
|
21 | virtual void Draw( ... ) |
22 | {
|
23 | DrawEllipse( .... ); |
24 | }
|
25 | };
|
26 | |
27 | class Geometry |
28 | {
|
29 | ....
|
30 | |
31 | virtual void Draw( ... ) |
32 | {
|
33 | // LIste durchgehen und alle Primitive zeichnen lassen
|
34 | }
|
35 | |
36 | std::list< Primitiv* > geometry_; |
37 | };
|
tob dich aus und ergänze zu den Linien was du brauchst.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.