Forum: PC-Programmierung Vektor-Zeichen-Programm programmieren


von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

Hallo,

wie programmiert man solche Oberflächen wie von Simulink, Xcos, 
Gnuradio-Companion, Inkscape, Openoffice draw, Corel draw oder 
ähnliches?

Es geht um die drag-drop-move-Funktion: Man nimmt ein Bildchen aus einem 
Sortimentskasten und wirft es auf einem weißen Blatt ab. Dann kann man 
es hin- und herschieben. Größer und kleiner ziehen, drehen, bearbeiten 
etc.

Auf welche Grundlage baut man so etwas auf?
Da gibt es ja eine Vielzahl an irgendwelchem Zeug: Qt, GTK, wxWidgets 
usw.
Wofür sollte man sich entscheiden?
Wie setzt man das richtig um, dass man nicht nach einiger Zeit merkt man 
hat sich etwas verbaut und muss jetzt alles noch einem neu schreiben?

von ... (Gast)


Lesenswert?

Sei mir nicht böse, aber die Frage ist so komisch gestellt, dass man 
vermuten muss, du hast noch nie richtig programmiert und vor allem auch 
nichts mit Grafik. Wie ist dein Kenntnisstand so in etwa?

von Purzel H. (hacky)


Lesenswert?

Ein Delphi kann das... zumindest einen Teil davon, den graphischen Teil, 
und den Rest, dh die Funktionalitaet muss man selbst bringen.

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

... schrieb:
> Sei mir nicht böse, aber die Frage ist so komisch gestellt, dass man
> vermuten muss, du hast noch nie richtig programmiert und vor allem auch
> nichts mit Grafik. Wie ist dein Kenntnisstand so in etwa?

Also "richtig" programmiert habe ich noch nicht. Ich denke ich habe eher 
C++ "geskripted" als programmiert. Also vor Kurzem habe ich einen 
Assembler gebaut. Wenn ich was mit "Grafik" gemacht habe, beschränkte 
sich das auf Buttons, Labels, msg.-Boxen und Bildverarbeitung mit 
OpenCV, so richtig interaktives Echtzeitgrafik-Zeug, wo ein Bildchen am 
Mauszeiger hängt und sich ohne geflackere übers Bild bewegt, habe ich 
noch nicht gemacht.

Achso: Ich möchte die Funktionalität in C/C++ oder ähnlichem machen. Ich 
bin auch bereit andere Sprachen (außer Python) zu benutzen, wenn es ganz 
vorteilhaft sein sollte. Tote Sprachen wie Pascal/Delphi kommen nicht in 
Frage. Natürlich sollte es möglichst ohne Probleme auch unter Windows, 
Linux, MacOS laufen.

von Lapapp (Gast)


Lesenswert?

Hin und Her- Schieben:
Du fängst das MouseDown-Event ab. Prüfst dann, ob eines der Elemente in 
der großen Liste aller Elemente auf Deinem Zeichenpapier genau unterhalb 
der Mausposition liegen. Ob also die Ecke links oben links und oberhalb 
des Cursors liegt und die rechts unten rechts und unterhalb.

Wenn ja, dann merkst Du Dir die Mausposition und verschiebst das Element 
solange um die Mausposition relativ zu der gemerkten, bis das MouseUp 
Event kommt.

Das war das Schieben. Ähnlich geht es mit Ziehen, Rotieren, markieren 
usw.

von Klaus W. (mfgkw)


Lesenswert?

Bei der Qt-Doku gibt es m.W. als Tutorial ein kleines Zeichenprogramm.

von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

@Lapapp:

Ja das ist ja das Prinzip, wie es intern funktioniert. Ich brauche aber 
erst mal das "Objekt" und das Verschieben muss ja sozusagen in Echtzeit 
gehen. Also wenn ich das Objekt anfasse und bewege, wirft ja jede 
Mausbewegung ein Event und ändert die Koordinaten des Objekts. 
Worst-Case wäre ja, wenn die CPU jetzt Pixel für Pixel das Gesamte Bild 
ohne altes Objekt neu zeichnet und das neue Objekt Pixel für Pixel 
drüber malt. Intern muss das Ja mit Layern, Grafikbeschleunigung usw. 
arbeiten. Da braucht man den richtigen Grafik-Objekttyp für das 
Bildchen. Also nicht man kann ja nicht alles manuell machen, sonst wird 
das sicher Murks.

Wie machen es denn die Profis? Und warum so und nicht anders?

von hmmm (Gast)


Lesenswert?

Im Grunde doch, wird alles ständig neugezeichnet/aus dem RAM an die 
richtige bildschirmstelle Kopiert. Wieviel einem davon nun das 
Grafikframework abnimmt ist eine andere Sache und hängt immer vom 
Einzelfall ab...

von Rolf M. (rmagnus)


Lesenswert?

Stefan Helmert schrieb:
> Da gibt es ja eine Vielzahl an irgendwelchem Zeug: Qt, GTK, wxWidgets
> usw.
> Wofür sollte man sich entscheiden?

Wenn es darauf die ultimative Antwort gäbe, dann gäbe es auch nur ein 
GUI-Toolkit. Ich würde Qt verwenden, weil ich mich damit gut auskenne 
und es gerne benutze, aber das ist eben eher subjektiv. Jemand anders 
wird dir zu was anderem raten. Gehen tut's mit allen.

> Wie setzt man das richtig um, dass man nicht nach einiger Zeit merkt man
> hat sich etwas verbaut und muss jetzt alles noch einem neu schreiben?

Mit viel Erfahrung. Und selbst dann kann sowas noch passieren. Du 
solltest sowieso davon ausgehen, daß dein erstes Programm sowieso quasi 
zum wegwerfen ist. Das geht jedem so.

Lapapp schrieb:
> Das war das Schieben. Ähnlich geht es mit Ziehen, Rotieren, markieren
> usw.

Oder man nimmt Klassen, wo sowas schon fix und fertig implementiert ist. 
Bei Qt wäre das z.B. QGraphicsView und Konsorten.

Stefan Helmert schrieb:
> Intern muss das Ja mit Layern, Grafikbeschleunigung usw.
> arbeiten. Da braucht man den richtigen Grafik-Objekttyp für das
> Bildchen. Also nicht man kann ja nicht alles manuell machen, sonst wird
> das sicher Murks.
>
> Wie machen es denn die Profis? Und warum so und nicht anders?

Wie du schon erkannt hast, verwenden die entsprechende APIs, wo solche 
Funktionen schon umgesetzt sind, von Leuten, die genau wissen, wie man 
sowas effizient und elegant hinbekommt. Gerade dafür hat man ja 
GUI-Toolkits.

hmmm schrieb:
> Im Grunde doch, wird alles ständig neugezeichnet/aus dem RAM an die
> richtige bildschirmstelle Kopiert. Wieviel einem davon nun das
> Grafikframework abnimmt ist eine andere Sache und hängt immer vom
> Einzelfall ab...

Das sollte einem bereits die Grafik-Hardware abnehmen. Dafür gab's schon 
auf dem Amiga den Blitter.

von Uwe (Gast)


Lesenswert?

WinAPI und Direct Draw usw. wenn man es selber basteln will (das GUI 
toolkit)

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.